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.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
- const reg = new RegExp(String(cond.value));
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
- str = str.replace(new RegExp(escapeRegExp(group), "g"), "");
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
- str = str.replace(new RegExp(escapeRegExp(decimal), "g"), ".");
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 opMatch = new RegExp(`^(${opToken})\\s*(.*)$`, "i").exec(trimmed);
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": "#20252A",
5533
- "background-color-secondary": "#3B3F46",
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": "#53565c",
5541
- "border-color": "#53565c",
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) => select5.columns.includes(col.alt_name || col.name))) {
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 == null ? void 0 : referenceId.split(".");
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
- headers: {
9888
- Authorization: `Bearer ${token}`
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
- headers: {
9914
- Authorization: `Bearer ${token}`
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
- headers: {
9981
- Authorization: `Bearer ${token}`
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
- headers: {
10019
- Authorization: `Bearer ${token}`
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
- headers: {
10218
- Authorization: `Bearer ${token}`
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
- headers: {
10298
- Authorization: `Bearer ${token}`
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: false,
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) => `\\b${value}\\b`);
10526
- const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
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 valueKeyRegex = new RegExp(`\\b${valueKey}\\b`);
10714
+ const pattern = `\\b${valueKey}\\b`;
10715
+ const valueKeyRegex = compileSafeRegex(pattern);
10541
10716
  if (replacementText) {
10542
- queryText = queryText.replace(valueKeyRegex, replacementText);
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 == null ? void 0 : valueArray.length) {
10649
- splitStrArray = query.split(valueRegex);
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 _a, _b;
10654
- const replacement = (_a = values[key]) == null ? void 0 : _a.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 = (_b = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b.trim();
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
- headers: {
10715
- Authorization: `Bearer ${token}`
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
- headers: {
10755
- Authorization: `Bearer ${token}`
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 = ({ domain, apiKey, token, valueLabel, cancelToken }) => {
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
- headers: {
10834
- Authorization: `Bearer ${token}`
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
- headers: {
10901
- Authorization: `Bearer ${token}`
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 ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null;
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 x + "";
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 f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), e = Math.max(-8, Math.min(8, Math.floor(exponent_default(value) / 3))) * 3, k = Math.pow(10, -e), prefix = prefixes[8 + e / 3];
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) + prefix;
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,