autoql-fe-utils 1.11.19 → 1.11.22
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 +15 -4
- package/dist/index.d.ts +15 -4
- package/dist/index.global.js +82 -24
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +84 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +83 -24
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -2675,6 +2675,7 @@ var FilterOperatorEnum = /* @__PURE__ */ ((FilterOperatorEnum2) => {
|
|
|
2675
2675
|
FilterOperatorEnum2["REGEX"] = "regex";
|
|
2676
2676
|
FilterOperatorEnum2["STARTS_WITH"] = "starts_with";
|
|
2677
2677
|
FilterOperatorEnum2["ENDS_WITH"] = "ends_with";
|
|
2678
|
+
FilterOperatorEnum2["IN"] = "in";
|
|
2678
2679
|
return FilterOperatorEnum2;
|
|
2679
2680
|
})(FilterOperatorEnum || {});
|
|
2680
2681
|
var FilterTypeEnum = {
|
|
@@ -2744,6 +2745,15 @@ var betweenMatcher = (cell, cond) => {
|
|
|
2744
2745
|
getLogger().warn("betweenMatcher: unsupported types for between fallback", { cell, low, high, type: cond.type });
|
|
2745
2746
|
return false;
|
|
2746
2747
|
};
|
|
2748
|
+
var inMatcher = (cell, cond) => {
|
|
2749
|
+
var _a2;
|
|
2750
|
+
if (cell == null) return false;
|
|
2751
|
+
const raw = String((_a2 = cond.value) != null ? _a2 : "");
|
|
2752
|
+
if (raw.length === 0) return true;
|
|
2753
|
+
const items = raw.split(",").map((s) => s.trim().toLowerCase());
|
|
2754
|
+
const set = new Set(items);
|
|
2755
|
+
return set.has(String(cell).toLowerCase());
|
|
2756
|
+
};
|
|
2747
2757
|
var FILTER_MATCHERS = {
|
|
2748
2758
|
["like" /* LIKE */]: likeMatcher,
|
|
2749
2759
|
["not_like" /* NOT_LIKE */]: notLikeMatcher,
|
|
@@ -2756,7 +2766,8 @@ var FILTER_MATCHERS = {
|
|
|
2756
2766
|
["regex" /* REGEX */]: regexMatcher,
|
|
2757
2767
|
["between" /* BETWEEN */]: betweenMatcher,
|
|
2758
2768
|
["starts_with" /* STARTS_WITH */]: (cell, cond) => String(cell).startsWith(String(cond.value)),
|
|
2759
|
-
["ends_with" /* ENDS_WITH */]: (cell, cond) => String(cell).endsWith(String(cond.value))
|
|
2769
|
+
["ends_with" /* ENDS_WITH */]: (cell, cond) => String(cell).endsWith(String(cond.value)),
|
|
2770
|
+
["in" /* IN */]: inMatcher
|
|
2760
2771
|
};
|
|
2761
2772
|
function isValidOperator(op) {
|
|
2762
2773
|
return Object.values(FilterOperatorEnum).includes(op);
|
|
@@ -2809,7 +2820,7 @@ function parseFilter(raw, type, defaultOperator = "like" /* LIKE */) {
|
|
|
2809
2820
|
if (typeof raw !== "string") return { operator: defaultOperator, value: raw, type };
|
|
2810
2821
|
const trimmed = raw.trim();
|
|
2811
2822
|
if (trimmed.length === 0) return { operator: defaultOperator, value: "", type };
|
|
2812
|
-
const opToken = `${"between" /* BETWEEN */}|[<>!=]=?|not_like`;
|
|
2823
|
+
const opToken = `${"between" /* BETWEEN */}|${"in" /* IN */}|[<>!=]=?|not_like`;
|
|
2813
2824
|
const opPattern = `^(${opToken})\\s*(.*)$`;
|
|
2814
2825
|
const opRe = compileSafeRegex(opPattern, "i");
|
|
2815
2826
|
const opMatch = opRe ? opRe.exec(trimmed) : null;
|
|
@@ -2817,7 +2828,11 @@ function parseFilter(raw, type, defaultOperator = "like" /* LIKE */) {
|
|
|
2817
2828
|
let op = String((_a2 = opMatch[1]) != null ? _a2 : "").toLowerCase();
|
|
2818
2829
|
const rest = (_b2 = opMatch[2]) != null ? _b2 : "";
|
|
2819
2830
|
if (op === "!") op = "not_like" /* NOT_LIKE */;
|
|
2831
|
+
if (op === "==") op = "=" /* EQ */;
|
|
2820
2832
|
if (type === FilterTypeEnum.STRING && op === "!=") op = "not_like" /* NOT_LIKE */;
|
|
2833
|
+
if (op === "in" /* IN */) {
|
|
2834
|
+
return { operator: "in" /* IN */, value: rest, type };
|
|
2835
|
+
}
|
|
2821
2836
|
if (op === "between" /* BETWEEN */) {
|
|
2822
2837
|
let parts = (_c = rest.split(/\s+to\s+|,/)) == null ? void 0 : _c.map((s) => s.trim()).filter((s) => s.length);
|
|
2823
2838
|
if ((!parts || parts.length < 2) && type === FilterTypeEnum.NUMBER) {
|
|
@@ -3377,10 +3392,7 @@ var createFilterFunction = ({
|
|
|
3377
3392
|
return false;
|
|
3378
3393
|
}
|
|
3379
3394
|
const raw = String(headerValue != null ? headerValue : "").trim();
|
|
3380
|
-
if (!raw)
|
|
3381
|
-
getLogger().warn("date filter: header value empty", { column });
|
|
3382
|
-
return false;
|
|
3383
|
-
}
|
|
3395
|
+
if (!raw) return true;
|
|
3384
3396
|
const parts = raw.split(" to ").map((s) => String(s).trim()).filter((s) => s.length > 0);
|
|
3385
3397
|
if (!parts.length) {
|
|
3386
3398
|
getLogger().warn("date filter: could not parse date range", { raw, column });
|
|
@@ -3407,24 +3419,23 @@ var createFilterFunction = ({
|
|
|
3407
3419
|
};
|
|
3408
3420
|
} else if ((column == null ? void 0 : column.type) === "DATE_STRING" /* DATE_STRING */) {
|
|
3409
3421
|
return (headerValue, rowValue) => {
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
|
|
3422
|
+
const raw = String(headerValue != null ? headerValue : "").trim();
|
|
3423
|
+
if (!raw) return true;
|
|
3424
|
+
if (rowValue === void 0 || rowValue === null) return false;
|
|
3413
3425
|
const formattedElement = formatElement({
|
|
3414
3426
|
element: rowValue,
|
|
3415
3427
|
column,
|
|
3416
3428
|
config: dataFormatting
|
|
3417
3429
|
});
|
|
3418
|
-
const raw = String(headerValue != null ? headerValue : "").trim();
|
|
3419
3430
|
const lowerElement = String(formattedElement != null ? formattedElement : "").toLowerCase();
|
|
3420
3431
|
return matchesStringFilter(raw, lowerElement);
|
|
3421
3432
|
};
|
|
3422
3433
|
} else if (isColumnNumberType(column)) {
|
|
3423
3434
|
return (headerValue, rowValue) => {
|
|
3424
3435
|
try {
|
|
3425
|
-
if (rowValue === void 0 || rowValue === null) return false;
|
|
3426
3436
|
const raw = String(headerValue != null ? headerValue : "").trim();
|
|
3427
|
-
if (raw.length === 0) return
|
|
3437
|
+
if (raw.length === 0) return true;
|
|
3438
|
+
if (rowValue === void 0 || rowValue === null) return false;
|
|
3428
3439
|
const cond = parseFilter(raw, "number", "=");
|
|
3429
3440
|
return matchCell(rowValue, cond);
|
|
3430
3441
|
} catch (error) {
|
|
@@ -3434,10 +3445,9 @@ var createFilterFunction = ({
|
|
|
3434
3445
|
};
|
|
3435
3446
|
} else {
|
|
3436
3447
|
return (headerValue, rowValue) => {
|
|
3437
|
-
if (rowValue === void 0 || rowValue === null) {
|
|
3438
|
-
return false;
|
|
3439
|
-
}
|
|
3440
3448
|
const raw = String(headerValue != null ? headerValue : "").trim();
|
|
3449
|
+
if (!raw) return true;
|
|
3450
|
+
if (rowValue === void 0 || rowValue === null) return false;
|
|
3441
3451
|
const lowerValue = String(rowValue != null ? rowValue : "").toLowerCase();
|
|
3442
3452
|
const cond = parseFilter(raw, "string", "like" /* LIKE */);
|
|
3443
3453
|
return matchCell(lowerValue, { ...cond, type: "string", value: String(cond.value).toLowerCase() });
|
|
@@ -4963,13 +4973,20 @@ var formatElement = ({
|
|
|
4963
4973
|
const validatedQuantityDecimals = !isNaN(quantityDecimals) ? quantityDecimals : 2;
|
|
4964
4974
|
const elementNumber = parseFloat(`${element}`);
|
|
4965
4975
|
if (!isNaN(elementNumber)) {
|
|
4966
|
-
|
|
4976
|
+
let numDecimals;
|
|
4977
|
+
if ((column == null ? void 0 : column.quantity_type) === "integer") {
|
|
4978
|
+
numDecimals = 0;
|
|
4979
|
+
} else if ((column == null ? void 0 : column.quantity_type) === "float") {
|
|
4980
|
+
numDecimals = validatedQuantityDecimals;
|
|
4981
|
+
} else {
|
|
4982
|
+
numDecimals = elementNumber % 1 !== 0 ? validatedQuantityDecimals : 0;
|
|
4983
|
+
}
|
|
4967
4984
|
formattedElement = new Intl.NumberFormat(languageCode, {
|
|
4968
4985
|
minimumFractionDigits: numDecimals,
|
|
4969
4986
|
maximumFractionDigits: numDecimals
|
|
4970
4987
|
}).format(elementNumber);
|
|
4971
|
-
if (formattedElement
|
|
4972
|
-
formattedElement = formattedElement
|
|
4988
|
+
if ((column == null ? void 0 : column.quantity_type) !== "float" && `${formattedElement}`.endsWith(".00")) {
|
|
4989
|
+
formattedElement = `${formattedElement}`.replace(".00", "");
|
|
4973
4990
|
}
|
|
4974
4991
|
}
|
|
4975
4992
|
break;
|
|
@@ -9956,16 +9973,27 @@ var transformQueryResponse = (response, originalQueryID, isDrilldown2 = false, n
|
|
|
9956
9973
|
}
|
|
9957
9974
|
return transformedResponse;
|
|
9958
9975
|
};
|
|
9976
|
+
var detectQuantityType = (rows, colIndex) => {
|
|
9977
|
+
if (!(rows == null ? void 0 : rows.length)) return "float";
|
|
9978
|
+
for (const row of rows) {
|
|
9979
|
+
const val = row == null ? void 0 : row[colIndex];
|
|
9980
|
+
if (val === null || val === void 0) continue;
|
|
9981
|
+
const num = typeof val === "number" ? val : parseFloat(val);
|
|
9982
|
+
if (!isNaN(num) && num % 1 !== 0) return "float";
|
|
9983
|
+
}
|
|
9984
|
+
return "integer";
|
|
9985
|
+
};
|
|
9959
9986
|
var transformQueryResponseColumns = (response, addedColumns) => {
|
|
9960
|
-
var _a2, _b2;
|
|
9987
|
+
var _a2, _b2, _c, _d;
|
|
9961
9988
|
const columns = (_b2 = (_a2 = response == null ? void 0 : response.data) == null ? void 0 : _a2.data) == null ? void 0 : _b2.columns;
|
|
9989
|
+
const rows = (_d = (_c = response == null ? void 0 : response.data) == null ? void 0 : _c.data) == null ? void 0 : _d.rows;
|
|
9962
9990
|
if (!(columns == null ? void 0 : columns.length)) {
|
|
9963
9991
|
return columns;
|
|
9964
9992
|
}
|
|
9965
9993
|
const isSingleValue = isSingleValueResponse(response);
|
|
9966
9994
|
const transformedColumns = columns.map((col, i) => {
|
|
9967
|
-
var _a3
|
|
9968
|
-
const dataSample = (
|
|
9995
|
+
var _a3;
|
|
9996
|
+
const dataSample = (_a3 = rows == null ? void 0 : rows.find((row) => row[i])) == null ? void 0 : _a3[i];
|
|
9969
9997
|
const drilldownGroupby = getDrilldownGroupby(response, col);
|
|
9970
9998
|
let additional = false;
|
|
9971
9999
|
let is_timestamp = false;
|
|
@@ -9982,6 +10010,7 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
9982
10010
|
if (isSingleValue) {
|
|
9983
10011
|
is_visible = true;
|
|
9984
10012
|
}
|
|
10013
|
+
const quantity_type = col.type === "QUANTITY" /* QUANTITY */ ? detectQuantityType(rows, i) : void 0;
|
|
9985
10014
|
return new Column({
|
|
9986
10015
|
...col,
|
|
9987
10016
|
field: `${i}`,
|
|
@@ -9989,7 +10018,8 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
9989
10018
|
drilldownGroupby,
|
|
9990
10019
|
additional,
|
|
9991
10020
|
is_visible,
|
|
9992
|
-
is_timestamp
|
|
10021
|
+
is_timestamp,
|
|
10022
|
+
quantity_type
|
|
9993
10023
|
});
|
|
9994
10024
|
});
|
|
9995
10025
|
return transformedColumns;
|
|
@@ -10439,7 +10469,9 @@ var exportCSV = ({
|
|
|
10439
10469
|
token,
|
|
10440
10470
|
filters,
|
|
10441
10471
|
tableFilters,
|
|
10442
|
-
csvProgressCallback
|
|
10472
|
+
csvProgressCallback,
|
|
10473
|
+
source = DEFAULT_SOURCE,
|
|
10474
|
+
scope = "null"
|
|
10443
10475
|
} = {}) => {
|
|
10444
10476
|
if (!token || !domain || !apiKey) {
|
|
10445
10477
|
return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
|
|
@@ -10447,7 +10479,9 @@ var exportCSV = ({
|
|
|
10447
10479
|
const url = `${domain}/autoql/api/v1/query/${queryId}/export?key=${apiKey}`;
|
|
10448
10480
|
const data = {
|
|
10449
10481
|
session_filter_locks: filters,
|
|
10450
|
-
filters: tableFilters
|
|
10482
|
+
filters: tableFilters,
|
|
10483
|
+
source,
|
|
10484
|
+
scope
|
|
10451
10485
|
};
|
|
10452
10486
|
const config = {
|
|
10453
10487
|
headers: {
|
|
@@ -10807,6 +10841,30 @@ var fetchLLMSummary = ({
|
|
|
10807
10841
|
return Promise.reject((_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data);
|
|
10808
10842
|
});
|
|
10809
10843
|
};
|
|
10844
|
+
var fetchFollowOnQuery = ({
|
|
10845
|
+
data,
|
|
10846
|
+
queryID,
|
|
10847
|
+
domain,
|
|
10848
|
+
apiKey,
|
|
10849
|
+
token
|
|
10850
|
+
} = {}) => {
|
|
10851
|
+
if (!data) {
|
|
10852
|
+
return Promise.reject(new Error("No data supplied" /* NO_DATA_SUPPLIED */));
|
|
10853
|
+
}
|
|
10854
|
+
if (!token || !domain || !apiKey) {
|
|
10855
|
+
return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
|
|
10856
|
+
}
|
|
10857
|
+
const url = `${domain}/autoql/api/v1/query/${queryID}/follow?key=${apiKey}`;
|
|
10858
|
+
const config = {
|
|
10859
|
+
headers: {
|
|
10860
|
+
Authorization: `Bearer ${token}`
|
|
10861
|
+
}
|
|
10862
|
+
};
|
|
10863
|
+
return axios.post(url, data, config).then((response) => Promise.resolve(response.data)).catch((error) => {
|
|
10864
|
+
var _a2;
|
|
10865
|
+
return Promise.reject((_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data);
|
|
10866
|
+
});
|
|
10867
|
+
};
|
|
10810
10868
|
var fetchLLMSummaryQuote = ({
|
|
10811
10869
|
data,
|
|
10812
10870
|
queryID,
|
|
@@ -12973,6 +13031,7 @@ export {
|
|
|
12973
13031
|
fetchDataPreview,
|
|
12974
13032
|
fetchExploreQueries,
|
|
12975
13033
|
fetchFilters,
|
|
13034
|
+
fetchFollowOnQuery,
|
|
12976
13035
|
fetchLLMSummary,
|
|
12977
13036
|
fetchLLMSummaryEstimate,
|
|
12978
13037
|
fetchLLMSummaryQuote,
|