@blazes/data-visualization 0.0.0-stage → 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +238 -2
- package/dist/.vite/manifest.json +129 -0
- package/dist/PivotTableS2Renderer-C-Urwhuv.js +109 -0
- package/dist/PivotTableS2Renderer-C-Urwhuv.js.map +1 -0
- package/dist/WordCloudRenderer-7tzJz57a.js +96 -0
- package/dist/WordCloudRenderer-7tzJz57a.js.map +1 -0
- package/dist/core/adapter/index.d.ts +5 -0
- package/dist/core/adapter/index.d.ts.map +1 -0
- package/dist/core/adapter/standard-adapters.d.ts +211 -0
- package/dist/core/adapter/standard-adapters.d.ts.map +1 -0
- package/dist/core/adapter/standard-definitions.d.ts +230 -0
- package/dist/core/adapter/standard-definitions.d.ts.map +1 -0
- package/dist/core/adapter/types.d.ts +44 -0
- package/dist/core/adapter/types.d.ts.map +1 -0
- package/dist/core/adapter/view-models.d.ts +101 -0
- package/dist/core/adapter/view-models.d.ts.map +1 -0
- package/dist/core/config/config-validator.d.ts +27 -0
- package/dist/core/config/config-validator.d.ts.map +1 -0
- package/dist/core/config/dashboard-config-schema.d.ts +1360 -0
- package/dist/core/config/dashboard-config-schema.d.ts.map +1 -0
- package/dist/core/config/dashboard-config.d.ts +410 -0
- package/dist/core/config/dashboard-config.d.ts.map +1 -0
- package/dist/core/config/index.d.ts +9 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/json-value.d.ts +5 -0
- package/dist/core/config/json-value.d.ts.map +1 -0
- package/dist/core/config/runtime-schema.d.ts +28 -0
- package/dist/core/config/runtime-schema.d.ts.map +1 -0
- package/dist/core/config/schema-version.d.ts +3 -0
- package/dist/core/config/schema-version.d.ts.map +1 -0
- package/dist/core/config/serializable.d.ts +6 -0
- package/dist/core/config/serializable.d.ts.map +1 -0
- package/dist/core/config/value-path.d.ts +2 -0
- package/dist/core/config/value-path.d.ts.map +1 -0
- package/dist/core/dataset/dataset-runner.d.ts +28 -0
- package/dist/core/dataset/dataset-runner.d.ts.map +1 -0
- package/dist/core/dataset/index.d.ts +4 -0
- package/dist/core/dataset/index.d.ts.map +1 -0
- package/dist/core/dataset/normalize.d.ts +8 -0
- package/dist/core/dataset/normalize.d.ts.map +1 -0
- package/dist/core/dataset/types.d.ts +37 -0
- package/dist/core/dataset/types.d.ts.map +1 -0
- package/dist/core/export/csv.d.ts +11 -0
- package/dist/core/export/csv.d.ts.map +1 -0
- package/dist/core/export/index.d.ts +2 -0
- package/dist/core/export/index.d.ts.map +1 -0
- package/dist/core/formatter/index.d.ts +2 -0
- package/dist/core/formatter/index.d.ts.map +1 -0
- package/dist/core/formatter/value-formatter.d.ts +14 -0
- package/dist/core/formatter/value-formatter.d.ts.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +111 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/provider/data-provider.d.ts +18 -0
- package/dist/core/provider/data-provider.d.ts.map +1 -0
- package/dist/core/provider/index.d.ts +5 -0
- package/dist/core/provider/index.d.ts.map +1 -0
- package/dist/core/provider/request-executor.d.ts +48 -0
- package/dist/core/provider/request-executor.d.ts.map +1 -0
- package/dist/core/provider/request-value-codec.d.ts +15 -0
- package/dist/core/provider/request-value-codec.d.ts.map +1 -0
- package/dist/core/provider/resolve-request-input.d.ts +12 -0
- package/dist/core/provider/resolve-request-input.d.ts.map +1 -0
- package/dist/core/registry/core-registries.d.ts +15 -0
- package/dist/core/registry/core-registries.d.ts.map +1 -0
- package/dist/core/registry/index.d.ts +4 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/plugin-registry.d.ts +28 -0
- package/dist/core/registry/plugin-registry.d.ts.map +1 -0
- package/dist/core/registry/register-standard.d.ts +4 -0
- package/dist/core/registry/register-standard.d.ts.map +1 -0
- package/dist/core/runtime/dashboard-data-runtime.d.ts +26 -0
- package/dist/core/runtime/dashboard-data-runtime.d.ts.map +1 -0
- package/dist/core/runtime/dashboard-runtime.d.ts +458 -0
- package/dist/core/runtime/dashboard-runtime.d.ts.map +1 -0
- package/dist/core/runtime/dependency-graph.d.ts +11 -0
- package/dist/core/runtime/dependency-graph.d.ts.map +1 -0
- package/dist/core/runtime/index.d.ts +5 -0
- package/dist/core/runtime/index.d.ts.map +1 -0
- package/dist/core/runtime/types.d.ts +47 -0
- package/dist/core/runtime/types.d.ts.map +1 -0
- package/dist/core/telemetry/index.d.ts +2 -0
- package/dist/core/telemetry/index.d.ts.map +1 -0
- package/dist/core/telemetry/telemetry.d.ts +15 -0
- package/dist/core/telemetry/telemetry.d.ts.map +1 -0
- package/dist/core/variable/dashboard-context.d.ts +22 -0
- package/dist/core/variable/dashboard-context.d.ts.map +1 -0
- package/dist/core/variable/index.d.ts +3 -0
- package/dist/core/variable/index.d.ts.map +1 -0
- package/dist/core/variable/url-state.d.ts +17 -0
- package/dist/core/variable/url-state.d.ts.map +1 -0
- package/dist/csv-Dyrr2yMA.js +254 -0
- package/dist/csv-Dyrr2yMA.js.map +1 -0
- package/dist/dashboard-runtime-8a-9P8Ku.js +1540 -0
- package/dist/dashboard-runtime-8a-9P8Ku.js.map +1 -0
- package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts +18 -0
- package/dist/experimental/s2/PivotTableS2Renderer.vue.d.ts.map +1 -0
- package/dist/experimental/s2/index.d.ts +13 -0
- package/dist/experimental/s2/index.d.ts.map +1 -0
- package/dist/experimental/s2/index.js +66 -0
- package/dist/experimental/s2/index.js.map +1 -0
- package/dist/experimental/s2/pivot-table-s2.d.ts +23 -0
- package/dist/experimental/s2/pivot-table-s2.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +111 -0
- package/dist/index.js.map +1 -0
- package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts +20 -0
- package/dist/renderers/word-cloud/WordCloudRenderer.vue.d.ts.map +1 -0
- package/dist/renderers/word-cloud/index.d.ts +8 -0
- package/dist/renderers/word-cloud/index.d.ts.map +1 -0
- package/dist/renderers/word-cloud/index.js +17 -0
- package/dist/renderers/word-cloud/index.js.map +1 -0
- package/dist/runtime-schema-BO2qLlvE.js +580 -0
- package/dist/runtime-schema-BO2qLlvE.js.map +1 -0
- package/dist/serializable-DOOpLZyk.js +36 -0
- package/dist/serializable-DOOpLZyk.js.map +1 -0
- package/dist/standard-definitions-DHtaLAf1.js +351 -0
- package/dist/standard-definitions-DHtaLAf1.js.map +1 -0
- package/dist/value-formatter-D5QmLSMG.js +47 -0
- package/dist/value-formatter-D5QmLSMG.js.map +1 -0
- package/dist/visual-theme-DH-k3L51.js +23 -0
- package/dist/visual-theme-DH-k3L51.js.map +1 -0
- package/dist/vue/components/DashboardFilterBar.vue.d.ts +23 -0
- package/dist/vue/components/DashboardFilterBar.vue.d.ts.map +1 -0
- package/dist/vue/components/DashboardPanel.vue.d.ts +39 -0
- package/dist/vue/components/DashboardPanel.vue.d.ts.map +1 -0
- package/dist/vue/components/DashboardRenderer.vue.d.ts +57 -0
- package/dist/vue/components/DashboardRenderer.vue.d.ts.map +1 -0
- package/dist/vue/components/index.d.ts +4 -0
- package/dist/vue/components/index.d.ts.map +1 -0
- package/dist/vue/composables/index.d.ts +2 -0
- package/dist/vue/composables/index.d.ts.map +1 -0
- package/dist/vue/composables/use-dashboard-runtime.d.ts +17 -0
- package/dist/vue/composables/use-dashboard-runtime.d.ts.map +1 -0
- package/dist/vue/export/browser-download.d.ts +3 -0
- package/dist/vue/export/browser-download.d.ts.map +1 -0
- package/dist/vue/export/index.d.ts +2 -0
- package/dist/vue/export/index.d.ts.map +1 -0
- package/dist/vue/index.d.ts +7 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +1064 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/vue/registry/index.d.ts +3 -0
- package/dist/vue/registry/index.d.ts.map +1 -0
- package/dist/vue/registry/register-standard.d.ts +3 -0
- package/dist/vue/registry/register-standard.d.ts.map +1 -0
- package/dist/vue/registry/renderer-registry.d.ts +12 -0
- package/dist/vue/registry/renderer-registry.d.ts.map +1 -0
- package/dist/vue/renderers/BarRenderer.vue.d.ts +24 -0
- package/dist/vue/renderers/BarRenderer.vue.d.ts.map +1 -0
- package/dist/vue/renderers/LineRenderer.vue.d.ts +24 -0
- package/dist/vue/renderers/LineRenderer.vue.d.ts.map +1 -0
- package/dist/vue/renderers/MetricRenderer.vue.d.ts +17 -0
- package/dist/vue/renderers/MetricRenderer.vue.d.ts.map +1 -0
- package/dist/vue/renderers/PieRenderer.vue.d.ts +24 -0
- package/dist/vue/renderers/PieRenderer.vue.d.ts.map +1 -0
- package/dist/vue/renderers/TableRenderer.vue.d.ts +21 -0
- package/dist/vue/renderers/TableRenderer.vue.d.ts.map +1 -0
- package/dist/vue/renderers/chart-format.d.ts +8 -0
- package/dist/vue/renderers/chart-format.d.ts.map +1 -0
- package/dist/vue/renderers/index.d.ts +7 -0
- package/dist/vue/renderers/index.d.ts.map +1 -0
- package/dist/vue/theme/index.d.ts +2 -0
- package/dist/vue/theme/index.d.ts.map +1 -0
- package/dist/vue/theme/visual-theme.d.ts +46 -0
- package/dist/vue/theme/visual-theme.d.ts.map +1 -0
- package/package.json +129 -4
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
var V = Object.defineProperty;
|
|
2
|
+
var j = (e) => {
|
|
3
|
+
throw TypeError(e);
|
|
4
|
+
};
|
|
5
|
+
var z = (e, r, t) => r in e ? V(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
|
|
6
|
+
var m = (e, r, t) => z(e, typeof r != "symbol" ? r + "" : r, t), C = (e, r, t) => r.has(e) || j("Cannot " + t);
|
|
7
|
+
var d = (e, r, t) => (C(e, r, "read from private field"), t ? t.call(e) : r.get(e)), w = (e, r, t) => r.has(e) ? j("Cannot add the same private member more than once") : r instanceof WeakSet ? r.add(e) : r.set(e, t);
|
|
8
|
+
import { c as b, i as _, j as D } from "./serializable-DOOpLZyk.js";
|
|
9
|
+
import { v as x } from "./value-formatter-D5QmLSMG.js";
|
|
10
|
+
function N(e, r) {
|
|
11
|
+
try {
|
|
12
|
+
e == null || e(Object.freeze({ ...r }));
|
|
13
|
+
} catch {
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class $ extends Error {
|
|
17
|
+
constructor(t, a, s) {
|
|
18
|
+
super(s);
|
|
19
|
+
m(this, "code");
|
|
20
|
+
m(this, "variableId");
|
|
21
|
+
this.name = "DashboardVariableError", this.code = t, this.variableId = a;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function E(e, r) {
|
|
25
|
+
var a;
|
|
26
|
+
const t = (a = e.variables) == null ? void 0 : a.find((s) => s.id === r);
|
|
27
|
+
if (!t)
|
|
28
|
+
throw new $("variable_not_found", r, `Dashboard variable not found: ${r}`);
|
|
29
|
+
return t;
|
|
30
|
+
}
|
|
31
|
+
function P(e, r) {
|
|
32
|
+
const t = r.variables ?? {}, a = Object.fromEntries(
|
|
33
|
+
(e.variables ?? []).map((s) => [
|
|
34
|
+
s.id,
|
|
35
|
+
b(
|
|
36
|
+
Object.prototype.hasOwnProperty.call(t, s.id) ? t[s.id] : s.defaultValue
|
|
37
|
+
)
|
|
38
|
+
])
|
|
39
|
+
);
|
|
40
|
+
return Object.freeze({
|
|
41
|
+
dashboardId: e.id,
|
|
42
|
+
variables: Object.freeze(a),
|
|
43
|
+
timezone: r.timezone,
|
|
44
|
+
locale: r.locale
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function K(e, r, t) {
|
|
48
|
+
const a = E(e, t);
|
|
49
|
+
return b(
|
|
50
|
+
Object.prototype.hasOwnProperty.call(r.variables, t) ? r.variables[t] : a.defaultValue
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function A(e, r, t, a) {
|
|
54
|
+
if (E(e, t), !_(a))
|
|
55
|
+
throw new $(
|
|
56
|
+
"variable_value_invalid",
|
|
57
|
+
t,
|
|
58
|
+
`Dashboard variable value is not JSON serializable: ${t}`
|
|
59
|
+
);
|
|
60
|
+
return Object.freeze({
|
|
61
|
+
...r,
|
|
62
|
+
variables: Object.freeze({ ...r.variables, [t]: b(a) })
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function O(e) {
|
|
66
|
+
return e.urlCodec ? e.urlCodec : Array.isArray(e.defaultValue) ? e.defaultValue.every((r) => typeof r == "number") ? "number-array" : e.defaultValue.every((r) => typeof r == "string") ? "string-array" : "json" : typeof e.defaultValue == "number" || typeof e.defaultValue == "boolean" ? typeof e.defaultValue : e.defaultValue !== null && typeof e.defaultValue == "object" ? "json" : "string";
|
|
67
|
+
}
|
|
68
|
+
function R(e, r) {
|
|
69
|
+
switch (O(r)) {
|
|
70
|
+
case "number": {
|
|
71
|
+
if (e.trim() === "") return;
|
|
72
|
+
const t = Number(e);
|
|
73
|
+
return Number.isFinite(t) ? t : void 0;
|
|
74
|
+
}
|
|
75
|
+
case "boolean":
|
|
76
|
+
return e === "true" ? !0 : e === "false" ? !1 : void 0;
|
|
77
|
+
case "string-array":
|
|
78
|
+
return e ? e.split(",") : [];
|
|
79
|
+
case "number-array": {
|
|
80
|
+
const t = e ? e.split(",").map(Number) : [];
|
|
81
|
+
return t.every(Number.isFinite) ? t : void 0;
|
|
82
|
+
}
|
|
83
|
+
case "json":
|
|
84
|
+
try {
|
|
85
|
+
const t = JSON.parse(e);
|
|
86
|
+
return _(t) ? t : void 0;
|
|
87
|
+
} catch {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
default:
|
|
91
|
+
return e;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function q(e, r) {
|
|
95
|
+
switch (O(r)) {
|
|
96
|
+
case "string-array":
|
|
97
|
+
case "number-array":
|
|
98
|
+
return Array.isArray(e) ? e.join(",") : "";
|
|
99
|
+
case "json":
|
|
100
|
+
return JSON.stringify(e);
|
|
101
|
+
default:
|
|
102
|
+
return String(e ?? "");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function M(e, r, t, a) {
|
|
106
|
+
const s = new URLSearchParams(r), n = [];
|
|
107
|
+
let i = P(e, t);
|
|
108
|
+
for (const o of e.variables ?? []) {
|
|
109
|
+
if (!o.urlKey || !s.has(o.urlKey))
|
|
110
|
+
continue;
|
|
111
|
+
const h = R(s.get(o.urlKey) ?? "", o);
|
|
112
|
+
if (h === void 0) {
|
|
113
|
+
n.push({
|
|
114
|
+
level: "warning",
|
|
115
|
+
code: "variable_decode_error",
|
|
116
|
+
message: `Unable to decode URL variable ${o.id}. The default value was used.`,
|
|
117
|
+
variableId: o.id,
|
|
118
|
+
urlKey: o.urlKey
|
|
119
|
+
}), N(a, {
|
|
120
|
+
name: "variable_decode_error",
|
|
121
|
+
dashboardId: e.id,
|
|
122
|
+
errorCode: "variable_decode_error"
|
|
123
|
+
});
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
i = A(e, i, o.id, h);
|
|
127
|
+
}
|
|
128
|
+
return { context: i, diagnostics: Object.freeze(n) };
|
|
129
|
+
}
|
|
130
|
+
function T(e, r, t = "") {
|
|
131
|
+
const a = new URLSearchParams(t);
|
|
132
|
+
for (const n of e.variables ?? []) {
|
|
133
|
+
if (!n.urlKey)
|
|
134
|
+
continue;
|
|
135
|
+
const i = K(e, r, n.id);
|
|
136
|
+
D(i, n.defaultValue) ? a.delete(n.urlKey) : a.set(n.urlKey, q(i, n));
|
|
137
|
+
}
|
|
138
|
+
const s = a.toString();
|
|
139
|
+
return s ? `?${s}` : "";
|
|
140
|
+
}
|
|
141
|
+
class y extends Error {
|
|
142
|
+
constructor(t, a, s, n) {
|
|
143
|
+
super(n);
|
|
144
|
+
m(this, "code");
|
|
145
|
+
m(this, "registryName");
|
|
146
|
+
m(this, "entryId");
|
|
147
|
+
this.name = "RegistryError", this.code = t, this.registryName = a, this.entryId = s;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
var l;
|
|
151
|
+
class Z {
|
|
152
|
+
constructor(r) {
|
|
153
|
+
w(this, l, /* @__PURE__ */ new Map());
|
|
154
|
+
this.name = r;
|
|
155
|
+
}
|
|
156
|
+
register(r) {
|
|
157
|
+
if (!r.id.trim())
|
|
158
|
+
throw new y("invalid_registry_id", this.name, r.id, `${this.name} entry ID cannot be empty.`);
|
|
159
|
+
if (d(this, l).has(r.id))
|
|
160
|
+
throw new y(
|
|
161
|
+
"duplicate_registry_id",
|
|
162
|
+
this.name,
|
|
163
|
+
r.id,
|
|
164
|
+
`${this.name} entry is already registered: ${r.id}`
|
|
165
|
+
);
|
|
166
|
+
return d(this, l).set(r.id, r), this;
|
|
167
|
+
}
|
|
168
|
+
registerMany(r) {
|
|
169
|
+
return r.forEach((t) => this.register(t)), this;
|
|
170
|
+
}
|
|
171
|
+
get(r) {
|
|
172
|
+
return d(this, l).get(r);
|
|
173
|
+
}
|
|
174
|
+
require(r) {
|
|
175
|
+
const t = this.get(r);
|
|
176
|
+
if (!t)
|
|
177
|
+
throw new y("registry_entry_not_found", this.name, r, `${this.name} entry is not registered: ${r}`);
|
|
178
|
+
return t;
|
|
179
|
+
}
|
|
180
|
+
has(r) {
|
|
181
|
+
return d(this, l).has(r);
|
|
182
|
+
}
|
|
183
|
+
values() {
|
|
184
|
+
return Array.from(d(this, l).values());
|
|
185
|
+
}
|
|
186
|
+
clear() {
|
|
187
|
+
d(this, l).clear();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
l = new WeakMap();
|
|
191
|
+
function f(e) {
|
|
192
|
+
return Array.from(new Set(e.filter((r) => !!r)));
|
|
193
|
+
}
|
|
194
|
+
function J(e) {
|
|
195
|
+
switch (e.type) {
|
|
196
|
+
case "metric":
|
|
197
|
+
return f([e.valueField, e.compareField]);
|
|
198
|
+
case "line":
|
|
199
|
+
return f([e.xField, e.seriesField, ...e.yFields]);
|
|
200
|
+
case "bar":
|
|
201
|
+
return f([e.categoryField, e.seriesField, ...e.valueFields]);
|
|
202
|
+
case "pie":
|
|
203
|
+
return f([e.nameField, e.valueField]);
|
|
204
|
+
case "table":
|
|
205
|
+
return f(e.columns);
|
|
206
|
+
case "wordCloud":
|
|
207
|
+
return f([...e.labelFields, e.valueField, e.semanticField]);
|
|
208
|
+
case "pivotTableS2":
|
|
209
|
+
return f([...e.rowFields, ...e.columnFields, ...e.valueFields]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function U(e) {
|
|
213
|
+
return e === "date" ? { type: "date" } : e === "datetime" ? { type: "datetime" } : e === "number" ? { type: "number" } : { type: "number" };
|
|
214
|
+
}
|
|
215
|
+
function g(e) {
|
|
216
|
+
const r = String(e);
|
|
217
|
+
return /[",\r\n]/.test(r) ? `"${r.replace(/"/g, '""')}"` : r;
|
|
218
|
+
}
|
|
219
|
+
function G(e, r, t, a = {}) {
|
|
220
|
+
const s = J(r.binding), n = new Map(e.fields.map((u) => [u.key, u])), i = s.map((u) => {
|
|
221
|
+
const c = n.get(u);
|
|
222
|
+
if (!c) throw new Error(`CSV export field not found in dataset ${e.datasetId}: ${u}`);
|
|
223
|
+
return c;
|
|
224
|
+
}), o = a.lineEnding ?? `\r
|
|
225
|
+
`, h = [
|
|
226
|
+
i.map((u) => g(u.label)).join(","),
|
|
227
|
+
...e.rows.map(
|
|
228
|
+
(u) => i.map((c) => {
|
|
229
|
+
var p, v, F;
|
|
230
|
+
const S = ((F = (v = (p = r.enhancement) == null ? void 0 : p.common) == null ? void 0 : v.formatOverrides) == null ? void 0 : F[c.key]) ?? c.format ?? U(c.dataType);
|
|
231
|
+
return g(x.formatExport(u[c.key], S));
|
|
232
|
+
}).join(",")
|
|
233
|
+
)
|
|
234
|
+
];
|
|
235
|
+
return `${a.includeBom === !1 ? "" : "\uFEFF"}${h.join(o)}`;
|
|
236
|
+
}
|
|
237
|
+
function H(e, r) {
|
|
238
|
+
return `${`${e}-${r}`.replace(/[^A-Za-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "dashboard-panel"}.csv`;
|
|
239
|
+
}
|
|
240
|
+
export {
|
|
241
|
+
$ as D,
|
|
242
|
+
Z as P,
|
|
243
|
+
y as R,
|
|
244
|
+
H as a,
|
|
245
|
+
T as b,
|
|
246
|
+
P as c,
|
|
247
|
+
M as d,
|
|
248
|
+
N as e,
|
|
249
|
+
J as g,
|
|
250
|
+
K as r,
|
|
251
|
+
G as s,
|
|
252
|
+
A as w
|
|
253
|
+
};
|
|
254
|
+
//# sourceMappingURL=csv-Dyrr2yMA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-Dyrr2yMA.js","sources":["../src/core/telemetry/telemetry.ts","../src/core/variable/dashboard-context.ts","../src/core/variable/url-state.ts","../src/core/registry/plugin-registry.ts","../src/core/export/csv.ts"],"sourcesContent":["export type VisualizationTelemetryEventName =\n | \"config_validated\"\n | \"request_started\"\n | \"request_succeeded\"\n | \"request_failed\"\n | \"request_cancelled\"\n | \"request_cache_hit\"\n | \"dataset_cache_hit\"\n | \"dataset_succeeded\"\n | \"dataset_failed\"\n | \"adapter_failed\"\n | \"renderer_failed\"\n | \"export_failed\"\n | \"variable_decode_error\";\n\nexport interface VisualizationTelemetryEvent {\n name: VisualizationTelemetryEventName;\n dashboardId: string;\n requestId?: string;\n datasetId?: string;\n panelId?: string;\n providerId?: string;\n operationId?: string;\n durationMs?: number;\n errorCode?: string;\n}\n\nexport type VisualizationTelemetrySink = (event: Readonly<VisualizationTelemetryEvent>) => void;\n\nexport function emitTelemetry(sink: VisualizationTelemetrySink | undefined, event: VisualizationTelemetryEvent): void {\n try {\n sink?.(Object.freeze({ ...event }));\n } catch {\n // Telemetry must never break dashboard execution.\n }\n}\n","import type { DashboardConfig } from \"../config/dashboard-config-schema\";\nimport { cloneJsonValue, isJsonValue, type JsonValue } from \"../config\";\n\nexport interface DashboardContext {\n dashboardId: string;\n variables: Readonly<Record<string, JsonValue>>;\n timezone: string;\n locale: string;\n}\n\nexport interface CreateDashboardContextOptions {\n timezone: string;\n locale: string;\n variables?: Readonly<Record<string, JsonValue>>;\n}\n\nexport class DashboardVariableError extends Error {\n readonly code: \"variable_not_found\" | \"variable_value_invalid\";\n readonly variableId: string;\n\n constructor(code: DashboardVariableError[\"code\"], variableId: string, message: string) {\n super(message);\n this.name = \"DashboardVariableError\";\n this.code = code;\n this.variableId = variableId;\n }\n}\n\nfunction findVariable(config: DashboardConfig, variableId: string) {\n const variable = config.variables?.find((candidate) => candidate.id === variableId);\n if (!variable) {\n throw new DashboardVariableError(\"variable_not_found\", variableId, `Dashboard variable not found: ${variableId}`);\n }\n return variable;\n}\n\nexport function createDashboardContext(\n config: DashboardConfig,\n options: CreateDashboardContextOptions\n): DashboardContext {\n const overrides = options.variables ?? {};\n const variables = Object.fromEntries(\n (config.variables ?? []).map((variable) => [\n variable.id,\n cloneJsonValue(\n Object.prototype.hasOwnProperty.call(overrides, variable.id) ? overrides[variable.id]! : variable.defaultValue\n )\n ])\n );\n\n return Object.freeze({\n dashboardId: config.id,\n variables: Object.freeze(variables),\n timezone: options.timezone,\n locale: options.locale\n });\n}\n\nexport function readDashboardVariable(\n config: DashboardConfig,\n context: DashboardContext,\n variableId: string\n): JsonValue {\n const variable = findVariable(config, variableId);\n return cloneJsonValue(\n Object.prototype.hasOwnProperty.call(context.variables, variableId)\n ? context.variables[variableId]!\n : variable.defaultValue\n );\n}\n\nexport function writeDashboardVariable(\n config: DashboardConfig,\n context: DashboardContext,\n variableId: string,\n value: JsonValue\n): DashboardContext {\n findVariable(config, variableId);\n if (!isJsonValue(value)) {\n throw new DashboardVariableError(\n \"variable_value_invalid\",\n variableId,\n `Dashboard variable value is not JSON serializable: ${variableId}`\n );\n }\n\n return Object.freeze({\n ...context,\n variables: Object.freeze({ ...context.variables, [variableId]: cloneJsonValue(value) })\n });\n}\n","import type { DashboardConfig, DashboardVariableConfig } from \"../config/dashboard-config-schema\";\nimport { isJsonValue, jsonValuesEqual, type JsonValue } from \"../config\";\nimport { emitTelemetry, type VisualizationTelemetrySink } from \"../telemetry\";\nimport {\n createDashboardContext,\n readDashboardVariable,\n writeDashboardVariable,\n type CreateDashboardContextOptions,\n type DashboardContext\n} from \"./dashboard-context\";\n\nexport interface VariableDiagnostic {\n level: \"warning\";\n code: \"variable_decode_error\";\n message: string;\n variableId: string;\n urlKey: string;\n}\n\nexport interface RestoreDashboardContextResult {\n context: DashboardContext;\n diagnostics: ReadonlyArray<VariableDiagnostic>;\n}\n\nfunction resolveCodec(variable: DashboardVariableConfig) {\n if (variable.urlCodec) {\n return variable.urlCodec;\n }\n if (Array.isArray(variable.defaultValue)) {\n if (variable.defaultValue.every((item) => typeof item === \"number\")) {\n return \"number-array\";\n }\n if (variable.defaultValue.every((item) => typeof item === \"string\")) {\n return \"string-array\";\n }\n return \"json\";\n }\n if (typeof variable.defaultValue === \"number\" || typeof variable.defaultValue === \"boolean\") {\n return typeof variable.defaultValue;\n }\n if (variable.defaultValue !== null && typeof variable.defaultValue === \"object\") {\n return \"json\";\n }\n return \"string\";\n}\n\nfunction decodeValue(rawValue: string, variable: DashboardVariableConfig): JsonValue | undefined {\n switch (resolveCodec(variable)) {\n case \"number\": {\n if (rawValue.trim() === \"\") return undefined;\n const value = Number(rawValue);\n return Number.isFinite(value) ? value : undefined;\n }\n case \"boolean\":\n return rawValue === \"true\" ? true : rawValue === \"false\" ? false : undefined;\n case \"string-array\":\n return rawValue ? rawValue.split(\",\") : [];\n case \"number-array\": {\n const values = rawValue ? rawValue.split(\",\").map(Number) : [];\n return values.every(Number.isFinite) ? values : undefined;\n }\n case \"json\":\n try {\n const value: unknown = JSON.parse(rawValue);\n return isJsonValue(value) ? value : undefined;\n } catch {\n return undefined;\n }\n default:\n return rawValue;\n }\n}\n\nfunction encodeValue(value: JsonValue, variable: DashboardVariableConfig): string {\n switch (resolveCodec(variable)) {\n case \"string-array\":\n case \"number-array\":\n return Array.isArray(value) ? value.join(\",\") : \"\";\n case \"json\":\n return JSON.stringify(value);\n default:\n return String(value ?? \"\");\n }\n}\n\nexport function restoreDashboardContextFromSearch(\n config: DashboardConfig,\n search: string,\n options: CreateDashboardContextOptions,\n telemetry?: VisualizationTelemetrySink\n): RestoreDashboardContextResult {\n const query = new URLSearchParams(search);\n const diagnostics: VariableDiagnostic[] = [];\n let context = createDashboardContext(config, options);\n\n for (const variable of config.variables ?? []) {\n if (!variable.urlKey || !query.has(variable.urlKey)) {\n continue;\n }\n\n const decoded = decodeValue(query.get(variable.urlKey) ?? \"\", variable);\n if (decoded === undefined) {\n diagnostics.push({\n level: \"warning\",\n code: \"variable_decode_error\",\n message: `Unable to decode URL variable ${variable.id}. The default value was used.`,\n variableId: variable.id,\n urlKey: variable.urlKey\n });\n emitTelemetry(telemetry, {\n name: \"variable_decode_error\",\n dashboardId: config.id,\n errorCode: \"variable_decode_error\"\n });\n continue;\n }\n\n context = writeDashboardVariable(config, context, variable.id, decoded);\n }\n\n return { context, diagnostics: Object.freeze(diagnostics) };\n}\n\nexport function buildDashboardSearch(config: DashboardConfig, context: DashboardContext, currentSearch = \"\"): string {\n const query = new URLSearchParams(currentSearch);\n\n for (const variable of config.variables ?? []) {\n if (!variable.urlKey) {\n continue;\n }\n\n const value = readDashboardVariable(config, context, variable.id);\n if (jsonValuesEqual(value, variable.defaultValue)) {\n query.delete(variable.urlKey);\n } else {\n query.set(variable.urlKey, encodeValue(value, variable));\n }\n }\n\n const value = query.toString();\n return value ? `?${value}` : \"\";\n}\n","export interface RegistryEntry {\n id: string;\n}\n\nexport interface ReadonlyRegistry<T extends RegistryEntry> {\n get(id: string): T | undefined;\n require(id: string): T;\n has(id: string): boolean;\n values(): ReadonlyArray<T>;\n}\n\nexport class RegistryError extends Error {\n readonly code: \"duplicate_registry_id\" | \"invalid_registry_id\" | \"registry_entry_not_found\";\n readonly registryName: string;\n readonly entryId: string;\n\n constructor(code: RegistryError[\"code\"], registryName: string, entryId: string, message: string) {\n super(message);\n this.name = \"RegistryError\";\n this.code = code;\n this.registryName = registryName;\n this.entryId = entryId;\n }\n}\n\nexport class PluginRegistry<T extends RegistryEntry> implements ReadonlyRegistry<T> {\n readonly #entries = new Map<string, T>();\n\n constructor(readonly name: string) {}\n\n register(entry: T): this {\n if (!entry.id.trim()) {\n throw new RegistryError(\"invalid_registry_id\", this.name, entry.id, `${this.name} entry ID cannot be empty.`);\n }\n if (this.#entries.has(entry.id)) {\n throw new RegistryError(\n \"duplicate_registry_id\",\n this.name,\n entry.id,\n `${this.name} entry is already registered: ${entry.id}`\n );\n }\n\n this.#entries.set(entry.id, entry);\n return this;\n }\n\n registerMany(entries: ReadonlyArray<T>): this {\n entries.forEach((entry) => this.register(entry));\n return this;\n }\n\n get(id: string): T | undefined {\n return this.#entries.get(id);\n }\n\n require(id: string): T {\n const entry = this.get(id);\n if (!entry) {\n throw new RegistryError(\"registry_entry_not_found\", this.name, id, `${this.name} entry is not registered: ${id}`);\n }\n return entry;\n }\n\n has(id: string): boolean {\n return this.#entries.has(id);\n }\n\n values(): ReadonlyArray<T> {\n return Array.from(this.#entries.values());\n }\n\n clear(): void {\n this.#entries.clear();\n }\n}\n","import type { DatasetResult } from \"../dataset\";\nimport { valueFormatter, type FormatterContext } from \"../formatter\";\nimport type { PanelBinding, PanelConfig, ValueFormat } from \"../config\";\n\nexport interface SerializePanelCsvOptions {\n includeBom?: boolean;\n lineEnding?: \"\\r\\n\" | \"\\n\";\n}\n\nfunction unique(values: ReadonlyArray<string | undefined>): string[] {\n return Array.from(new Set(values.filter((value): value is string => Boolean(value))));\n}\n\nexport function getPanelExportFields(binding: PanelBinding): string[] {\n switch (binding.type) {\n case \"metric\":\n return unique([binding.valueField, binding.compareField]);\n case \"line\":\n return unique([binding.xField, binding.seriesField, ...binding.yFields]);\n case \"bar\":\n return unique([binding.categoryField, binding.seriesField, ...binding.valueFields]);\n case \"pie\":\n return unique([binding.nameField, binding.valueField]);\n case \"table\":\n return unique(binding.columns);\n case \"wordCloud\":\n return unique([...binding.labelFields, binding.valueField, binding.semanticField]);\n case \"pivotTableS2\":\n return unique([...binding.rowFields, ...binding.columnFields, ...binding.valueFields]);\n }\n}\n\nfunction defaultFormat(dataType: DatasetResult[\"fields\"][number][\"dataType\"]): ValueFormat {\n if (dataType === \"date\") return { type: \"date\" };\n if (dataType === \"datetime\") return { type: \"datetime\" };\n if (dataType === \"number\") return { type: \"number\" };\n return { type: \"number\" };\n}\n\nfunction escapeCsv(value: string | number | boolean): string {\n const text = String(value);\n return /[\",\\r\\n]/.test(text) ? `\"${text.replace(/\"/g, '\"\"')}\"` : text;\n}\n\nexport function serializePanelCsv(\n dataset: DatasetResult,\n panel: Pick<PanelConfig, \"binding\" | \"enhancement\">,\n _context: FormatterContext,\n options: SerializePanelCsvOptions = {}\n): string {\n const fieldIds = getPanelExportFields(panel.binding);\n const fieldsById = new Map(dataset.fields.map((field) => [field.key, field]));\n const fields = fieldIds.map((fieldId) => {\n const field = fieldsById.get(fieldId);\n if (!field) throw new Error(`CSV export field not found in dataset ${dataset.datasetId}: ${fieldId}`);\n return field;\n });\n const lineEnding = options.lineEnding ?? \"\\r\\n\";\n const lines = [\n fields.map((field) => escapeCsv(field.label)).join(\",\"),\n ...dataset.rows.map((row) =>\n fields\n .map((field) => {\n const format =\n panel.enhancement?.common?.formatOverrides?.[field.key] ?? field.format ?? defaultFormat(field.dataType);\n return escapeCsv(valueFormatter.formatExport(row[field.key], format));\n })\n .join(\",\")\n )\n ];\n return `${options.includeBom === false ? \"\" : \"\\uFEFF\"}${lines.join(lineEnding)}`;\n}\n\nexport function createPanelCsvFilename(dashboardId: string, panelId: string): string {\n const safe = `${dashboardId}-${panelId}`.replace(/[^A-Za-z0-9._-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n return `${safe || \"dashboard-panel\"}.csv`;\n}\n"],"names":["emitTelemetry","sink","event","DashboardVariableError","code","variableId","message","__publicField","findVariable","config","variable","_a","candidate","createDashboardContext","options","overrides","variables","cloneJsonValue","readDashboardVariable","context","writeDashboardVariable","value","isJsonValue","resolveCodec","item","decodeValue","rawValue","values","encodeValue","restoreDashboardContextFromSearch","search","telemetry","query","diagnostics","decoded","buildDashboardSearch","currentSearch","jsonValuesEqual","RegistryError","registryName","entryId","PluginRegistry","name","__privateAdd","_entries","entry","__privateGet","entries","id","unique","getPanelExportFields","binding","defaultFormat","dataType","escapeCsv","text","serializePanelCsv","dataset","panel","_context","fieldIds","fieldsById","field","fields","fieldId","lineEnding","lines","row","format","_c","_b","valueFormatter","createPanelCsvFilename","dashboardId","panelId"],"mappings":"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"}
|