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.js
CHANGED
|
@@ -1179,6 +1179,7 @@ __export(index_exports, {
|
|
|
1179
1179
|
supportsNetworkGraph: () => supportsNetworkGraph,
|
|
1180
1180
|
supportsPieChart: () => supportsPieChart,
|
|
1181
1181
|
supportsRegularPivotTable: () => supportsRegularPivotTable,
|
|
1182
|
+
supportsSankey: () => supportsSankey,
|
|
1182
1183
|
svgPathD: () => svgPathD,
|
|
1183
1184
|
svgToPng: () => svgToPng,
|
|
1184
1185
|
titlelizeString: () => titlelizeString,
|
|
@@ -1360,6 +1361,7 @@ var DisplayTypes = /* @__PURE__ */ ((DisplayTypes2) => {
|
|
|
1360
1361
|
DisplayTypes2["SCATTERPLOT"] = "scatterplot";
|
|
1361
1362
|
DisplayTypes2["COLUMN_LINE"] = "column_line";
|
|
1362
1363
|
DisplayTypes2["NETWORK_GRAPH"] = "network_graph";
|
|
1364
|
+
DisplayTypes2["SANKEY"] = "sankey";
|
|
1363
1365
|
return DisplayTypes2;
|
|
1364
1366
|
})(DisplayTypes || {});
|
|
1365
1367
|
var QueryErrorTypes = /* @__PURE__ */ ((QueryErrorTypes2) => {
|
|
@@ -1561,7 +1563,8 @@ var CHART_TYPES = [
|
|
|
1561
1563
|
"column_line" /* COLUMN_LINE */,
|
|
1562
1564
|
"histogram" /* HISTOGRAM */,
|
|
1563
1565
|
"scatterplot" /* SCATTERPLOT */,
|
|
1564
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1566
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1567
|
+
"sankey" /* SANKEY */
|
|
1565
1568
|
];
|
|
1566
1569
|
var CHARTS_WITHOUT_LEGENDS = [
|
|
1567
1570
|
"pie" /* PIE */,
|
|
@@ -1569,16 +1572,18 @@ var CHARTS_WITHOUT_LEGENDS = [
|
|
|
1569
1572
|
"bubble" /* BUBBLE */,
|
|
1570
1573
|
"scatterplot" /* SCATTERPLOT */,
|
|
1571
1574
|
"histogram" /* HISTOGRAM */,
|
|
1572
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1575
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1576
|
+
"sankey" /* SANKEY */
|
|
1573
1577
|
];
|
|
1574
1578
|
var CHARTS_WITHOUT_AGGREGATED_DATA = [
|
|
1575
1579
|
"histogram" /* HISTOGRAM */,
|
|
1576
1580
|
"scatterplot" /* SCATTERPLOT */,
|
|
1577
|
-
"network_graph" /* NETWORK_GRAPH
|
|
1581
|
+
"network_graph" /* NETWORK_GRAPH */,
|
|
1582
|
+
"sankey" /* SANKEY */
|
|
1578
1583
|
];
|
|
1579
1584
|
var DATE_ONLY_CHART_TYPES = ["line" /* LINE */, "stacked_line" /* STACKED_LINE */];
|
|
1580
1585
|
var DOUBLE_AXIS_CHART_TYPES = ["column_line" /* COLUMN_LINE */];
|
|
1581
|
-
var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */];
|
|
1586
|
+
var CHARTS_WITHOUT_AXES = ["pie" /* PIE */, "network_graph" /* NETWORK_GRAPH */, "sankey" /* SANKEY */];
|
|
1582
1587
|
var DEFAULT_CHART_CONFIG = {
|
|
1583
1588
|
isScaled: false
|
|
1584
1589
|
};
|
|
@@ -2684,18 +2689,33 @@ var getUniqueYearsForColumn = (data, columns, index) => {
|
|
|
2684
2689
|
return uniqueYears;
|
|
2685
2690
|
};
|
|
2686
2691
|
var supportsNetworkGraph = (data, columns) => {
|
|
2687
|
-
|
|
2688
|
-
|
|
2692
|
+
var _a2, _b2;
|
|
2693
|
+
const logUnsupportedReason = (message) => {
|
|
2694
|
+
console.warn(`[supportsNetworkGraph] ${message}`);
|
|
2695
|
+
};
|
|
2696
|
+
if (!data || data.length < 2) {
|
|
2697
|
+
logUnsupportedReason(`Insufficient rows (${(_a2 = data == null ? void 0 : data.length) != null ? _a2 : 0}). Need at least 2 rows.`);
|
|
2698
|
+
return false;
|
|
2699
|
+
}
|
|
2700
|
+
if (!columns || columns.length < 2) {
|
|
2701
|
+
logUnsupportedReason(`Insufficient columns (${(_b2 = columns == null ? void 0 : columns.length) != null ? _b2 : 0}). Need at least 2 visible columns.`);
|
|
2702
|
+
return false;
|
|
2703
|
+
}
|
|
2689
2704
|
const networkColumns = findNetworkColumns(columns);
|
|
2690
|
-
if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1)
|
|
2705
|
+
if (!networkColumns || networkColumns.sourceColumnIndex === -1 || networkColumns.targetColumnIndex === -1) {
|
|
2706
|
+
logUnsupportedReason("Unable to determine source/target columns from provided metadata.");
|
|
2691
2707
|
return false;
|
|
2708
|
+
}
|
|
2692
2709
|
const { sourceColumnIndex, targetColumnIndex } = networkColumns;
|
|
2693
2710
|
const sourceValues = data.map((row) => row[sourceColumnIndex]).filter(Boolean);
|
|
2694
2711
|
const targetValues = data.map((row) => row[targetColumnIndex]).filter(Boolean);
|
|
2695
2712
|
const uniqueSources = new Set(sourceValues);
|
|
2696
2713
|
const uniqueTargets = new Set(targetValues);
|
|
2697
2714
|
const totalUniqueEntities = (/* @__PURE__ */ new Set([...uniqueSources, ...uniqueTargets])).size;
|
|
2698
|
-
if (totalUniqueEntities <
|
|
2715
|
+
if (totalUniqueEntities < 2) {
|
|
2716
|
+
logUnsupportedReason(`Found only ${totalUniqueEntities} unique node(s). Need at least 2.`);
|
|
2717
|
+
return false;
|
|
2718
|
+
}
|
|
2699
2719
|
const sourceCounts = {};
|
|
2700
2720
|
const targetCounts = {};
|
|
2701
2721
|
const relationshipPairs = /* @__PURE__ */ new Set();
|
|
@@ -2709,9 +2729,18 @@ var supportsNetworkGraph = (data, columns) => {
|
|
|
2709
2729
|
}
|
|
2710
2730
|
});
|
|
2711
2731
|
const actualConnections = relationshipPairs.size;
|
|
2712
|
-
if (actualConnections === 0)
|
|
2732
|
+
if (actualConnections === 0) {
|
|
2733
|
+
logUnsupportedReason("No valid source\u2192target connections detected in dataset.");
|
|
2734
|
+
return false;
|
|
2735
|
+
}
|
|
2713
2736
|
const MAX_UNIQUE_ENTITIES = 5e4;
|
|
2714
|
-
|
|
2737
|
+
if (totalUniqueEntities > MAX_UNIQUE_ENTITIES) {
|
|
2738
|
+
logUnsupportedReason(
|
|
2739
|
+
`Too many unique nodes (${totalUniqueEntities}). Limit is ${MAX_UNIQUE_ENTITIES} for performance reasons.`
|
|
2740
|
+
);
|
|
2741
|
+
return false;
|
|
2742
|
+
}
|
|
2743
|
+
return true;
|
|
2715
2744
|
};
|
|
2716
2745
|
var findNetworkColumns = (columns) => {
|
|
2717
2746
|
if (!columns || columns.length < 2) {
|
|
@@ -2788,6 +2817,78 @@ var findNetworkColumns = (columns) => {
|
|
|
2788
2817
|
}
|
|
2789
2818
|
return { sourceColumnIndex, targetColumnIndex, weightColumnIndex };
|
|
2790
2819
|
};
|
|
2820
|
+
var supportsSankey = (rows, columns) => {
|
|
2821
|
+
var _a2, _b2;
|
|
2822
|
+
try {
|
|
2823
|
+
const logUnsupportedReason = (message) => {
|
|
2824
|
+
console.warn(`[supportsSankey] ${message}`);
|
|
2825
|
+
};
|
|
2826
|
+
if (!(rows == null ? void 0 : rows.length) || !(columns == null ? void 0 : columns.length)) {
|
|
2827
|
+
logUnsupportedReason(
|
|
2828
|
+
`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.`
|
|
2829
|
+
);
|
|
2830
|
+
return false;
|
|
2831
|
+
}
|
|
2832
|
+
const { sourceColumnIndex, targetColumnIndex, weightColumnIndex } = findNetworkColumns(columns);
|
|
2833
|
+
if (sourceColumnIndex === -1 || targetColumnIndex === -1 || weightColumnIndex === -1) {
|
|
2834
|
+
logUnsupportedReason("Unable to determine source, target, and weight columns required for Sankey.");
|
|
2835
|
+
return false;
|
|
2836
|
+
}
|
|
2837
|
+
const uniqueNodes = /* @__PURE__ */ new Set();
|
|
2838
|
+
const uniqueLinks = /* @__PURE__ */ new Set();
|
|
2839
|
+
let skippedRows = 0;
|
|
2840
|
+
const normalizeNodeValue = (value) => {
|
|
2841
|
+
if (value === void 0 || value === null) {
|
|
2842
|
+
return void 0;
|
|
2843
|
+
}
|
|
2844
|
+
const sanitized = `${value}`.trim();
|
|
2845
|
+
return sanitized.length ? sanitized : void 0;
|
|
2846
|
+
};
|
|
2847
|
+
const toFinitePositiveNumber = (value) => {
|
|
2848
|
+
if (typeof value === "number") {
|
|
2849
|
+
return Number.isFinite(value) ? value : NaN;
|
|
2850
|
+
}
|
|
2851
|
+
if (typeof value === "string") {
|
|
2852
|
+
const cleaned = value.replace(/[^0-9.-]/g, "");
|
|
2853
|
+
if (!cleaned.length) {
|
|
2854
|
+
return NaN;
|
|
2855
|
+
}
|
|
2856
|
+
const parsed = Number(cleaned);
|
|
2857
|
+
return Number.isFinite(parsed) ? parsed : NaN;
|
|
2858
|
+
}
|
|
2859
|
+
return NaN;
|
|
2860
|
+
};
|
|
2861
|
+
for (const row of rows) {
|
|
2862
|
+
if (!row) {
|
|
2863
|
+
continue;
|
|
2864
|
+
}
|
|
2865
|
+
const source = normalizeNodeValue(row[sourceColumnIndex]);
|
|
2866
|
+
const target = normalizeNodeValue(row[targetColumnIndex]);
|
|
2867
|
+
if (!source || !target || source === target) {
|
|
2868
|
+
skippedRows += 1;
|
|
2869
|
+
continue;
|
|
2870
|
+
}
|
|
2871
|
+
const weight = toFinitePositiveNumber(row[weightColumnIndex]);
|
|
2872
|
+
if (!Number.isFinite(weight) || weight <= 0) {
|
|
2873
|
+
skippedRows += 1;
|
|
2874
|
+
continue;
|
|
2875
|
+
}
|
|
2876
|
+
uniqueNodes.add(source);
|
|
2877
|
+
uniqueNodes.add(target);
|
|
2878
|
+
uniqueLinks.add(`${source}__${target}`);
|
|
2879
|
+
}
|
|
2880
|
+
if (!uniqueLinks.size || uniqueNodes.size < 2) {
|
|
2881
|
+
logUnsupportedReason(
|
|
2882
|
+
`Insufficient valid flows. uniqueNodes=${uniqueNodes.size}, uniqueLinks=${uniqueLinks.size}, skippedRows=${skippedRows}.`
|
|
2883
|
+
);
|
|
2884
|
+
return false;
|
|
2885
|
+
}
|
|
2886
|
+
return true;
|
|
2887
|
+
} catch (error) {
|
|
2888
|
+
console.error("[supportsSankey] Unexpected error determining support", error);
|
|
2889
|
+
return false;
|
|
2890
|
+
}
|
|
2891
|
+
};
|
|
2791
2892
|
var getSupportedDisplayTypes = ({
|
|
2792
2893
|
response,
|
|
2793
2894
|
columns,
|
|
@@ -2876,6 +2977,9 @@ var getSupportedDisplayTypes = ({
|
|
|
2876
2977
|
if (supportsNetworkGraph(rows, visibleColumns)) {
|
|
2877
2978
|
supportedDisplayTypes.push("network_graph");
|
|
2878
2979
|
}
|
|
2980
|
+
if (supportsSankey(rows, visibleColumns)) {
|
|
2981
|
+
supportedDisplayTypes.push("sankey");
|
|
2982
|
+
}
|
|
2879
2983
|
return supportedDisplayTypes;
|
|
2880
2984
|
} catch (error) {
|
|
2881
2985
|
console.error(error);
|
|
@@ -5383,13 +5487,20 @@ var formatElement = ({
|
|
|
5383
5487
|
const validatedQuantityDecimals = !isNaN(quantityDecimals) ? quantityDecimals : 2;
|
|
5384
5488
|
const elementNumber = parseFloat(`${element}`);
|
|
5385
5489
|
if (!isNaN(elementNumber)) {
|
|
5386
|
-
|
|
5490
|
+
let numDecimals;
|
|
5491
|
+
if ((column == null ? void 0 : column.quantity_type) === "integer") {
|
|
5492
|
+
numDecimals = 0;
|
|
5493
|
+
} else if ((column == null ? void 0 : column.quantity_type) === "float") {
|
|
5494
|
+
numDecimals = validatedQuantityDecimals;
|
|
5495
|
+
} else {
|
|
5496
|
+
numDecimals = elementNumber % 1 !== 0 ? validatedQuantityDecimals : 0;
|
|
5497
|
+
}
|
|
5387
5498
|
formattedElement = new Intl.NumberFormat(languageCode, {
|
|
5388
5499
|
minimumFractionDigits: numDecimals,
|
|
5389
5500
|
maximumFractionDigits: numDecimals
|
|
5390
5501
|
}).format(elementNumber);
|
|
5391
|
-
if (formattedElement
|
|
5392
|
-
formattedElement = formattedElement
|
|
5502
|
+
if ((column == null ? void 0 : column.quantity_type) !== "float" && `${formattedElement}`.endsWith(".00")) {
|
|
5503
|
+
formattedElement = `${formattedElement}`.replace(".00", "");
|
|
5393
5504
|
}
|
|
5394
5505
|
}
|
|
5395
5506
|
break;
|
|
@@ -10376,16 +10487,27 @@ var transformQueryResponse = (response, originalQueryID, isDrilldown2 = false, n
|
|
|
10376
10487
|
}
|
|
10377
10488
|
return transformedResponse;
|
|
10378
10489
|
};
|
|
10490
|
+
var detectQuantityType = (rows, colIndex) => {
|
|
10491
|
+
if (!(rows == null ? void 0 : rows.length)) return "float";
|
|
10492
|
+
for (const row of rows) {
|
|
10493
|
+
const val = row == null ? void 0 : row[colIndex];
|
|
10494
|
+
if (val === null || val === void 0) continue;
|
|
10495
|
+
const num = typeof val === "number" ? val : parseFloat(val);
|
|
10496
|
+
if (!isNaN(num) && num % 1 !== 0) return "float";
|
|
10497
|
+
}
|
|
10498
|
+
return "integer";
|
|
10499
|
+
};
|
|
10379
10500
|
var transformQueryResponseColumns = (response, addedColumns) => {
|
|
10380
|
-
var _a2, _b2;
|
|
10501
|
+
var _a2, _b2, _c, _d;
|
|
10381
10502
|
const columns = (_b2 = (_a2 = response == null ? void 0 : response.data) == null ? void 0 : _a2.data) == null ? void 0 : _b2.columns;
|
|
10503
|
+
const rows = (_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.rows;
|
|
10382
10504
|
if (!(columns == null ? void 0 : columns.length)) {
|
|
10383
10505
|
return columns;
|
|
10384
10506
|
}
|
|
10385
10507
|
const isSingleValue = isSingleValueResponse(response);
|
|
10386
10508
|
const transformedColumns = columns.map((col, i) => {
|
|
10387
|
-
var _a3
|
|
10388
|
-
const dataSample = (
|
|
10509
|
+
var _a3;
|
|
10510
|
+
const dataSample = (_a3 = rows == null ? void 0 : rows.find((row) => row[i])) == null ? void 0 : _a3[i];
|
|
10389
10511
|
const drilldownGroupby = getDrilldownGroupby(response, col);
|
|
10390
10512
|
let additional = false;
|
|
10391
10513
|
let is_timestamp = false;
|
|
@@ -10402,6 +10524,7 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
10402
10524
|
if (isSingleValue) {
|
|
10403
10525
|
is_visible = true;
|
|
10404
10526
|
}
|
|
10527
|
+
const quantity_type = col.type === "QUANTITY" /* QUANTITY */ ? detectQuantityType(rows, i) : void 0;
|
|
10405
10528
|
return new Column({
|
|
10406
10529
|
...col,
|
|
10407
10530
|
field: `${i}`,
|
|
@@ -10409,7 +10532,8 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
10409
10532
|
drilldownGroupby,
|
|
10410
10533
|
additional,
|
|
10411
10534
|
is_visible,
|
|
10412
|
-
is_timestamp
|
|
10535
|
+
is_timestamp,
|
|
10536
|
+
quantity_type
|
|
10413
10537
|
});
|
|
10414
10538
|
});
|
|
10415
10539
|
return transformedColumns;
|
|
@@ -10857,12 +10981,22 @@ var exportCSV = ({
|
|
|
10857
10981
|
domain,
|
|
10858
10982
|
apiKey,
|
|
10859
10983
|
token,
|
|
10860
|
-
|
|
10984
|
+
filters,
|
|
10985
|
+
tableFilters,
|
|
10986
|
+
csvProgressCallback,
|
|
10987
|
+
source = DEFAULT_SOURCE,
|
|
10988
|
+
scope = "null"
|
|
10861
10989
|
} = {}) => {
|
|
10862
10990
|
if (!token || !domain || !apiKey) {
|
|
10863
10991
|
return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
|
|
10864
10992
|
}
|
|
10865
10993
|
const url = `${domain}/autoql/api/v1/query/${queryId}/export?key=${apiKey}`;
|
|
10994
|
+
const data = {
|
|
10995
|
+
session_filter_locks: filters,
|
|
10996
|
+
filters: tableFilters,
|
|
10997
|
+
source,
|
|
10998
|
+
scope
|
|
10999
|
+
};
|
|
10866
11000
|
const config = {
|
|
10867
11001
|
headers: {
|
|
10868
11002
|
Authorization: `Bearer ${token}`
|
|
@@ -10875,7 +11009,7 @@ var exportCSV = ({
|
|
|
10875
11009
|
}
|
|
10876
11010
|
}
|
|
10877
11011
|
};
|
|
10878
|
-
return import_axios.default.post(url,
|
|
11012
|
+
return import_axios.default.post(url, data, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
|
|
10879
11013
|
};
|
|
10880
11014
|
var runDrilldown = ({
|
|
10881
11015
|
queryID,
|
|
@@ -13706,6 +13840,7 @@ function color() {
|
|
|
13706
13840
|
supportsNetworkGraph,
|
|
13707
13841
|
supportsPieChart,
|
|
13708
13842
|
supportsRegularPivotTable,
|
|
13843
|
+
supportsSankey,
|
|
13709
13844
|
svgPathD,
|
|
13710
13845
|
svgToPng,
|
|
13711
13846
|
titlelizeString,
|