autoql-fe-utils 1.11.18 → 1.11.21
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/index.d.mts +16 -4
- package/dist/index.d.ts +16 -4
- package/dist/index.global.js +152 -19
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +154 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +153 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -837,6 +837,7 @@ var DisplayTypes = /* @__PURE__ */ ((DisplayTypes2) => {
|
|
|
837
837
|
DisplayTypes2["SCATTERPLOT"] = "scatterplot";
|
|
838
838
|
DisplayTypes2["COLUMN_LINE"] = "column_line";
|
|
839
839
|
DisplayTypes2["NETWORK_GRAPH"] = "network_graph";
|
|
840
|
+
DisplayTypes2["SANKEY"] = "sankey";
|
|
840
841
|
return DisplayTypes2;
|
|
841
842
|
})(DisplayTypes || {});
|
|
842
843
|
var QueryErrorTypes = /* @__PURE__ */ ((QueryErrorTypes2) => {
|
|
@@ -1038,7 +1039,8 @@ var CHART_TYPES = [
|
|
|
1038
1039
|
"column_line" /* COLUMN_LINE */,
|
|
1039
1040
|
"histogram" /* HISTOGRAM */,
|
|
1040
1041
|
"scatterplot" /* SCATTERPLOT */,
|
|
1041
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1042
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1043
|
+
"sankey" /* SANKEY */
|
|
1042
1044
|
];
|
|
1043
1045
|
var CHARTS_WITHOUT_LEGENDS = [
|
|
1044
1046
|
"pie" /* PIE */,
|
|
@@ -1046,16 +1048,18 @@ var CHARTS_WITHOUT_LEGENDS = [
|
|
|
1046
1048
|
"bubble" /* BUBBLE */,
|
|
1047
1049
|
"scatterplot" /* SCATTERPLOT */,
|
|
1048
1050
|
"histogram" /* HISTOGRAM */,
|
|
1049
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1051
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1052
|
+
"sankey" /* SANKEY */
|
|
1050
1053
|
];
|
|
1051
1054
|
var CHARTS_WITHOUT_AGGREGATED_DATA = [
|
|
1052
1055
|
"histogram" /* HISTOGRAM */,
|
|
1053
1056
|
"scatterplot" /* SCATTERPLOT */,
|
|
1054
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1057
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1058
|
+
"sankey" /* SANKEY */
|
|
1055
1059
|
];
|
|
1056
1060
|
var DATE_ONLY_CHART_TYPES = ["line" /* LINE */, "stacked_line" /* STACKED_LINE */];
|
|
1057
1061
|
var DOUBLE_AXIS_CHART_TYPES = ["column_line" /* COLUMN_LINE */];
|
|
1058
|
-
var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */];
|
|
1062
|
+
var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */, "sankey" /* SANKEY */];
|
|
1059
1063
|
var DEFAULT_CHART_CONFIG = {
|
|
1060
1064
|
isScaled: false
|
|
1061
1065
|
};
|
|
@@ -2161,18 +2165,33 @@ var getUniqueYearsForColumn = (data, columns, index) => {
|
|
|
2161
2165
|
return uniqueYears;
|
|
2162
2166
|
};
|
|
2163
2167
|
var supportsNetworkGraph = (data, columns) => {
|
|
2164
|
-
|
|
2165
|
-
|
|
2168
|
+
var _a2, _b2;
|
|
2169
|
+
const logUnsupportedReason = (message) => {
|
|
2170
|
+
console.warn(`[supportsNetworkGraph] ${message}`);
|
|
2171
|
+
};
|
|
2172
|
+
if (!data || data.length < 2) {
|
|
2173
|
+
logUnsupportedReason(`Insufficient rows (${(_a2 = data == null ? void 0 : data.length) != null ? _a2 : 0}). Need at least 2 rows.`);
|
|
2174
|
+
return false;
|
|
2175
|
+
}
|
|
2176
|
+
if (!columns || columns.length < 2) {
|
|
2177
|
+
logUnsupportedReason(`Insufficient columns (${(_b2 = columns == null ? void 0 : columns.length) != null ? _b2 : 0}). Need at least 2 visible columns.`);
|
|
2178
|
+
return false;
|
|
2179
|
+
}
|
|
2166
2180
|
const networkColumns = findNetworkColumns(columns);
|
|
2167
|
-
if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1)
|
|
2181
|
+
if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1) {
|
|
2182
|
+
logUnsupportedReason("Unable to determine source/target columns from provided metadata.");
|
|
2168
2183
|
return false;
|
|
2184
|
+
}
|
|
2169
2185
|
const { sourceColumnIndex, targetColumnIndex } = networkColumns;
|
|
2170
2186
|
const sourceValues = data.map((row) => row[sourceColumnIndex]).filter(Boolean);
|
|
2171
2187
|
const targetValues = data.map((row) => row[targetColumnIndex]).filter(Boolean);
|
|
2172
2188
|
const uniqueSources = new Set(sourceValues);
|
|
2173
2189
|
const uniqueTargets = new Set(targetValues);
|
|
2174
2190
|
const totalUniqueEntities = (/* @__PURE__ */ new Set([...uniqueSources, ...uniqueTargets])).size;
|
|
2175
|
-
if (totalUniqueEntities <
|
|
2191
|
+
if (totalUniqueEntities < 2) {
|
|
2192
|
+
logUnsupportedReason(`Found only ${totalUniqueEntities} unique node(s). Need at least 2.`);
|
|
2193
|
+
return false;
|
|
2194
|
+
}
|
|
2176
2195
|
const sourceCounts = {};
|
|
2177
2196
|
const targetCounts = {};
|
|
2178
2197
|
const relationshipPairs = /* @__PURE__ */ new Set();
|
|
@@ -2186,9 +2205,18 @@ var supportsNetworkGraph = (data, columns) => {
|
|
|
2186
2205
|
}
|
|
2187
2206
|
});
|
|
2188
2207
|
const actualConnections = relationshipPairs.size;
|
|
2189
|
-
if (actualConnections === 0)
|
|
2208
|
+
if (actualConnections === 0) {
|
|
2209
|
+
logUnsupportedReason("No valid source\u2192target connections detected in dataset.");
|
|
2210
|
+
return false;
|
|
2211
|
+
}
|
|
2190
2212
|
const MAX_UNIQUE_ENTITIES = 5e4;
|
|
2191
|
-
|
|
2213
|
+
if (totalUniqueEntities > MAX_UNIQUE_ENTITIES) {
|
|
2214
|
+
logUnsupportedReason(
|
|
2215
|
+
`Too many unique nodes (${totalUniqueEntities}). Limit is ${MAX_UNIQUE_ENTITIES} for performance reasons.`
|
|
2216
|
+
);
|
|
2217
|
+
return false;
|
|
2218
|
+
}
|
|
2219
|
+
return true;
|
|
2192
2220
|
};
|
|
2193
2221
|
var findNetworkColumns = (columns) => {
|
|
2194
2222
|
if (!columns || columns.length < 2) {
|
|
@@ -2265,6 +2293,78 @@ var findNetworkColumns = (columns) => {
|
|
|
2265
2293
|
}
|
|
2266
2294
|
return { sourceColumnIndex, targetColumnIndex, weightColumnIndex };
|
|
2267
2295
|
};
|
|
2296
|
+
var supportsSankey = (rows, columns) => {
|
|
2297
|
+
var _a2, _b2;
|
|
2298
|
+
try {
|
|
2299
|
+
const logUnsupportedReason = (message) => {
|
|
2300
|
+
console.warn(`[supportsSankey] ${message}`);
|
|
2301
|
+
};
|
|
2302
|
+
if (!(rows == null ? void 0 : rows.length) || !(columns == null ? void 0 : columns.length)) {
|
|
2303
|
+
logUnsupportedReason(
|
|
2304
|
+
`Missing required data. rows=${(_a2 = rows == null ? void 0 : rows.length) != null ? _a2 : 0}, columns=${(_b2 = columns == null ? void 0 : columns.length) != null ? _b2 : 0}. Need at least 1 row and 3 columns.`
|
|
2305
|
+
);
|
|
2306
|
+
return false;
|
|
2307
|
+
}
|
|
2308
|
+
const { sourceColumnIndex, targetColumnIndex, weightColumnIndex } = findNetworkColumns(columns);
|
|
2309
|
+
if (sourceColumnIndex === -1 || targetColumnIndex === -1 || weightColumnIndex === -1) {
|
|
2310
|
+
logUnsupportedReason("Unable to determine source, target, and weight columns required for Sankey.");
|
|
2311
|
+
return false;
|
|
2312
|
+
}
|
|
2313
|
+
const uniqueNodes = /* @__PURE__ */ new Set();
|
|
2314
|
+
const uniqueLinks = /* @__PURE__ */ new Set();
|
|
2315
|
+
let skippedRows = 0;
|
|
2316
|
+
const normalizeNodeValue = (value) => {
|
|
2317
|
+
if (value === void 0 || value === null) {
|
|
2318
|
+
return void 0;
|
|
2319
|
+
}
|
|
2320
|
+
const sanitized = `${value}`.trim();
|
|
2321
|
+
return sanitized.length ? sanitized : void 0;
|
|
2322
|
+
};
|
|
2323
|
+
const toFinitePositiveNumber = (value) => {
|
|
2324
|
+
if (typeof value === "number") {
|
|
2325
|
+
return Number.isFinite(value) ? value : NaN;
|
|
2326
|
+
}
|
|
2327
|
+
if (typeof value === "string") {
|
|
2328
|
+
const cleaned = value.replace(/[^0-9.-]/g, "");
|
|
2329
|
+
if (!cleaned.length) {
|
|
2330
|
+
return NaN;
|
|
2331
|
+
}
|
|
2332
|
+
const parsed = Number(cleaned);
|
|
2333
|
+
return Number.isFinite(parsed) ? parsed : NaN;
|
|
2334
|
+
}
|
|
2335
|
+
return NaN;
|
|
2336
|
+
};
|
|
2337
|
+
for (const row of rows) {
|
|
2338
|
+
if (!row) {
|
|
2339
|
+
continue;
|
|
2340
|
+
}
|
|
2341
|
+
const source = normalizeNodeValue(row[sourceColumnIndex]);
|
|
2342
|
+
const target = normalizeNodeValue(row[targetColumnIndex]);
|
|
2343
|
+
if (!source || !target || source === target) {
|
|
2344
|
+
skippedRows += 1;
|
|
2345
|
+
continue;
|
|
2346
|
+
}
|
|
2347
|
+
const weight = toFinitePositiveNumber(row[weightColumnIndex]);
|
|
2348
|
+
if (!Number.isFinite(weight) || weight <= 0) {
|
|
2349
|
+
skippedRows += 1;
|
|
2350
|
+
continue;
|
|
2351
|
+
}
|
|
2352
|
+
uniqueNodes.add(source);
|
|
2353
|
+
uniqueNodes.add(target);
|
|
2354
|
+
uniqueLinks.add(`${source}__${target}`);
|
|
2355
|
+
}
|
|
2356
|
+
if (!uniqueLinks.size || uniqueNodes.size < 2) {
|
|
2357
|
+
logUnsupportedReason(
|
|
2358
|
+
`Insufficient valid flows. uniqueNodes=${uniqueNodes.size}, uniqueLinks=${uniqueLinks.size}, skippedRows=${skippedRows}.`
|
|
2359
|
+
);
|
|
2360
|
+
return false;
|
|
2361
|
+
}
|
|
2362
|
+
return true;
|
|
2363
|
+
} catch (error) {
|
|
2364
|
+
console.error("[supportsSankey] Unexpected error determining support", error);
|
|
2365
|
+
return false;
|
|
2366
|
+
}
|
|
2367
|
+
};
|
|
2268
2368
|
var getSupportedDisplayTypes = ({
|
|
2269
2369
|
response,
|
|
2270
2370
|
columns,
|
|
@@ -2353,6 +2453,9 @@ var getSupportedDisplayTypes = ({
|
|
|
2353
2453
|
if (supportsNetworkGraph(rows, visibleColumns)) {
|
|
2354
2454
|
supportedDisplayTypes.push("network_graph");
|
|
2355
2455
|
}
|
|
2456
|
+
if (supportsSankey(rows, visibleColumns)) {
|
|
2457
|
+
supportedDisplayTypes.push("sankey");
|
|
2458
|
+
}
|
|
2356
2459
|
return supportedDisplayTypes;
|
|
2357
2460
|
} catch (error) {
|
|
2358
2461
|
console.error(error);
|
|
@@ -4860,13 +4963,20 @@ var formatElement = ({
|
|
|
4860
4963
|
const validatedQuantityDecimals = !isNaN(quantityDecimals) ? quantityDecimals : 2;
|
|
4861
4964
|
const elementNumber = parseFloat(`${element}`);
|
|
4862
4965
|
if (!isNaN(elementNumber)) {
|
|
4863
|
-
|
|
4966
|
+
let numDecimals;
|
|
4967
|
+
if ((column == null ? void 0 : column.quantity_type) === "integer") {
|
|
4968
|
+
numDecimals = 0;
|
|
4969
|
+
} else if ((column == null ? void 0 : column.quantity_type) === "float") {
|
|
4970
|
+
numDecimals = validatedQuantityDecimals;
|
|
4971
|
+
} else {
|
|
4972
|
+
numDecimals = elementNumber % 1 !== 0 ? validatedQuantityDecimals : 0;
|
|
4973
|
+
}
|
|
4864
4974
|
formattedElement = new Intl.NumberFormat(languageCode, {
|
|
4865
4975
|
minimumFractionDigits: numDecimals,
|
|
4866
4976
|
maximumFractionDigits: numDecimals
|
|
4867
4977
|
}).format(elementNumber);
|
|
4868
|
-
if (formattedElement
|
|
4869
|
-
formattedElement = formattedElement
|
|
4978
|
+
if ((column == null ? void 0 : column.quantity_type) !== "float" && `${formattedElement}`.endsWith(".00")) {
|
|
4979
|
+
formattedElement = `${formattedElement}`.replace(".00", "");
|
|
4870
4980
|
}
|
|
4871
4981
|
}
|
|
4872
4982
|
break;
|
|
@@ -9853,16 +9963,27 @@ var transformQueryResponse = (response, originalQueryID, isDrilldown2 = false, n
|
|
|
9853
9963
|
}
|
|
9854
9964
|
return transformedResponse;
|
|
9855
9965
|
};
|
|
9966
|
+
var detectQuantityType = (rows, colIndex) => {
|
|
9967
|
+
if (!(rows == null ? void 0 : rows.length)) return "float";
|
|
9968
|
+
for (const row of rows) {
|
|
9969
|
+
const val = row == null ? void 0 : row[colIndex];
|
|
9970
|
+
if (val === null || val === void 0) continue;
|
|
9971
|
+
const num = typeof val === "number" ? val : parseFloat(val);
|
|
9972
|
+
if (!isNaN(num) && num % 1 !== 0) return "float";
|
|
9973
|
+
}
|
|
9974
|
+
return "integer";
|
|
9975
|
+
};
|
|
9856
9976
|
var transformQueryResponseColumns = (response, addedColumns) => {
|
|
9857
|
-
var _a2, _b2;
|
|
9977
|
+
var _a2, _b2, _c, _d;
|
|
9858
9978
|
const columns = (_b2 = (_a2 = response == null ? void 0 : response.data) == null ? void 0 : _a2.data) == null ? void 0 : _b2.columns;
|
|
9979
|
+
const rows = (_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.rows;
|
|
9859
9980
|
if (!(columns == null ? void 0 : columns.length)) {
|
|
9860
9981
|
return columns;
|
|
9861
9982
|
}
|
|
9862
9983
|
const isSingleValue = isSingleValueResponse(response);
|
|
9863
9984
|
const transformedColumns = columns.map((col, i) => {
|
|
9864
|
-
var _a3
|
|
9865
|
-
const dataSample = (
|
|
9985
|
+
var _a3;
|
|
9986
|
+
const dataSample = (_a3 = rows == null ? void 0 : rows.find((row) => row[i])) == null ? void 0 : _a3[i];
|
|
9866
9987
|
const drilldownGroupby = getDrilldownGroupby(response, col);
|
|
9867
9988
|
let additional = false;
|
|
9868
9989
|
let is_timestamp = false;
|
|
@@ -9879,6 +10000,7 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
9879
10000
|
if (isSingleValue) {
|
|
9880
10001
|
is_visible = true;
|
|
9881
10002
|
}
|
|
10003
|
+
const quantity_type = col.type === "QUANTITY" /* QUANTITY */ ? detectQuantityType(rows, i) : void 0;
|
|
9882
10004
|
return new Column({
|
|
9883
10005
|
...col,
|
|
9884
10006
|
field: `${i}`,
|
|
@@ -9886,7 +10008,8 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
9886
10008
|
drilldownGroupby,
|
|
9887
10009
|
additional,
|
|
9888
10010
|
is_visible,
|
|
9889
|
-
is_timestamp
|
|
10011
|
+
is_timestamp,
|
|
10012
|
+
quantity_type
|
|
9890
10013
|
});
|
|
9891
10014
|
});
|
|
9892
10015
|
return transformedColumns;
|
|
@@ -10334,12 +10457,22 @@ var exportCSV = ({
|
|
|
10334
10457
|
domain,
|
|
10335
10458
|
apiKey,
|
|
10336
10459
|
token,
|
|
10337
|
-
|
|
10460
|
+
filters,
|
|
10461
|
+
tableFilters,
|
|
10462
|
+
csvProgressCallback,
|
|
10463
|
+
source = DEFAULT_SOURCE,
|
|
10464
|
+
scope = "null"
|
|
10338
10465
|
} = {}) => {
|
|
10339
10466
|
if (!token || !domain || !apiKey) {
|
|
10340
10467
|
return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
|
|
10341
10468
|
}
|
|
10342
10469
|
const url = `${domain}/autoql/api/v1/query/${queryId}/export?key=${apiKey}`;
|
|
10470
|
+
const data = {
|
|
10471
|
+
session_filter_locks: filters,
|
|
10472
|
+
filters: tableFilters,
|
|
10473
|
+
source,
|
|
10474
|
+
scope
|
|
10475
|
+
};
|
|
10343
10476
|
const config = {
|
|
10344
10477
|
headers: {
|
|
10345
10478
|
Authorization: `Bearer ${token}`
|
|
@@ -10352,7 +10485,7 @@ var exportCSV = ({
|
|
|
10352
10485
|
}
|
|
10353
10486
|
}
|
|
10354
10487
|
};
|
|
10355
|
-
return axios.post(url,
|
|
10488
|
+
return axios.post(url, data, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
|
|
10356
10489
|
};
|
|
10357
10490
|
var runDrilldown = ({
|
|
10358
10491
|
queryID,
|
|
@@ -13182,6 +13315,7 @@ export {
|
|
|
13182
13315
|
supportsNetworkGraph,
|
|
13183
13316
|
supportsPieChart,
|
|
13184
13317
|
supportsRegularPivotTable,
|
|
13318
|
+
supportsSankey,
|
|
13185
13319
|
svgPathD,
|
|
13186
13320
|
svgToPng,
|
|
13187
13321
|
titlelizeString,
|