autoql-fe-utils 1.11.13 → 1.11.14

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 ({
@@ -10213,12 +10311,14 @@ var runDrilldown = ({
10213
10311
  additional_selects: newColumns,
10214
10312
  display_overrides: displayOverrides
10215
10313
  };
10216
- const config = {
10217
- headers: {
10218
- Authorization: `Bearer ${token}`
10314
+ const config = axiosUtils_default(
10315
+ {
10316
+ headers: {
10317
+ Authorization: `Bearer ${token}`
10318
+ }
10219
10319
  },
10220
10320
  cancelToken
10221
- };
10321
+ );
10222
10322
  const url = `${domain}/autoql/api/v1/query/${queryID}/drilldown?key=${apiKey}`;
10223
10323
  return axios.post(url, requestData, config).then((response) => transformQueryResponse(response, queryID, true)).catch(formatErrorResponse);
10224
10324
  };
@@ -10293,12 +10393,14 @@ var fetchVLAutocomplete = ({
10293
10393
  if (filter) {
10294
10394
  url = `${url}&filter=${filter}`;
10295
10395
  }
10296
- const config = {
10297
- headers: {
10298
- Authorization: `Bearer ${token}`
10396
+ const config = axiosUtils_default(
10397
+ {
10398
+ headers: {
10399
+ Authorization: `Bearer ${token}`
10400
+ }
10299
10401
  },
10300
10402
  cancelToken
10301
- };
10403
+ );
10302
10404
  return axios.get(url, config).then((response) => Promise.resolve(response)).catch((error) => {
10303
10405
  var _a2;
10304
10406
  if ((error == null ? void 0 : error.message) === REQUEST_CANCELLED_ERROR) {
@@ -10468,7 +10570,8 @@ var reportProblem = ({
10468
10570
  queryId,
10469
10571
  domain,
10470
10572
  apiKey,
10471
- token
10573
+ token,
10574
+ isCorrect = false
10472
10575
  } = {}) => {
10473
10576
  if (!queryId) {
10474
10577
  return Promise.reject(new Error("No query ID supplied" /* NO_QUERY_ID_SUPPLIED */));
@@ -10483,7 +10586,7 @@ var reportProblem = ({
10483
10586
  }
10484
10587
  };
10485
10588
  const data = {
10486
- is_correct: false,
10589
+ is_correct: isCorrect,
10487
10590
  message
10488
10591
  };
10489
10592
  return axios.put(url, data, config).then((response) => Promise.resolve(response)).catch((error) => {
@@ -10522,8 +10625,12 @@ var isAggSeed = (subject) => {
10522
10625
  };
10523
10626
  var getSampleQueryRegex = (suggestionValues) => {
10524
10627
  const valueArray = Object.keys(suggestionValues);
10525
- const valueRegexArray = valueArray.map((value) => `\\b${value}\\b`);
10526
- const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
10628
+ const valueRegexArray = valueArray.map((value) => {
10629
+ const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
10630
+ return `\\b${esc}\\b`;
10631
+ });
10632
+ const pattern = valueRegexArray.join("|");
10633
+ const valueRegex = compileSafeRegex(pattern, "gm");
10527
10634
  return valueRegex;
10528
10635
  };
10529
10636
  var getSampleQueryText = (query, values = {}) => {
@@ -10537,9 +10644,14 @@ var getSampleQueryText = (query, values = {}) => {
10537
10644
  var _a;
10538
10645
  const chunk = values[valueKey];
10539
10646
  const replacementText = (_a = chunk == null ? void 0 : chunk.replacement) == null ? void 0 : _a.format_txt;
10540
- const valueKeyRegex = new RegExp(`\\b${valueKey}\\b`);
10647
+ const pattern = `\\b${valueKey}\\b`;
10648
+ const valueKeyRegex = compileSafeRegex(pattern);
10541
10649
  if (replacementText) {
10542
- queryText = queryText.replace(valueKeyRegex, replacementText);
10650
+ if (valueKeyRegex) {
10651
+ queryText = queryText.replace(valueKeyRegex, replacementText);
10652
+ } else if (isSimpleLiteral(valueKey)) {
10653
+ queryText = String(queryText).split(valueKey).join(replacementText);
10654
+ }
10543
10655
  }
10544
10656
  });
10545
10657
  return queryText;
@@ -10631,6 +10743,7 @@ var getSampleQueryReplacementType = (key, replacement) => {
10631
10743
  }
10632
10744
  };
10633
10745
  var getSampleQueryChunks = (query, values = {}) => {
10746
+ var _a, _b;
10634
10747
  try {
10635
10748
  const valueArray = Object.keys(values);
10636
10749
  if (!(valueArray == null ? void 0 : valueArray.length)) {
@@ -10642,22 +10755,57 @@ var getSampleQueryChunks = (query, values = {}) => {
10642
10755
  }
10643
10756
  ];
10644
10757
  }
10645
- const valueRegexArray = valueArray.map((value) => `(\\b${value}\\b)`);
10646
- const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
10647
10758
  let splitStrArray = [query];
10648
- if (valueArray == null ? void 0 : valueArray.length) {
10649
- splitStrArray = query.split(valueRegex);
10759
+ if (valueArray.length < 500) {
10760
+ const valueRegexArray = valueArray.map((value) => {
10761
+ const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
10762
+ return `(\\b${esc}\\b)`;
10763
+ });
10764
+ const pattern = valueRegexArray.join("|");
10765
+ const valueRegex = compileSafeRegex(pattern, "gm");
10766
+ if (valueRegex) {
10767
+ splitStrArray = query.split(valueRegex);
10768
+ }
10769
+ }
10770
+ if (splitStrArray.length === 1) {
10771
+ const result = [];
10772
+ let remaining = query;
10773
+ const sortedValues = [...valueArray].sort((a, b) => b.length - a.length);
10774
+ for (const value of sortedValues) {
10775
+ const escaped = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
10776
+ const re2 = compileSafeRegex(`\\b${escaped}\\b`, "i");
10777
+ let match = null;
10778
+ let matchedText = "";
10779
+ if (re2) {
10780
+ match = re2.exec(remaining);
10781
+ matchedText = (_a = match == null ? void 0 : match[0]) != null ? _a : "";
10782
+ } else if (isSimpleLiteral(value)) {
10783
+ const idx = remaining.toLowerCase().indexOf(String(value).toLowerCase());
10784
+ if (idx >= 0) {
10785
+ match = [String(value)];
10786
+ matchedText = remaining.substr(idx, String(value).length);
10787
+ match.index = idx;
10788
+ }
10789
+ }
10790
+ if (match) {
10791
+ const matchIndex = (_b = match.index) != null ? _b : 0;
10792
+ result.push(remaining.substring(0, matchIndex), matchedText || match[0]);
10793
+ remaining = remaining.substring(matchIndex + (matchedText || match[0]).length);
10794
+ }
10795
+ }
10796
+ if (remaining) result.push(remaining);
10797
+ splitStrArray = result;
10650
10798
  }
10651
10799
  const chunkedSuggestion = [];
10652
10800
  splitStrArray.forEach((key) => {
10653
- var _a, _b;
10654
- const replacement = (_a = values[key]) == null ? void 0 : _a.replacement;
10801
+ var _a2, _b2;
10802
+ const replacement = (_a2 = values[key]) == null ? void 0 : _a2.replacement;
10655
10803
  const type = getSampleQueryReplacementType(key, replacement);
10656
10804
  const name = key == null ? void 0 : key.trim();
10657
10805
  if (!type || !name) {
10658
10806
  return;
10659
10807
  }
10660
- let value = (_b = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b.trim();
10808
+ let value = (_b2 = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b2.trim();
10661
10809
  if (type == "TEXT" /* SAMPLE_QUERY_TEXT_TYPE */) {
10662
10810
  value = name;
10663
10811
  }
@@ -10710,12 +10858,14 @@ var fetchDataExplorerAutocomplete = ({
10710
10858
  if (timezone2) {
10711
10859
  url = `${url}&time_zone=${timezone2}`;
10712
10860
  }
10713
- const config = {
10714
- headers: {
10715
- Authorization: `Bearer ${token}`
10861
+ const config = axiosUtils_default(
10862
+ {
10863
+ headers: {
10864
+ Authorization: `Bearer ${token}`
10865
+ }
10716
10866
  },
10717
10867
  cancelToken
10718
- };
10868
+ );
10719
10869
  return axios2.get(url, config).then((response) => {
10720
10870
  return transformDataExplorerAutocompleteResponse(response);
10721
10871
  }).catch((error) => {
@@ -10729,10 +10879,11 @@ var fetchDataExplorerAutocomplete = ({
10729
10879
  });
10730
10880
  };
10731
10881
  var transformVLForDataExplorerSuggestions = (vl) => {
10882
+ var _a;
10732
10883
  return {
10733
10884
  name: vl.keyword,
10734
10885
  alias_name: vl.show_message,
10735
- column_name: vl.column_name
10886
+ column_name: (_a = vl.column_name) != null ? _a : ""
10736
10887
  };
10737
10888
  };
10738
10889
  var fetchDataExplorerSampleQueries = async ({
@@ -10750,12 +10901,14 @@ var fetchDataExplorerSampleQueries = async ({
10750
10901
  context,
10751
10902
  columns
10752
10903
  };
10753
- const config = {
10754
- headers: {
10755
- Authorization: `Bearer ${token}`
10904
+ const config = axiosUtils_default(
10905
+ {
10906
+ headers: {
10907
+ Authorization: `Bearer ${token}`
10908
+ }
10756
10909
  },
10757
10910
  cancelToken
10758
- };
10911
+ );
10759
10912
  return axios2.post(url, data, config).then((response) => {
10760
10913
  var _a, _b, _c, _d;
10761
10914
  if ((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.suggestions) {
@@ -10821,7 +10974,13 @@ var fetchDataExplorerSuggestions = async ({
10821
10974
  return Promise.reject((_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data);
10822
10975
  });
10823
10976
  };
10824
- var fetchSubjectListV2 = ({ domain, apiKey, token, valueLabel, cancelToken }) => {
10977
+ var fetchSubjectListV2 = ({
10978
+ domain,
10979
+ apiKey,
10980
+ token,
10981
+ valueLabel,
10982
+ cancelToken
10983
+ }) => {
10825
10984
  if (!token || !domain || !apiKey) {
10826
10985
  return Promise.reject(new Error("Unauthenticated"));
10827
10986
  }
@@ -10829,12 +10988,14 @@ var fetchSubjectListV2 = ({ domain, apiKey, token, valueLabel, cancelToken }) =>
10829
10988
  if (valueLabel) {
10830
10989
  url += `&value_label=${valueLabel}`;
10831
10990
  }
10832
- const config = {
10833
- headers: {
10834
- Authorization: `Bearer ${token}`
10991
+ const config = axiosUtils_default(
10992
+ {
10993
+ headers: {
10994
+ Authorization: `Bearer ${token}`
10995
+ }
10835
10996
  },
10836
10997
  cancelToken
10837
- };
10998
+ );
10838
10999
  return axios2.get(url, config).then((response) => {
10839
11000
  var _a, _b;
10840
11001
  let subjectList = [];
@@ -10896,12 +11057,14 @@ var fetchDataPreview = ({
10896
11057
  return Promise.reject(new Error("Unauthenticated"));
10897
11058
  }
10898
11059
  const url = `${domain}/autoql/api/v1/query/preview?key=${apiKey}`;
10899
- const config = {
10900
- headers: {
10901
- Authorization: `Bearer ${token}`
11060
+ const config = axiosUtils_default(
11061
+ {
11062
+ headers: {
11063
+ Authorization: `Bearer ${token}`
11064
+ }
10902
11065
  },
10903
11066
  cancelToken
10904
- };
11067
+ );
10905
11068
  const data = {
10906
11069
  subject,
10907
11070
  page_size: numRows,
@@ -11761,8 +11924,8 @@ function formatDecimal_default(x) {
11761
11924
  return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
11762
11925
  }
11763
11926
  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);
11927
+ if (!isFinite(x) || x === 0) return null;
11928
+ var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e"), coefficient = x.slice(0, i);
11766
11929
  return [
11767
11930
  coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
11768
11931
  +x.slice(i + 1)
@@ -11856,7 +12019,7 @@ function formatTrim_default(s) {
11856
12019
  var prefixExponent;
11857
12020
  function formatPrefixAuto_default(x, p) {
11858
12021
  var d = formatDecimalParts(x, p);
11859
- if (!d) return x + "";
12022
+ if (!d) return prefixExponent = void 0, x.toPrecision(p);
11860
12023
  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
12024
  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
12025
  }
@@ -11896,13 +12059,13 @@ var map = Array.prototype.map;
11896
12059
  var prefixes = ["y", "z", "a", "f", "p", "n", "\xB5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
11897
12060
  function locale_default(locale2) {
11898
12061
  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) {
12062
+ function newFormat(specifier, options) {
11900
12063
  specifier = formatSpecifier(specifier);
11901
12064
  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
12065
  if (type === "n") comma = true, type = "g";
11903
12066
  else if (!formatTypes_default[type]) precision === void 0 && (precision = 12), trim = true, type = "g";
11904
12067
  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 : "";
12068
+ 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
12069
  var formatType = formatTypes_default[type], maybeSuffix = /[defgprs%]/.test(type);
11907
12070
  precision = precision === void 0 ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
11908
12071
  function format2(value) {
@@ -11917,7 +12080,7 @@ function locale_default(locale2) {
11917
12080
  if (trim) value = formatTrim_default(value);
11918
12081
  if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
11919
12082
  valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
11920
- valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
12083
+ valueSuffix = (type === "s" && !isNaN(value) && prefixExponent !== void 0 ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
11921
12084
  if (maybeSuffix) {
11922
12085
  i = -1, n = value.length;
11923
12086
  while (++i < n) {
@@ -11954,9 +12117,9 @@ function locale_default(locale2) {
11954
12117
  return format2;
11955
12118
  }
11956
12119
  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];
12120
+ 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
12121
  return function(value2) {
11959
- return f(k * value2) + prefix;
12122
+ return f(k * value2);
11960
12123
  };
11961
12124
  }
11962
12125
  return {
@@ -12525,6 +12688,7 @@ export {
12525
12688
  areAllColumnsHidden,
12526
12689
  areSomeColumnsHidden,
12527
12690
  assignLabelToManagementDataAlert,
12691
+ attachCancelToConfig,
12528
12692
  authenticationDefault,
12529
12693
  autoQLConfigDefault,
12530
12694
  bezierCommand,
@@ -12543,6 +12707,7 @@ export {
12543
12707
  createManagementDataAlert,
12544
12708
  createMutatorFn,
12545
12709
  createNotificationChannel,
12710
+ createRequestController,
12546
12711
  createSVGPath,
12547
12712
  currentEventLoopEnd,
12548
12713
  dataConfigDefault,