autoql-fe-utils 1.11.13 → 1.11.15
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 +31 -19
- package/dist/index.d.ts +31 -19
- package/dist/index.global.js +315 -85
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +321 -85
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +318 -85
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1126,6 +1126,14 @@ var AGG_TYPES = {
|
|
|
1126
1126
|
fn: max,
|
|
1127
1127
|
sqlFn: (columnName) => `max(${columnName})`
|
|
1128
1128
|
}),
|
|
1129
|
+
MEDIAN: new AggType({
|
|
1130
|
+
type: "MEDIAN" /* MEDIAN */,
|
|
1131
|
+
displayName: "Median",
|
|
1132
|
+
tooltip: "<strong>Median:</strong> The median (middle) value will be shown for all data points with same label.",
|
|
1133
|
+
// symbol: 'Median',
|
|
1134
|
+
icon: "median",
|
|
1135
|
+
fn: median
|
|
1136
|
+
}),
|
|
1129
1137
|
COUNT: new AggType({
|
|
1130
1138
|
type: "COUNT" /* COUNT */,
|
|
1131
1139
|
displayName: "Count",
|
|
@@ -1152,14 +1160,6 @@ var AGG_TYPES = {
|
|
|
1152
1160
|
},
|
|
1153
1161
|
sqlFn: (columnName) => `count(distinct ${columnName})`
|
|
1154
1162
|
}),
|
|
1155
|
-
MEDIAN: new AggType({
|
|
1156
|
-
type: "MEDIAN" /* MEDIAN */,
|
|
1157
|
-
displayName: "Median",
|
|
1158
|
-
tooltip: "The median (middle) value will be shown for all data points with same label.",
|
|
1159
|
-
// symbol: 'Median',
|
|
1160
|
-
icon: "median",
|
|
1161
|
-
fn: median
|
|
1162
|
-
}),
|
|
1163
1163
|
STD_DEV: new AggType({
|
|
1164
1164
|
type: "STD_DEV" /* STD_DEV */,
|
|
1165
1165
|
displayName: "Std Dev",
|
|
@@ -1791,8 +1791,15 @@ var getDateNoQuotes = (date) => {
|
|
|
1791
1791
|
return date.replace(/\'/g, "");
|
|
1792
1792
|
};
|
|
1793
1793
|
var isISODate = (str) => {
|
|
1794
|
+
if (!str) {
|
|
1795
|
+
return false;
|
|
1796
|
+
}
|
|
1794
1797
|
var dateString = str;
|
|
1795
1798
|
dateString = getDateNoQuotes(dateString);
|
|
1799
|
+
dateString = dateString.trim();
|
|
1800
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
|
|
1801
|
+
return false;
|
|
1802
|
+
}
|
|
1796
1803
|
if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?$/.test(dateString)) {
|
|
1797
1804
|
return true;
|
|
1798
1805
|
}
|
|
@@ -2503,6 +2510,41 @@ var removeElementAtIndex = (array, index) => {
|
|
|
2503
2510
|
return array.slice(0, index).concat(array.slice(index + 1));
|
|
2504
2511
|
};
|
|
2505
2512
|
|
|
2513
|
+
// src/safeRegex.ts
|
|
2514
|
+
var MAX_PATTERN_LENGTH = Number(process.env.REGEXP_GUARD_MAX_LEN) || 2e3;
|
|
2515
|
+
function isSimpleLiteral(pattern) {
|
|
2516
|
+
return typeof pattern === "string" && /^[A-Za-z0-9 _\-\.,:\/]+$/.test(pattern);
|
|
2517
|
+
}
|
|
2518
|
+
function escapeRegExp(str) {
|
|
2519
|
+
return String(str).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2520
|
+
}
|
|
2521
|
+
function compileSafeRegex(pattern, flags = "") {
|
|
2522
|
+
if (typeof pattern !== "string") return null;
|
|
2523
|
+
if (pattern.length > MAX_PATTERN_LENGTH) return null;
|
|
2524
|
+
try {
|
|
2525
|
+
return new RegExp(pattern, flags);
|
|
2526
|
+
} catch (e) {
|
|
2527
|
+
return null;
|
|
2528
|
+
}
|
|
2529
|
+
}
|
|
2530
|
+
function safeTest(pattern, input, flags = "") {
|
|
2531
|
+
if (pattern == null || input == null) return false;
|
|
2532
|
+
const strInput = String(input);
|
|
2533
|
+
const re2 = compileSafeRegex(String(pattern), flags);
|
|
2534
|
+
if (re2) {
|
|
2535
|
+
try {
|
|
2536
|
+
return re2.test(strInput);
|
|
2537
|
+
} catch (e) {
|
|
2538
|
+
return false;
|
|
2539
|
+
}
|
|
2540
|
+
}
|
|
2541
|
+
if (isSimpleLiteral(pattern)) {
|
|
2542
|
+
const needle = String(pattern);
|
|
2543
|
+
return flags.includes("i") ? strInput.toLowerCase().includes(needle.toLowerCase()) : strInput.includes(needle);
|
|
2544
|
+
}
|
|
2545
|
+
return false;
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2506
2548
|
// src/HelperFns/filterEngine.ts
|
|
2507
2549
|
var FilterOperatorEnum = /* @__PURE__ */ ((FilterOperatorEnum2) => {
|
|
2508
2550
|
FilterOperatorEnum2["LIKE"] = "like";
|
|
@@ -2551,8 +2593,7 @@ var lessThanEqMatcher = (cell, cond) => Number(cell) <= Number(cond.value);
|
|
|
2551
2593
|
var greaterThanMatcher = (cell, cond) => Number(cell) > Number(cond.value);
|
|
2552
2594
|
var greaterThanEqMatcher = (cell, cond) => Number(cell) >= Number(cond.value);
|
|
2553
2595
|
var regexMatcher = (cell, cond) => {
|
|
2554
|
-
|
|
2555
|
-
return reg.test(String(cell));
|
|
2596
|
+
return safeTest(cond.value, cell);
|
|
2556
2597
|
};
|
|
2557
2598
|
var betweenMatcher = (cell, cond) => {
|
|
2558
2599
|
if (cell == null) return false;
|
|
@@ -2608,9 +2649,6 @@ var FILTER_TYPES = ["string", "number", "date", "boolean"];
|
|
|
2608
2649
|
function isValidFilterType(t) {
|
|
2609
2650
|
return FILTER_TYPES.includes(t);
|
|
2610
2651
|
}
|
|
2611
|
-
function escapeRegExp(str) {
|
|
2612
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
2613
|
-
}
|
|
2614
2652
|
function parseLocaleNumber(value, locale2) {
|
|
2615
2653
|
var _a, _b;
|
|
2616
2654
|
if (typeof value === "number") return value;
|
|
@@ -2622,10 +2660,20 @@ function parseLocaleNumber(value, locale2) {
|
|
|
2622
2660
|
const group = (_a = parts.find((p) => p.type === "group")) == null ? void 0 : _a.value;
|
|
2623
2661
|
const decimal = (_b = parts.find((p) => p.type === "decimal")) == null ? void 0 : _b.value;
|
|
2624
2662
|
if (group) {
|
|
2625
|
-
|
|
2663
|
+
const grpRe = compileSafeRegex(escapeRegExp(group), "g");
|
|
2664
|
+
if (grpRe) {
|
|
2665
|
+
str = str.replace(grpRe, "");
|
|
2666
|
+
} else {
|
|
2667
|
+
str = str.split(group).join("");
|
|
2668
|
+
}
|
|
2626
2669
|
}
|
|
2627
2670
|
if (decimal && decimal !== ".") {
|
|
2628
|
-
|
|
2671
|
+
const decRe = compileSafeRegex(escapeRegExp(decimal), "g");
|
|
2672
|
+
if (decRe) {
|
|
2673
|
+
str = str.replace(decRe, ".");
|
|
2674
|
+
} else {
|
|
2675
|
+
str = str.split(decimal).join(".");
|
|
2676
|
+
}
|
|
2629
2677
|
}
|
|
2630
2678
|
} catch (e) {
|
|
2631
2679
|
str = str.replace(/[,']/g, "");
|
|
@@ -2646,7 +2694,9 @@ function parseFilter(raw, type, defaultOperator = "like" /* LIKE */) {
|
|
|
2646
2694
|
const trimmed = raw.trim();
|
|
2647
2695
|
if (trimmed.length === 0) return { operator: defaultOperator, value: "", type };
|
|
2648
2696
|
const opToken = `${"between" /* BETWEEN */}|[<>!=]=?|not_like`;
|
|
2649
|
-
const
|
|
2697
|
+
const opPattern = `^(${opToken})\\s*(.*)$`;
|
|
2698
|
+
const opRe = compileSafeRegex(opPattern, "i");
|
|
2699
|
+
const opMatch = opRe ? opRe.exec(trimmed) : null;
|
|
2650
2700
|
if (opMatch) {
|
|
2651
2701
|
let op = String((_a = opMatch[1]) != null ? _a : "").toLowerCase();
|
|
2652
2702
|
const rest = (_b = opMatch[2]) != null ? _b : "";
|
|
@@ -3774,6 +3824,16 @@ var isColumnIndexConfigValid = ({ response, columnIndexConfig, columns, displayT
|
|
|
3774
3824
|
columnIndexConfig.numberColumnIndices2 = numberColumnIndices2;
|
|
3775
3825
|
columnIndexConfig.numberColumnIndex2 = numberColumnIndex2;
|
|
3776
3826
|
}
|
|
3827
|
+
if (usePivotData && isNumber(columnIndexConfig.legendColumnIndex) && isNumber(columnIndexConfig.numberColumnIndex) && columnIndexConfig.legendColumnIndex === columnIndexConfig.numberColumnIndex) {
|
|
3828
|
+
console.debug(
|
|
3829
|
+
"Table config invalid: legendColumnIndex and numberColumnIndex are the same.",
|
|
3830
|
+
{
|
|
3831
|
+
legendColumnIndex: columnIndexConfig.legendColumnIndex,
|
|
3832
|
+
numberColumnIndex: columnIndexConfig.numberColumnIndex
|
|
3833
|
+
}
|
|
3834
|
+
);
|
|
3835
|
+
return false;
|
|
3836
|
+
}
|
|
3777
3837
|
return true;
|
|
3778
3838
|
} catch (error) {
|
|
3779
3839
|
console.debug("Saved table config was not valid for response:", error == null ? void 0 : error.message);
|
|
@@ -5529,16 +5589,16 @@ var LIGHT_THEME = {
|
|
|
5529
5589
|
var DARK_THEME = {
|
|
5530
5590
|
"accent-color": "#193a48",
|
|
5531
5591
|
"accent-color-secondary": "#1ea0d8",
|
|
5532
|
-
"background-color-primary": "#
|
|
5533
|
-
"background-color-secondary": "#
|
|
5592
|
+
"background-color-primary": "#15191c",
|
|
5593
|
+
"background-color-secondary": "#1d222b",
|
|
5534
5594
|
"background-color-tertiary": "#292929",
|
|
5535
5595
|
"background-color-switch-input": "#252525",
|
|
5536
5596
|
"background-color-switch-thumb": "#ececec",
|
|
5537
5597
|
"background-color-checkbox": "#292929",
|
|
5538
5598
|
"background-color-disabled": "#5d6167",
|
|
5539
5599
|
"background-color-disabled-dark": "#857d83",
|
|
5540
|
-
"table-border-color": "#
|
|
5541
|
-
"border-color": "#
|
|
5600
|
+
"table-border-color": "#2c2e32",
|
|
5601
|
+
"border-color": "#43464b",
|
|
5542
5602
|
"hover-color": "#4a4f56",
|
|
5543
5603
|
"text-color-primary": "#ececec",
|
|
5544
5604
|
"text-color-secondary": "#bababa",
|
|
@@ -9684,6 +9744,33 @@ var UNAUTHENTICATED_ERROR = "Uh oh.. It looks like you don't have access to this
|
|
|
9684
9744
|
var REQUEST_CANCELLED_ERROR = "Request cancelled";
|
|
9685
9745
|
var QUERY_TIMEOUT_ERROR = "Database Timeout Error: Your query has exceeded the time limit. To receive a response, try narrowing your query down to a specific time range (e.g., today, this week, this month), or contact your database administrator.";
|
|
9686
9746
|
|
|
9747
|
+
// src/Api/axiosUtils.ts
|
|
9748
|
+
var createRequestController = () => {
|
|
9749
|
+
if (typeof AbortController !== "undefined") return new AbortController();
|
|
9750
|
+
return { abort: () => {
|
|
9751
|
+
}, signal: void 0 };
|
|
9752
|
+
};
|
|
9753
|
+
var attachCancelToConfig = (config = {}, cancelToken) => {
|
|
9754
|
+
if (!cancelToken) return config;
|
|
9755
|
+
if (typeof AbortController !== "undefined" && cancelToken instanceof AbortController)
|
|
9756
|
+
return { ...config, signal: cancelToken.signal };
|
|
9757
|
+
if (typeof AbortSignal !== "undefined" && cancelToken instanceof AbortSignal)
|
|
9758
|
+
return { ...config, signal: cancelToken };
|
|
9759
|
+
if (cancelToken && cancelToken.constructor && cancelToken.constructor.name === "AbortSignal")
|
|
9760
|
+
return { ...config, signal: cancelToken };
|
|
9761
|
+
if (cancelToken && cancelToken.promise && typeof cancelToken.promise.then === "function") {
|
|
9762
|
+
try {
|
|
9763
|
+
const controller = new AbortController();
|
|
9764
|
+
cancelToken.promise.then(() => controller.abort());
|
|
9765
|
+
return { ...config, signal: controller.signal, cancelToken };
|
|
9766
|
+
} catch (e) {
|
|
9767
|
+
return { ...config, cancelToken };
|
|
9768
|
+
}
|
|
9769
|
+
}
|
|
9770
|
+
return { ...config, cancelToken };
|
|
9771
|
+
};
|
|
9772
|
+
var axiosUtils_default = attachCancelToConfig;
|
|
9773
|
+
|
|
9687
9774
|
// src/Api/dataExplorerService.ts
|
|
9688
9775
|
import axios2 from "axios";
|
|
9689
9776
|
|
|
@@ -9766,7 +9853,10 @@ var transformQueryResponseColumns = (response, addedColumns) => {
|
|
|
9766
9853
|
const drilldownGroupby = getDrilldownGroupby(response, col);
|
|
9767
9854
|
let additional = false;
|
|
9768
9855
|
let is_timestamp = false;
|
|
9769
|
-
if (addedColumns == null ? void 0 : addedColumns.find((select5) =>
|
|
9856
|
+
if (addedColumns == null ? void 0 : addedColumns.find((select5) => {
|
|
9857
|
+
var _a3;
|
|
9858
|
+
return select5.columns.includes((_a3 = col.alt_name) != null ? _a3 : col.name);
|
|
9859
|
+
})) {
|
|
9770
9860
|
additional = true;
|
|
9771
9861
|
}
|
|
9772
9862
|
if (isColumnDateType(col) && isISODate(dataSample)) {
|
|
@@ -9840,7 +9930,7 @@ var transformUserSelection = (userSelection) => {
|
|
|
9840
9930
|
};
|
|
9841
9931
|
var isError500Type = (referenceId) => {
|
|
9842
9932
|
try {
|
|
9843
|
-
const parsedReferenceId = referenceId
|
|
9933
|
+
const parsedReferenceId = typeof referenceId === "string" ? referenceId.split(".") : String(referenceId != null ? referenceId : "").split(".");
|
|
9844
9934
|
const errorCode = Number(parsedReferenceId == null ? void 0 : parsedReferenceId[2]);
|
|
9845
9935
|
if (errorCode >= 500 && errorCode < 600) {
|
|
9846
9936
|
return true;
|
|
@@ -9883,12 +9973,14 @@ var fetchSuggestions = ({
|
|
|
9883
9973
|
if (queryId) {
|
|
9884
9974
|
relatedQueriesUrl = `${relatedQueriesUrl}&query_id=${queryId}`;
|
|
9885
9975
|
}
|
|
9886
|
-
const config =
|
|
9887
|
-
|
|
9888
|
-
|
|
9976
|
+
const config = axiosUtils_default(
|
|
9977
|
+
{
|
|
9978
|
+
headers: {
|
|
9979
|
+
Authorization: `Bearer ${token}`
|
|
9980
|
+
}
|
|
9889
9981
|
},
|
|
9890
9982
|
cancelToken
|
|
9891
|
-
|
|
9983
|
+
);
|
|
9892
9984
|
return axios.get(relatedQueriesUrl, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
|
|
9893
9985
|
};
|
|
9894
9986
|
var runQueryNewPage = ({
|
|
@@ -9909,12 +10001,14 @@ var runQueryNewPage = ({
|
|
|
9909
10001
|
const data = {
|
|
9910
10002
|
date_format: "ISO8601"
|
|
9911
10003
|
};
|
|
9912
|
-
const config =
|
|
9913
|
-
|
|
9914
|
-
|
|
10004
|
+
const config = axiosUtils_default(
|
|
10005
|
+
{
|
|
10006
|
+
headers: {
|
|
10007
|
+
Authorization: `Bearer ${token}`
|
|
10008
|
+
}
|
|
9915
10009
|
},
|
|
9916
10010
|
cancelToken
|
|
9917
|
-
|
|
10011
|
+
);
|
|
9918
10012
|
return axios.post(url, data, config).then((response) => {
|
|
9919
10013
|
var _a, _b;
|
|
9920
10014
|
if (response.data && typeof response.data === "string") {
|
|
@@ -9976,12 +10070,14 @@ var runQueryOnly = ({
|
|
|
9976
10070
|
console.error("authentication invalid for request");
|
|
9977
10071
|
return Promise.reject({ error: "Unauthenticated" /* UNAUTHENTICATED */ });
|
|
9978
10072
|
}
|
|
9979
|
-
const config =
|
|
9980
|
-
|
|
9981
|
-
|
|
10073
|
+
const config = axiosUtils_default(
|
|
10074
|
+
{
|
|
10075
|
+
headers: {
|
|
10076
|
+
Authorization: `Bearer ${token}`
|
|
10077
|
+
}
|
|
9982
10078
|
},
|
|
9983
10079
|
cancelToken
|
|
9984
|
-
|
|
10080
|
+
);
|
|
9985
10081
|
return axios.post(url, data, config).then((response) => {
|
|
9986
10082
|
var _a;
|
|
9987
10083
|
if (!((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data)) {
|
|
@@ -10014,12 +10110,14 @@ var runQueryValidation = ({
|
|
|
10014
10110
|
return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
|
|
10015
10111
|
}
|
|
10016
10112
|
const url = `${domain}/autoql/api/v1/query/validate?text=${encodeURIComponent(text)}&key=${apiKey}`;
|
|
10017
|
-
const config =
|
|
10018
|
-
|
|
10019
|
-
|
|
10113
|
+
const config = axiosUtils_default(
|
|
10114
|
+
{
|
|
10115
|
+
headers: {
|
|
10116
|
+
Authorization: `Bearer ${token}`
|
|
10117
|
+
}
|
|
10020
10118
|
},
|
|
10021
10119
|
cancelToken
|
|
10022
|
-
|
|
10120
|
+
);
|
|
10023
10121
|
return axios.get(url, config).then((response) => Promise.resolve(response)).catch((error) => formatErrorResponse(error));
|
|
10024
10122
|
};
|
|
10025
10123
|
var runQuery = async ({
|
|
@@ -10151,6 +10249,73 @@ var runCachedDashboardQuery = async ({
|
|
|
10151
10249
|
return formatErrorResponse(error);
|
|
10152
10250
|
});
|
|
10153
10251
|
};
|
|
10252
|
+
var runCachedDashboardQueryPost = async ({
|
|
10253
|
+
query,
|
|
10254
|
+
domain,
|
|
10255
|
+
apiKey,
|
|
10256
|
+
token,
|
|
10257
|
+
source,
|
|
10258
|
+
orders,
|
|
10259
|
+
filters,
|
|
10260
|
+
tableFilters,
|
|
10261
|
+
allowSuggestions,
|
|
10262
|
+
cancelToken,
|
|
10263
|
+
scope,
|
|
10264
|
+
newColumns,
|
|
10265
|
+
queryIndex,
|
|
10266
|
+
tileKey,
|
|
10267
|
+
dashboardId,
|
|
10268
|
+
force
|
|
10269
|
+
} = {}) => {
|
|
10270
|
+
if (!dashboardId) {
|
|
10271
|
+
console.error("No dashboard ID supplied in request");
|
|
10272
|
+
return Promise.reject({ error: "Dashboard ID not supplied" });
|
|
10273
|
+
}
|
|
10274
|
+
if (!tileKey) {
|
|
10275
|
+
console.error("No tile key supplied in request");
|
|
10276
|
+
return Promise.reject({ error: "Tile key not supplied" });
|
|
10277
|
+
}
|
|
10278
|
+
if (!apiKey || !domain || !token) {
|
|
10279
|
+
console.error("authentication invalid for request");
|
|
10280
|
+
return Promise.reject({ error: "authentication invalid for request" });
|
|
10281
|
+
}
|
|
10282
|
+
let finalScope = scope;
|
|
10283
|
+
if (!!(source == null ? void 0 : source.includes) && source.includes("data_messenger")) {
|
|
10284
|
+
finalScope = "data_messenger";
|
|
10285
|
+
}
|
|
10286
|
+
const queryParams = new URLSearchParams({
|
|
10287
|
+
key: apiKey
|
|
10288
|
+
});
|
|
10289
|
+
const data = {
|
|
10290
|
+
query_index: (queryIndex || 0).toString(),
|
|
10291
|
+
force,
|
|
10292
|
+
session_filter_locks: filters
|
|
10293
|
+
};
|
|
10294
|
+
const url = `${domain}/autoql/api/v1/dashboards/${dashboardId}/tiles/${tileKey}/query?${queryParams.toString()}`;
|
|
10295
|
+
const config = {
|
|
10296
|
+
headers: {
|
|
10297
|
+
Authorization: `Bearer ${token}`
|
|
10298
|
+
}
|
|
10299
|
+
};
|
|
10300
|
+
const finalConfig = axiosUtils_default(config, cancelToken);
|
|
10301
|
+
return axios.post(url, data, finalConfig).then((response) => {
|
|
10302
|
+
var _a;
|
|
10303
|
+
if (!((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data)) {
|
|
10304
|
+
throw new Error("Parse error" /* PARSE_ERROR */);
|
|
10305
|
+
}
|
|
10306
|
+
return Promise.resolve(transformQueryResponse(response, void 0, void 0, newColumns));
|
|
10307
|
+
}).catch((error) => {
|
|
10308
|
+
var _a, _b, _c, _d, _e;
|
|
10309
|
+
const referenceId = (_b = (_a = error == null ? void 0 : error.response) == null ? void 0 : _a.data) == null ? void 0 : _b.reference_id;
|
|
10310
|
+
const isSubquery = (tableFilters == null ? void 0 : tableFilters.length) || (orders == null ? void 0 : orders.length);
|
|
10311
|
+
const needsSuggestions = referenceId === "1.1.430" || referenceId === "1.1.431" || isError500Type(referenceId);
|
|
10312
|
+
if (needsSuggestions && allowSuggestions && !isSubquery) {
|
|
10313
|
+
const queryId = (_e = (_d = (_c = error == null ? void 0 : error.response) == null ? void 0 : _c.data) == null ? void 0 : _d.data) == null ? void 0 : _e.query_id;
|
|
10314
|
+
return fetchSuggestions({ query, queryId, domain, apiKey, token, cancelToken });
|
|
10315
|
+
}
|
|
10316
|
+
return formatErrorResponse(error);
|
|
10317
|
+
});
|
|
10318
|
+
};
|
|
10154
10319
|
var exportCSV = ({
|
|
10155
10320
|
queryId,
|
|
10156
10321
|
domain,
|
|
@@ -10213,12 +10378,14 @@ var runDrilldown = ({
|
|
|
10213
10378
|
additional_selects: newColumns,
|
|
10214
10379
|
display_overrides: displayOverrides
|
|
10215
10380
|
};
|
|
10216
|
-
const config =
|
|
10217
|
-
|
|
10218
|
-
|
|
10381
|
+
const config = axiosUtils_default(
|
|
10382
|
+
{
|
|
10383
|
+
headers: {
|
|
10384
|
+
Authorization: `Bearer ${token}`
|
|
10385
|
+
}
|
|
10219
10386
|
},
|
|
10220
10387
|
cancelToken
|
|
10221
|
-
|
|
10388
|
+
);
|
|
10222
10389
|
const url = `${domain}/autoql/api/v1/query/${queryID}/drilldown?key=${apiKey}`;
|
|
10223
10390
|
return axios.post(url, requestData, config).then((response) => transformQueryResponse(response, queryID, true)).catch(formatErrorResponse);
|
|
10224
10391
|
};
|
|
@@ -10293,12 +10460,14 @@ var fetchVLAutocomplete = ({
|
|
|
10293
10460
|
if (filter) {
|
|
10294
10461
|
url = `${url}&filter=${filter}`;
|
|
10295
10462
|
}
|
|
10296
|
-
const config =
|
|
10297
|
-
|
|
10298
|
-
|
|
10463
|
+
const config = axiosUtils_default(
|
|
10464
|
+
{
|
|
10465
|
+
headers: {
|
|
10466
|
+
Authorization: `Bearer ${token}`
|
|
10467
|
+
}
|
|
10299
10468
|
},
|
|
10300
10469
|
cancelToken
|
|
10301
|
-
|
|
10470
|
+
);
|
|
10302
10471
|
return axios.get(url, config).then((response) => Promise.resolve(response)).catch((error) => {
|
|
10303
10472
|
var _a2;
|
|
10304
10473
|
if ((error == null ? void 0 : error.message) === REQUEST_CANCELLED_ERROR) {
|
|
@@ -10468,7 +10637,8 @@ var reportProblem = ({
|
|
|
10468
10637
|
queryId,
|
|
10469
10638
|
domain,
|
|
10470
10639
|
apiKey,
|
|
10471
|
-
token
|
|
10640
|
+
token,
|
|
10641
|
+
isCorrect = false
|
|
10472
10642
|
} = {}) => {
|
|
10473
10643
|
if (!queryId) {
|
|
10474
10644
|
return Promise.reject(new Error("No query ID supplied" /* NO_QUERY_ID_SUPPLIED */));
|
|
@@ -10483,7 +10653,7 @@ var reportProblem = ({
|
|
|
10483
10653
|
}
|
|
10484
10654
|
};
|
|
10485
10655
|
const data = {
|
|
10486
|
-
is_correct:
|
|
10656
|
+
is_correct: isCorrect,
|
|
10487
10657
|
message
|
|
10488
10658
|
};
|
|
10489
10659
|
return axios.put(url, data, config).then((response) => Promise.resolve(response)).catch((error) => {
|
|
@@ -10522,8 +10692,12 @@ var isAggSeed = (subject) => {
|
|
|
10522
10692
|
};
|
|
10523
10693
|
var getSampleQueryRegex = (suggestionValues) => {
|
|
10524
10694
|
const valueArray = Object.keys(suggestionValues);
|
|
10525
|
-
const valueRegexArray = valueArray.map((value) =>
|
|
10526
|
-
|
|
10695
|
+
const valueRegexArray = valueArray.map((value) => {
|
|
10696
|
+
const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
10697
|
+
return `\\b${esc}\\b`;
|
|
10698
|
+
});
|
|
10699
|
+
const pattern = valueRegexArray.join("|");
|
|
10700
|
+
const valueRegex = compileSafeRegex(pattern, "gm");
|
|
10527
10701
|
return valueRegex;
|
|
10528
10702
|
};
|
|
10529
10703
|
var getSampleQueryText = (query, values = {}) => {
|
|
@@ -10537,9 +10711,14 @@ var getSampleQueryText = (query, values = {}) => {
|
|
|
10537
10711
|
var _a;
|
|
10538
10712
|
const chunk = values[valueKey];
|
|
10539
10713
|
const replacementText = (_a = chunk == null ? void 0 : chunk.replacement) == null ? void 0 : _a.format_txt;
|
|
10540
|
-
const
|
|
10714
|
+
const pattern = `\\b${valueKey}\\b`;
|
|
10715
|
+
const valueKeyRegex = compileSafeRegex(pattern);
|
|
10541
10716
|
if (replacementText) {
|
|
10542
|
-
|
|
10717
|
+
if (valueKeyRegex) {
|
|
10718
|
+
queryText = queryText.replace(valueKeyRegex, replacementText);
|
|
10719
|
+
} else if (isSimpleLiteral(valueKey)) {
|
|
10720
|
+
queryText = String(queryText).split(valueKey).join(replacementText);
|
|
10721
|
+
}
|
|
10543
10722
|
}
|
|
10544
10723
|
});
|
|
10545
10724
|
return queryText;
|
|
@@ -10631,6 +10810,7 @@ var getSampleQueryReplacementType = (key, replacement) => {
|
|
|
10631
10810
|
}
|
|
10632
10811
|
};
|
|
10633
10812
|
var getSampleQueryChunks = (query, values = {}) => {
|
|
10813
|
+
var _a, _b;
|
|
10634
10814
|
try {
|
|
10635
10815
|
const valueArray = Object.keys(values);
|
|
10636
10816
|
if (!(valueArray == null ? void 0 : valueArray.length)) {
|
|
@@ -10642,22 +10822,57 @@ var getSampleQueryChunks = (query, values = {}) => {
|
|
|
10642
10822
|
}
|
|
10643
10823
|
];
|
|
10644
10824
|
}
|
|
10645
|
-
const valueRegexArray = valueArray.map((value) => `(\\b${value}\\b)`);
|
|
10646
|
-
const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
|
|
10647
10825
|
let splitStrArray = [query];
|
|
10648
|
-
if (valueArray
|
|
10649
|
-
|
|
10826
|
+
if (valueArray.length < 500) {
|
|
10827
|
+
const valueRegexArray = valueArray.map((value) => {
|
|
10828
|
+
const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
10829
|
+
return `(\\b${esc}\\b)`;
|
|
10830
|
+
});
|
|
10831
|
+
const pattern = valueRegexArray.join("|");
|
|
10832
|
+
const valueRegex = compileSafeRegex(pattern, "gm");
|
|
10833
|
+
if (valueRegex) {
|
|
10834
|
+
splitStrArray = query.split(valueRegex);
|
|
10835
|
+
}
|
|
10836
|
+
}
|
|
10837
|
+
if (splitStrArray.length === 1) {
|
|
10838
|
+
const result = [];
|
|
10839
|
+
let remaining = query;
|
|
10840
|
+
const sortedValues = [...valueArray].sort((a, b) => b.length - a.length);
|
|
10841
|
+
for (const value of sortedValues) {
|
|
10842
|
+
const escaped = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
10843
|
+
const re2 = compileSafeRegex(`\\b${escaped}\\b`, "i");
|
|
10844
|
+
let match = null;
|
|
10845
|
+
let matchedText = "";
|
|
10846
|
+
if (re2) {
|
|
10847
|
+
match = re2.exec(remaining);
|
|
10848
|
+
matchedText = (_a = match == null ? void 0 : match[0]) != null ? _a : "";
|
|
10849
|
+
} else if (isSimpleLiteral(value)) {
|
|
10850
|
+
const idx = remaining.toLowerCase().indexOf(String(value).toLowerCase());
|
|
10851
|
+
if (idx >= 0) {
|
|
10852
|
+
match = [String(value)];
|
|
10853
|
+
matchedText = remaining.substr(idx, String(value).length);
|
|
10854
|
+
match.index = idx;
|
|
10855
|
+
}
|
|
10856
|
+
}
|
|
10857
|
+
if (match) {
|
|
10858
|
+
const matchIndex = (_b = match.index) != null ? _b : 0;
|
|
10859
|
+
result.push(remaining.substring(0, matchIndex), matchedText || match[0]);
|
|
10860
|
+
remaining = remaining.substring(matchIndex + (matchedText || match[0]).length);
|
|
10861
|
+
}
|
|
10862
|
+
}
|
|
10863
|
+
if (remaining) result.push(remaining);
|
|
10864
|
+
splitStrArray = result;
|
|
10650
10865
|
}
|
|
10651
10866
|
const chunkedSuggestion = [];
|
|
10652
10867
|
splitStrArray.forEach((key) => {
|
|
10653
|
-
var
|
|
10654
|
-
const replacement = (
|
|
10868
|
+
var _a2, _b2;
|
|
10869
|
+
const replacement = (_a2 = values[key]) == null ? void 0 : _a2.replacement;
|
|
10655
10870
|
const type = getSampleQueryReplacementType(key, replacement);
|
|
10656
10871
|
const name = key == null ? void 0 : key.trim();
|
|
10657
10872
|
if (!type || !name) {
|
|
10658
10873
|
return;
|
|
10659
10874
|
}
|
|
10660
|
-
let value = (
|
|
10875
|
+
let value = (_b2 = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b2.trim();
|
|
10661
10876
|
if (type == "TEXT" /* SAMPLE_QUERY_TEXT_TYPE */) {
|
|
10662
10877
|
value = name;
|
|
10663
10878
|
}
|
|
@@ -10710,12 +10925,14 @@ var fetchDataExplorerAutocomplete = ({
|
|
|
10710
10925
|
if (timezone2) {
|
|
10711
10926
|
url = `${url}&time_zone=${timezone2}`;
|
|
10712
10927
|
}
|
|
10713
|
-
const config =
|
|
10714
|
-
|
|
10715
|
-
|
|
10928
|
+
const config = axiosUtils_default(
|
|
10929
|
+
{
|
|
10930
|
+
headers: {
|
|
10931
|
+
Authorization: `Bearer ${token}`
|
|
10932
|
+
}
|
|
10716
10933
|
},
|
|
10717
10934
|
cancelToken
|
|
10718
|
-
|
|
10935
|
+
);
|
|
10719
10936
|
return axios2.get(url, config).then((response) => {
|
|
10720
10937
|
return transformDataExplorerAutocompleteResponse(response);
|
|
10721
10938
|
}).catch((error) => {
|
|
@@ -10729,10 +10946,11 @@ var fetchDataExplorerAutocomplete = ({
|
|
|
10729
10946
|
});
|
|
10730
10947
|
};
|
|
10731
10948
|
var transformVLForDataExplorerSuggestions = (vl) => {
|
|
10949
|
+
var _a;
|
|
10732
10950
|
return {
|
|
10733
10951
|
name: vl.keyword,
|
|
10734
10952
|
alias_name: vl.show_message,
|
|
10735
|
-
column_name: vl.column_name
|
|
10953
|
+
column_name: (_a = vl.column_name) != null ? _a : ""
|
|
10736
10954
|
};
|
|
10737
10955
|
};
|
|
10738
10956
|
var fetchDataExplorerSampleQueries = async ({
|
|
@@ -10750,12 +10968,14 @@ var fetchDataExplorerSampleQueries = async ({
|
|
|
10750
10968
|
context,
|
|
10751
10969
|
columns
|
|
10752
10970
|
};
|
|
10753
|
-
const config =
|
|
10754
|
-
|
|
10755
|
-
|
|
10971
|
+
const config = axiosUtils_default(
|
|
10972
|
+
{
|
|
10973
|
+
headers: {
|
|
10974
|
+
Authorization: `Bearer ${token}`
|
|
10975
|
+
}
|
|
10756
10976
|
},
|
|
10757
10977
|
cancelToken
|
|
10758
|
-
|
|
10978
|
+
);
|
|
10759
10979
|
return axios2.post(url, data, config).then((response) => {
|
|
10760
10980
|
var _a, _b, _c, _d;
|
|
10761
10981
|
if ((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.suggestions) {
|
|
@@ -10821,7 +11041,13 @@ var fetchDataExplorerSuggestions = async ({
|
|
|
10821
11041
|
return Promise.reject((_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data);
|
|
10822
11042
|
});
|
|
10823
11043
|
};
|
|
10824
|
-
var fetchSubjectListV2 = ({
|
|
11044
|
+
var fetchSubjectListV2 = ({
|
|
11045
|
+
domain,
|
|
11046
|
+
apiKey,
|
|
11047
|
+
token,
|
|
11048
|
+
valueLabel,
|
|
11049
|
+
cancelToken
|
|
11050
|
+
}) => {
|
|
10825
11051
|
if (!token || !domain || !apiKey) {
|
|
10826
11052
|
return Promise.reject(new Error("Unauthenticated"));
|
|
10827
11053
|
}
|
|
@@ -10829,12 +11055,14 @@ var fetchSubjectListV2 = ({ domain, apiKey, token, valueLabel, cancelToken }) =>
|
|
|
10829
11055
|
if (valueLabel) {
|
|
10830
11056
|
url += `&value_label=${valueLabel}`;
|
|
10831
11057
|
}
|
|
10832
|
-
const config =
|
|
10833
|
-
|
|
10834
|
-
|
|
11058
|
+
const config = axiosUtils_default(
|
|
11059
|
+
{
|
|
11060
|
+
headers: {
|
|
11061
|
+
Authorization: `Bearer ${token}`
|
|
11062
|
+
}
|
|
10835
11063
|
},
|
|
10836
11064
|
cancelToken
|
|
10837
|
-
|
|
11065
|
+
);
|
|
10838
11066
|
return axios2.get(url, config).then((response) => {
|
|
10839
11067
|
var _a, _b;
|
|
10840
11068
|
let subjectList = [];
|
|
@@ -10896,12 +11124,14 @@ var fetchDataPreview = ({
|
|
|
10896
11124
|
return Promise.reject(new Error("Unauthenticated"));
|
|
10897
11125
|
}
|
|
10898
11126
|
const url = `${domain}/autoql/api/v1/query/preview?key=${apiKey}`;
|
|
10899
|
-
const config =
|
|
10900
|
-
|
|
10901
|
-
|
|
11127
|
+
const config = axiosUtils_default(
|
|
11128
|
+
{
|
|
11129
|
+
headers: {
|
|
11130
|
+
Authorization: `Bearer ${token}`
|
|
11131
|
+
}
|
|
10902
11132
|
},
|
|
10903
11133
|
cancelToken
|
|
10904
|
-
|
|
11134
|
+
);
|
|
10905
11135
|
const data = {
|
|
10906
11136
|
subject,
|
|
10907
11137
|
page_size: numRows,
|
|
@@ -11761,8 +11991,8 @@ function formatDecimal_default(x) {
|
|
|
11761
11991
|
return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
|
|
11762
11992
|
}
|
|
11763
11993
|
function formatDecimalParts(x, p) {
|
|
11764
|
-
if ((
|
|
11765
|
-
var i, coefficient = x.slice(0, i);
|
|
11994
|
+
if (!isFinite(x) || x === 0) return null;
|
|
11995
|
+
var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e"), coefficient = x.slice(0, i);
|
|
11766
11996
|
return [
|
|
11767
11997
|
coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
|
|
11768
11998
|
+x.slice(i + 1)
|
|
@@ -11856,7 +12086,7 @@ function formatTrim_default(s) {
|
|
|
11856
12086
|
var prefixExponent;
|
|
11857
12087
|
function formatPrefixAuto_default(x, p) {
|
|
11858
12088
|
var d = formatDecimalParts(x, p);
|
|
11859
|
-
if (!d) return
|
|
12089
|
+
if (!d) return prefixExponent = void 0, x.toPrecision(p);
|
|
11860
12090
|
var coefficient = d[0], exponent = d[1], i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, n = coefficient.length;
|
|
11861
12091
|
return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0];
|
|
11862
12092
|
}
|
|
@@ -11896,13 +12126,13 @@ var map = Array.prototype.map;
|
|
|
11896
12126
|
var prefixes = ["y", "z", "a", "f", "p", "n", "\xB5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
|
|
11897
12127
|
function locale_default(locale2) {
|
|
11898
12128
|
var group = locale2.grouping === void 0 || locale2.thousands === void 0 ? identity_default : formatGroup_default(map.call(locale2.grouping, Number), locale2.thousands + ""), currencyPrefix = locale2.currency === void 0 ? "" : locale2.currency[0] + "", currencySuffix = locale2.currency === void 0 ? "" : locale2.currency[1] + "", decimal = locale2.decimal === void 0 ? "." : locale2.decimal + "", numerals = locale2.numerals === void 0 ? identity_default : formatNumerals_default(map.call(locale2.numerals, String)), percent = locale2.percent === void 0 ? "%" : locale2.percent + "", minus = locale2.minus === void 0 ? "\u2212" : locale2.minus + "", nan = locale2.nan === void 0 ? "NaN" : locale2.nan + "";
|
|
11899
|
-
function newFormat(specifier) {
|
|
12129
|
+
function newFormat(specifier, options) {
|
|
11900
12130
|
specifier = formatSpecifier(specifier);
|
|
11901
12131
|
var fill = specifier.fill, align = specifier.align, sign = specifier.sign, symbol2 = specifier.symbol, zero = specifier.zero, width = specifier.width, comma = specifier.comma, precision = specifier.precision, trim = specifier.trim, type = specifier.type;
|
|
11902
12132
|
if (type === "n") comma = true, type = "g";
|
|
11903
12133
|
else if (!formatTypes_default[type]) precision === void 0 && (precision = 12), trim = true, type = "g";
|
|
11904
12134
|
if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "=";
|
|
11905
|
-
var prefix = symbol2 === "$" ? currencyPrefix : symbol2 === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", suffix = symbol2 === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
|
|
12135
|
+
var prefix = (options && options.prefix !== void 0 ? options.prefix : "") + (symbol2 === "$" ? currencyPrefix : symbol2 === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : ""), suffix = (symbol2 === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "") + (options && options.suffix !== void 0 ? options.suffix : "");
|
|
11906
12136
|
var formatType = formatTypes_default[type], maybeSuffix = /[defgprs%]/.test(type);
|
|
11907
12137
|
precision = precision === void 0 ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
|
|
11908
12138
|
function format2(value) {
|
|
@@ -11917,7 +12147,7 @@ function locale_default(locale2) {
|
|
|
11917
12147
|
if (trim) value = formatTrim_default(value);
|
|
11918
12148
|
if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
|
|
11919
12149
|
valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
|
|
11920
|
-
valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
|
|
12150
|
+
valueSuffix = (type === "s" && !isNaN(value) && prefixExponent !== void 0 ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
|
|
11921
12151
|
if (maybeSuffix) {
|
|
11922
12152
|
i = -1, n = value.length;
|
|
11923
12153
|
while (++i < n) {
|
|
@@ -11954,9 +12184,9 @@ function locale_default(locale2) {
|
|
|
11954
12184
|
return format2;
|
|
11955
12185
|
}
|
|
11956
12186
|
function formatPrefix2(specifier, value) {
|
|
11957
|
-
var
|
|
12187
|
+
var e = Math.max(-8, Math.min(8, Math.floor(exponent_default(value) / 3))) * 3, k = Math.pow(10, -e), f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier), { suffix: prefixes[8 + e / 3] });
|
|
11958
12188
|
return function(value2) {
|
|
11959
|
-
return f(k * value2)
|
|
12189
|
+
return f(k * value2);
|
|
11960
12190
|
};
|
|
11961
12191
|
}
|
|
11962
12192
|
return {
|
|
@@ -12525,6 +12755,7 @@ export {
|
|
|
12525
12755
|
areAllColumnsHidden,
|
|
12526
12756
|
areSomeColumnsHidden,
|
|
12527
12757
|
assignLabelToManagementDataAlert,
|
|
12758
|
+
attachCancelToConfig,
|
|
12528
12759
|
authenticationDefault,
|
|
12529
12760
|
autoQLConfigDefault,
|
|
12530
12761
|
bezierCommand,
|
|
@@ -12543,6 +12774,7 @@ export {
|
|
|
12543
12774
|
createManagementDataAlert,
|
|
12544
12775
|
createMutatorFn,
|
|
12545
12776
|
createNotificationChannel,
|
|
12777
|
+
createRequestController,
|
|
12546
12778
|
createSVGPath,
|
|
12547
12779
|
currentEventLoopEnd,
|
|
12548
12780
|
dataConfigDefault,
|
|
@@ -12855,6 +13087,7 @@ export {
|
|
|
12855
13087
|
roundToNearestMultiple,
|
|
12856
13088
|
roundUpToNearestMultiple,
|
|
12857
13089
|
runCachedDashboardQuery,
|
|
13090
|
+
runCachedDashboardQueryPost,
|
|
12858
13091
|
runDrilldown,
|
|
12859
13092
|
runQuery,
|
|
12860
13093
|
runQueryNewPage,
|