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.js CHANGED
@@ -813,6 +813,7 @@ __export(index_exports, {
813
813
  areAllColumnsHidden: () => areAllColumnsHidden,
814
814
  areSomeColumnsHidden: () => areSomeColumnsHidden,
815
815
  assignLabelToManagementDataAlert: () => assignLabelToManagementDataAlert,
816
+ attachCancelToConfig: () => attachCancelToConfig,
816
817
  authenticationDefault: () => authenticationDefault,
817
818
  autoQLConfigDefault: () => autoQLConfigDefault,
818
819
  bezierCommand: () => bezierCommand,
@@ -831,6 +832,7 @@ __export(index_exports, {
831
832
  createManagementDataAlert: () => createManagementDataAlert,
832
833
  createMutatorFn: () => createMutatorFn,
833
834
  createNotificationChannel: () => createNotificationChannel,
835
+ createRequestController: () => createRequestController,
834
836
  createSVGPath: () => createSVGPath,
835
837
  currentEventLoopEnd: () => currentEventLoopEnd,
836
838
  dataConfigDefault: () => dataConfigDefault,
@@ -1644,6 +1646,14 @@ var AGG_TYPES = {
1644
1646
  fn: import_d3_array2.max,
1645
1647
  sqlFn: (columnName) => `max(${columnName})`
1646
1648
  }),
1649
+ MEDIAN: new AggType({
1650
+ type: "MEDIAN" /* MEDIAN */,
1651
+ displayName: "Median",
1652
+ tooltip: "<strong>Median:</strong> The median (middle) value will be shown for all data points with same label.",
1653
+ // symbol: 'Median',
1654
+ icon: "median",
1655
+ fn: import_d3_array2.median
1656
+ }),
1647
1657
  COUNT: new AggType({
1648
1658
  type: "COUNT" /* COUNT */,
1649
1659
  displayName: "Count",
@@ -1670,14 +1680,6 @@ var AGG_TYPES = {
1670
1680
  },
1671
1681
  sqlFn: (columnName) => `count(distinct ${columnName})`
1672
1682
  }),
1673
- MEDIAN: new AggType({
1674
- type: "MEDIAN" /* MEDIAN */,
1675
- displayName: "Median",
1676
- tooltip: "The median (middle) value will be shown for all data points with same label.",
1677
- // symbol: 'Median',
1678
- icon: "median",
1679
- fn: import_d3_array2.median
1680
- }),
1681
1683
  STD_DEV: new AggType({
1682
1684
  type: "STD_DEV" /* STD_DEV */,
1683
1685
  displayName: "Std Dev",
@@ -2309,8 +2311,15 @@ var getDateNoQuotes = (date) => {
2309
2311
  return date.replace(/\'/g, "");
2310
2312
  };
2311
2313
  var isISODate = (str) => {
2314
+ if (!str) {
2315
+ return false;
2316
+ }
2312
2317
  var dateString = str;
2313
2318
  dateString = getDateNoQuotes(dateString);
2319
+ dateString = dateString.trim();
2320
+ if (/^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
2321
+ return false;
2322
+ }
2314
2323
  if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d{1,3})?$/.test(dateString)) {
2315
2324
  return true;
2316
2325
  }
@@ -3021,6 +3030,41 @@ var removeElementAtIndex = (array, index) => {
3021
3030
  return array.slice(0, index).concat(array.slice(index + 1));
3022
3031
  };
3023
3032
 
3033
+ // src/safeRegex.ts
3034
+ var MAX_PATTERN_LENGTH = Number(process.env.REGEXP_GUARD_MAX_LEN) || 2e3;
3035
+ function isSimpleLiteral(pattern) {
3036
+ return typeof pattern === "string" && /^[A-Za-z0-9 _\-\.,:\/]+$/.test(pattern);
3037
+ }
3038
+ function escapeRegExp(str) {
3039
+ return String(str).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3040
+ }
3041
+ function compileSafeRegex(pattern, flags = "") {
3042
+ if (typeof pattern !== "string") return null;
3043
+ if (pattern.length > MAX_PATTERN_LENGTH) return null;
3044
+ try {
3045
+ return new RegExp(pattern, flags);
3046
+ } catch (e) {
3047
+ return null;
3048
+ }
3049
+ }
3050
+ function safeTest(pattern, input, flags = "") {
3051
+ if (pattern == null || input == null) return false;
3052
+ const strInput = String(input);
3053
+ const re2 = compileSafeRegex(String(pattern), flags);
3054
+ if (re2) {
3055
+ try {
3056
+ return re2.test(strInput);
3057
+ } catch (e) {
3058
+ return false;
3059
+ }
3060
+ }
3061
+ if (isSimpleLiteral(pattern)) {
3062
+ const needle = String(pattern);
3063
+ return flags.includes("i") ? strInput.toLowerCase().includes(needle.toLowerCase()) : strInput.includes(needle);
3064
+ }
3065
+ return false;
3066
+ }
3067
+
3024
3068
  // src/HelperFns/filterEngine.ts
3025
3069
  var FilterOperatorEnum = /* @__PURE__ */ ((FilterOperatorEnum2) => {
3026
3070
  FilterOperatorEnum2["LIKE"] = "like";
@@ -3069,8 +3113,7 @@ var lessThanEqMatcher = (cell, cond) => Number(cell) <= Number(cond.value);
3069
3113
  var greaterThanMatcher = (cell, cond) => Number(cell) > Number(cond.value);
3070
3114
  var greaterThanEqMatcher = (cell, cond) => Number(cell) >= Number(cond.value);
3071
3115
  var regexMatcher = (cell, cond) => {
3072
- const reg = new RegExp(String(cond.value));
3073
- return reg.test(String(cell));
3116
+ return safeTest(cond.value, cell);
3074
3117
  };
3075
3118
  var betweenMatcher = (cell, cond) => {
3076
3119
  if (cell == null) return false;
@@ -3126,9 +3169,6 @@ var FILTER_TYPES = ["string", "number", "date", "boolean"];
3126
3169
  function isValidFilterType(t) {
3127
3170
  return FILTER_TYPES.includes(t);
3128
3171
  }
3129
- function escapeRegExp(str) {
3130
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3131
- }
3132
3172
  function parseLocaleNumber(value, locale2) {
3133
3173
  var _a, _b;
3134
3174
  if (typeof value === "number") return value;
@@ -3140,10 +3180,20 @@ function parseLocaleNumber(value, locale2) {
3140
3180
  const group = (_a = parts.find((p) => p.type === "group")) == null ? void 0 : _a.value;
3141
3181
  const decimal = (_b = parts.find((p) => p.type === "decimal")) == null ? void 0 : _b.value;
3142
3182
  if (group) {
3143
- str = str.replace(new RegExp(escapeRegExp(group), "g"), "");
3183
+ const grpRe = compileSafeRegex(escapeRegExp(group), "g");
3184
+ if (grpRe) {
3185
+ str = str.replace(grpRe, "");
3186
+ } else {
3187
+ str = str.split(group).join("");
3188
+ }
3144
3189
  }
3145
3190
  if (decimal && decimal !== ".") {
3146
- str = str.replace(new RegExp(escapeRegExp(decimal), "g"), ".");
3191
+ const decRe = compileSafeRegex(escapeRegExp(decimal), "g");
3192
+ if (decRe) {
3193
+ str = str.replace(decRe, ".");
3194
+ } else {
3195
+ str = str.split(decimal).join(".");
3196
+ }
3147
3197
  }
3148
3198
  } catch (e) {
3149
3199
  str = str.replace(/[,']/g, "");
@@ -3164,7 +3214,9 @@ function parseFilter(raw, type, defaultOperator = "like" /* LIKE */) {
3164
3214
  const trimmed = raw.trim();
3165
3215
  if (trimmed.length === 0) return { operator: defaultOperator, value: "", type };
3166
3216
  const opToken = `${"between" /* BETWEEN */}|[<>!=]=?|not_like`;
3167
- const opMatch = new RegExp(`^(${opToken})\\s*(.*)$`, "i").exec(trimmed);
3217
+ const opPattern = `^(${opToken})\\s*(.*)$`;
3218
+ const opRe = compileSafeRegex(opPattern, "i");
3219
+ const opMatch = opRe ? opRe.exec(trimmed) : null;
3168
3220
  if (opMatch) {
3169
3221
  let op = String((_a = opMatch[1]) != null ? _a : "").toLowerCase();
3170
3222
  const rest = (_b = opMatch[2]) != null ? _b : "";
@@ -4292,6 +4344,16 @@ var isColumnIndexConfigValid = ({ response, columnIndexConfig, columns, displayT
4292
4344
  columnIndexConfig.numberColumnIndices2 = numberColumnIndices2;
4293
4345
  columnIndexConfig.numberColumnIndex2 = numberColumnIndex2;
4294
4346
  }
4347
+ if (usePivotData && isNumber(columnIndexConfig.legendColumnIndex) && isNumber(columnIndexConfig.numberColumnIndex) && columnIndexConfig.legendColumnIndex === columnIndexConfig.numberColumnIndex) {
4348
+ console.debug(
4349
+ "Table config invalid: legendColumnIndex and numberColumnIndex are the same.",
4350
+ {
4351
+ legendColumnIndex: columnIndexConfig.legendColumnIndex,
4352
+ numberColumnIndex: columnIndexConfig.numberColumnIndex
4353
+ }
4354
+ );
4355
+ return false;
4356
+ }
4295
4357
  return true;
4296
4358
  } catch (error) {
4297
4359
  console.debug("Saved table config was not valid for response:", error == null ? void 0 : error.message);
@@ -6047,16 +6109,16 @@ var LIGHT_THEME = {
6047
6109
  var DARK_THEME = {
6048
6110
  "accent-color": "#193a48",
6049
6111
  "accent-color-secondary": "#1ea0d8",
6050
- "background-color-primary": "#20252A",
6051
- "background-color-secondary": "#3B3F46",
6112
+ "background-color-primary": "#15191c",
6113
+ "background-color-secondary": "#1d222b",
6052
6114
  "background-color-tertiary": "#292929",
6053
6115
  "background-color-switch-input": "#252525",
6054
6116
  "background-color-switch-thumb": "#ececec",
6055
6117
  "background-color-checkbox": "#292929",
6056
6118
  "background-color-disabled": "#5d6167",
6057
6119
  "background-color-disabled-dark": "#857d83",
6058
- "table-border-color": "#53565c",
6059
- "border-color": "#53565c",
6120
+ "table-border-color": "#2c2e32",
6121
+ "border-color": "#43464b",
6060
6122
  "hover-color": "#4a4f56",
6061
6123
  "text-color-primary": "#ececec",
6062
6124
  "text-color-secondary": "#bababa",
@@ -10202,6 +10264,33 @@ var UNAUTHENTICATED_ERROR = "Uh oh.. It looks like you don't have access to this
10202
10264
  var REQUEST_CANCELLED_ERROR = "Request cancelled";
10203
10265
  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.";
10204
10266
 
10267
+ // src/Api/axiosUtils.ts
10268
+ var createRequestController = () => {
10269
+ if (typeof AbortController !== "undefined") return new AbortController();
10270
+ return { abort: () => {
10271
+ }, signal: void 0 };
10272
+ };
10273
+ var attachCancelToConfig = (config = {}, cancelToken) => {
10274
+ if (!cancelToken) return config;
10275
+ if (typeof AbortController !== "undefined" && cancelToken instanceof AbortController)
10276
+ return { ...config, signal: cancelToken.signal };
10277
+ if (typeof AbortSignal !== "undefined" && cancelToken instanceof AbortSignal)
10278
+ return { ...config, signal: cancelToken };
10279
+ if (cancelToken && cancelToken.constructor && cancelToken.constructor.name === "AbortSignal")
10280
+ return { ...config, signal: cancelToken };
10281
+ if (cancelToken && cancelToken.promise && typeof cancelToken.promise.then === "function") {
10282
+ try {
10283
+ const controller = new AbortController();
10284
+ cancelToken.promise.then(() => controller.abort());
10285
+ return { ...config, signal: controller.signal, cancelToken };
10286
+ } catch (e) {
10287
+ return { ...config, cancelToken };
10288
+ }
10289
+ }
10290
+ return { ...config, cancelToken };
10291
+ };
10292
+ var axiosUtils_default = attachCancelToConfig;
10293
+
10205
10294
  // src/Api/dataExplorerService.ts
10206
10295
  var import_axios2 = __toESM(require("axios"));
10207
10296
 
@@ -10284,7 +10373,10 @@ var transformQueryResponseColumns = (response, addedColumns) => {
10284
10373
  const drilldownGroupby = getDrilldownGroupby(response, col);
10285
10374
  let additional = false;
10286
10375
  let is_timestamp = false;
10287
- if (addedColumns == null ? void 0 : addedColumns.find((select5) => select5.columns.includes(col.alt_name || col.name))) {
10376
+ if (addedColumns == null ? void 0 : addedColumns.find((select5) => {
10377
+ var _a3;
10378
+ return select5.columns.includes((_a3 = col.alt_name) != null ? _a3 : col.name);
10379
+ })) {
10288
10380
  additional = true;
10289
10381
  }
10290
10382
  if (isColumnDateType(col) && isISODate(dataSample)) {
@@ -10358,7 +10450,7 @@ var transformUserSelection = (userSelection) => {
10358
10450
  };
10359
10451
  var isError500Type = (referenceId) => {
10360
10452
  try {
10361
- const parsedReferenceId = referenceId == null ? void 0 : referenceId.split(".");
10453
+ const parsedReferenceId = typeof referenceId === "string" ? referenceId.split(".") : String(referenceId != null ? referenceId : "").split(".");
10362
10454
  const errorCode = Number(parsedReferenceId == null ? void 0 : parsedReferenceId[2]);
10363
10455
  if (errorCode >= 500 && errorCode < 600) {
10364
10456
  return true;
@@ -10401,12 +10493,14 @@ var fetchSuggestions = ({
10401
10493
  if (queryId) {
10402
10494
  relatedQueriesUrl = `${relatedQueriesUrl}&query_id=${queryId}`;
10403
10495
  }
10404
- const config = {
10405
- headers: {
10406
- Authorization: `Bearer ${token}`
10496
+ const config = axiosUtils_default(
10497
+ {
10498
+ headers: {
10499
+ Authorization: `Bearer ${token}`
10500
+ }
10407
10501
  },
10408
10502
  cancelToken
10409
- };
10503
+ );
10410
10504
  return import_axios.default.get(relatedQueriesUrl, config).then((response) => Promise.resolve(response)).catch((error) => Promise.reject(error == null ? void 0 : error.response));
10411
10505
  };
10412
10506
  var runQueryNewPage = ({
@@ -10427,12 +10521,14 @@ var runQueryNewPage = ({
10427
10521
  const data = {
10428
10522
  date_format: "ISO8601"
10429
10523
  };
10430
- const config = {
10431
- headers: {
10432
- Authorization: `Bearer ${token}`
10524
+ const config = axiosUtils_default(
10525
+ {
10526
+ headers: {
10527
+ Authorization: `Bearer ${token}`
10528
+ }
10433
10529
  },
10434
10530
  cancelToken
10435
- };
10531
+ );
10436
10532
  return import_axios.default.post(url, data, config).then((response) => {
10437
10533
  var _a, _b;
10438
10534
  if (response.data && typeof response.data === "string") {
@@ -10494,12 +10590,14 @@ var runQueryOnly = ({
10494
10590
  console.error("authentication invalid for request");
10495
10591
  return Promise.reject({ error: "Unauthenticated" /* UNAUTHENTICATED */ });
10496
10592
  }
10497
- const config = {
10498
- headers: {
10499
- Authorization: `Bearer ${token}`
10593
+ const config = axiosUtils_default(
10594
+ {
10595
+ headers: {
10596
+ Authorization: `Bearer ${token}`
10597
+ }
10500
10598
  },
10501
10599
  cancelToken
10502
- };
10600
+ );
10503
10601
  return import_axios.default.post(url, data, config).then((response) => {
10504
10602
  var _a;
10505
10603
  if (!((_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data)) {
@@ -10532,12 +10630,14 @@ var runQueryValidation = ({
10532
10630
  return Promise.reject(new Error("Unauthenticated" /* UNAUTHENTICATED */));
10533
10631
  }
10534
10632
  const url = `${domain}/autoql/api/v1/query/validate?text=${encodeURIComponent(text)}&key=${apiKey}`;
10535
- const config = {
10536
- headers: {
10537
- Authorization: `Bearer ${token}`
10633
+ const config = axiosUtils_default(
10634
+ {
10635
+ headers: {
10636
+ Authorization: `Bearer ${token}`
10637
+ }
10538
10638
  },
10539
10639
  cancelToken
10540
- };
10640
+ );
10541
10641
  return import_axios.default.get(url, config).then((response) => Promise.resolve(response)).catch((error) => formatErrorResponse(error));
10542
10642
  };
10543
10643
  var runQuery = async ({
@@ -10731,12 +10831,14 @@ var runDrilldown = ({
10731
10831
  additional_selects: newColumns,
10732
10832
  display_overrides: displayOverrides
10733
10833
  };
10734
- const config = {
10735
- headers: {
10736
- Authorization: `Bearer ${token}`
10834
+ const config = axiosUtils_default(
10835
+ {
10836
+ headers: {
10837
+ Authorization: `Bearer ${token}`
10838
+ }
10737
10839
  },
10738
10840
  cancelToken
10739
- };
10841
+ );
10740
10842
  const url = `${domain}/autoql/api/v1/query/${queryID}/drilldown?key=${apiKey}`;
10741
10843
  return import_axios.default.post(url, requestData, config).then((response) => transformQueryResponse(response, queryID, true)).catch(formatErrorResponse);
10742
10844
  };
@@ -10811,12 +10913,14 @@ var fetchVLAutocomplete = ({
10811
10913
  if (filter) {
10812
10914
  url = `${url}&filter=${filter}`;
10813
10915
  }
10814
- const config = {
10815
- headers: {
10816
- Authorization: `Bearer ${token}`
10916
+ const config = axiosUtils_default(
10917
+ {
10918
+ headers: {
10919
+ Authorization: `Bearer ${token}`
10920
+ }
10817
10921
  },
10818
10922
  cancelToken
10819
- };
10923
+ );
10820
10924
  return import_axios.default.get(url, config).then((response) => Promise.resolve(response)).catch((error) => {
10821
10925
  var _a2;
10822
10926
  if ((error == null ? void 0 : error.message) === REQUEST_CANCELLED_ERROR) {
@@ -10986,7 +11090,8 @@ var reportProblem = ({
10986
11090
  queryId,
10987
11091
  domain,
10988
11092
  apiKey,
10989
- token
11093
+ token,
11094
+ isCorrect = false
10990
11095
  } = {}) => {
10991
11096
  if (!queryId) {
10992
11097
  return Promise.reject(new Error("No query ID supplied" /* NO_QUERY_ID_SUPPLIED */));
@@ -11001,7 +11106,7 @@ var reportProblem = ({
11001
11106
  }
11002
11107
  };
11003
11108
  const data = {
11004
- is_correct: false,
11109
+ is_correct: isCorrect,
11005
11110
  message
11006
11111
  };
11007
11112
  return import_axios.default.put(url, data, config).then((response) => Promise.resolve(response)).catch((error) => {
@@ -11040,8 +11145,12 @@ var isAggSeed = (subject) => {
11040
11145
  };
11041
11146
  var getSampleQueryRegex = (suggestionValues) => {
11042
11147
  const valueArray = Object.keys(suggestionValues);
11043
- const valueRegexArray = valueArray.map((value) => `\\b${value}\\b`);
11044
- const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
11148
+ const valueRegexArray = valueArray.map((value) => {
11149
+ const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
11150
+ return `\\b${esc}\\b`;
11151
+ });
11152
+ const pattern = valueRegexArray.join("|");
11153
+ const valueRegex = compileSafeRegex(pattern, "gm");
11045
11154
  return valueRegex;
11046
11155
  };
11047
11156
  var getSampleQueryText = (query, values = {}) => {
@@ -11055,9 +11164,14 @@ var getSampleQueryText = (query, values = {}) => {
11055
11164
  var _a;
11056
11165
  const chunk = values[valueKey];
11057
11166
  const replacementText = (_a = chunk == null ? void 0 : chunk.replacement) == null ? void 0 : _a.format_txt;
11058
- const valueKeyRegex = new RegExp(`\\b${valueKey}\\b`);
11167
+ const pattern = `\\b${valueKey}\\b`;
11168
+ const valueKeyRegex = compileSafeRegex(pattern);
11059
11169
  if (replacementText) {
11060
- queryText = queryText.replace(valueKeyRegex, replacementText);
11170
+ if (valueKeyRegex) {
11171
+ queryText = queryText.replace(valueKeyRegex, replacementText);
11172
+ } else if (isSimpleLiteral(valueKey)) {
11173
+ queryText = String(queryText).split(valueKey).join(replacementText);
11174
+ }
11061
11175
  }
11062
11176
  });
11063
11177
  return queryText;
@@ -11149,6 +11263,7 @@ var getSampleQueryReplacementType = (key, replacement) => {
11149
11263
  }
11150
11264
  };
11151
11265
  var getSampleQueryChunks = (query, values = {}) => {
11266
+ var _a, _b;
11152
11267
  try {
11153
11268
  const valueArray = Object.keys(values);
11154
11269
  if (!(valueArray == null ? void 0 : valueArray.length)) {
@@ -11160,22 +11275,57 @@ var getSampleQueryChunks = (query, values = {}) => {
11160
11275
  }
11161
11276
  ];
11162
11277
  }
11163
- const valueRegexArray = valueArray.map((value) => `(\\b${value}\\b)`);
11164
- const valueRegex = new RegExp(valueRegexArray.join("|"), "gm");
11165
11278
  let splitStrArray = [query];
11166
- if (valueArray == null ? void 0 : valueArray.length) {
11167
- splitStrArray = query.split(valueRegex);
11279
+ if (valueArray.length < 500) {
11280
+ const valueRegexArray = valueArray.map((value) => {
11281
+ const esc = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
11282
+ return `(\\b${esc}\\b)`;
11283
+ });
11284
+ const pattern = valueRegexArray.join("|");
11285
+ const valueRegex = compileSafeRegex(pattern, "gm");
11286
+ if (valueRegex) {
11287
+ splitStrArray = query.split(valueRegex);
11288
+ }
11289
+ }
11290
+ if (splitStrArray.length === 1) {
11291
+ const result = [];
11292
+ let remaining = query;
11293
+ const sortedValues = [...valueArray].sort((a, b) => b.length - a.length);
11294
+ for (const value of sortedValues) {
11295
+ const escaped = String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
11296
+ const re2 = compileSafeRegex(`\\b${escaped}\\b`, "i");
11297
+ let match = null;
11298
+ let matchedText = "";
11299
+ if (re2) {
11300
+ match = re2.exec(remaining);
11301
+ matchedText = (_a = match == null ? void 0 : match[0]) != null ? _a : "";
11302
+ } else if (isSimpleLiteral(value)) {
11303
+ const idx = remaining.toLowerCase().indexOf(String(value).toLowerCase());
11304
+ if (idx >= 0) {
11305
+ match = [String(value)];
11306
+ matchedText = remaining.substr(idx, String(value).length);
11307
+ match.index = idx;
11308
+ }
11309
+ }
11310
+ if (match) {
11311
+ const matchIndex = (_b = match.index) != null ? _b : 0;
11312
+ result.push(remaining.substring(0, matchIndex), matchedText || match[0]);
11313
+ remaining = remaining.substring(matchIndex + (matchedText || match[0]).length);
11314
+ }
11315
+ }
11316
+ if (remaining) result.push(remaining);
11317
+ splitStrArray = result;
11168
11318
  }
11169
11319
  const chunkedSuggestion = [];
11170
11320
  splitStrArray.forEach((key) => {
11171
- var _a, _b;
11172
- const replacement = (_a = values[key]) == null ? void 0 : _a.replacement;
11321
+ var _a2, _b2;
11322
+ const replacement = (_a2 = values[key]) == null ? void 0 : _a2.replacement;
11173
11323
  const type = getSampleQueryReplacementType(key, replacement);
11174
11324
  const name = key == null ? void 0 : key.trim();
11175
11325
  if (!type || !name) {
11176
11326
  return;
11177
11327
  }
11178
- let value = (_b = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b.trim();
11328
+ let value = (_b2 = replacement == null ? void 0 : replacement.format_txt) == null ? void 0 : _b2.trim();
11179
11329
  if (type == "TEXT" /* SAMPLE_QUERY_TEXT_TYPE */) {
11180
11330
  value = name;
11181
11331
  }
@@ -11228,12 +11378,14 @@ var fetchDataExplorerAutocomplete = ({
11228
11378
  if (timezone2) {
11229
11379
  url = `${url}&time_zone=${timezone2}`;
11230
11380
  }
11231
- const config = {
11232
- headers: {
11233
- Authorization: `Bearer ${token}`
11381
+ const config = axiosUtils_default(
11382
+ {
11383
+ headers: {
11384
+ Authorization: `Bearer ${token}`
11385
+ }
11234
11386
  },
11235
11387
  cancelToken
11236
- };
11388
+ );
11237
11389
  return import_axios2.default.get(url, config).then((response) => {
11238
11390
  return transformDataExplorerAutocompleteResponse(response);
11239
11391
  }).catch((error) => {
@@ -11247,10 +11399,11 @@ var fetchDataExplorerAutocomplete = ({
11247
11399
  });
11248
11400
  };
11249
11401
  var transformVLForDataExplorerSuggestions = (vl) => {
11402
+ var _a;
11250
11403
  return {
11251
11404
  name: vl.keyword,
11252
11405
  alias_name: vl.show_message,
11253
- column_name: vl.column_name
11406
+ column_name: (_a = vl.column_name) != null ? _a : ""
11254
11407
  };
11255
11408
  };
11256
11409
  var fetchDataExplorerSampleQueries = async ({
@@ -11268,12 +11421,14 @@ var fetchDataExplorerSampleQueries = async ({
11268
11421
  context,
11269
11422
  columns
11270
11423
  };
11271
- const config = {
11272
- headers: {
11273
- Authorization: `Bearer ${token}`
11424
+ const config = axiosUtils_default(
11425
+ {
11426
+ headers: {
11427
+ Authorization: `Bearer ${token}`
11428
+ }
11274
11429
  },
11275
11430
  cancelToken
11276
- };
11431
+ );
11277
11432
  return import_axios2.default.post(url, data, config).then((response) => {
11278
11433
  var _a, _b, _c, _d;
11279
11434
  if ((_b = (_a = response == null ? void 0 : response.data) == null ? void 0 : _a.data) == null ? void 0 : _b.suggestions) {
@@ -11339,7 +11494,13 @@ var fetchDataExplorerSuggestions = async ({
11339
11494
  return Promise.reject((_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.data);
11340
11495
  });
11341
11496
  };
11342
- var fetchSubjectListV2 = ({ domain, apiKey, token, valueLabel, cancelToken }) => {
11497
+ var fetchSubjectListV2 = ({
11498
+ domain,
11499
+ apiKey,
11500
+ token,
11501
+ valueLabel,
11502
+ cancelToken
11503
+ }) => {
11343
11504
  if (!token || !domain || !apiKey) {
11344
11505
  return Promise.reject(new Error("Unauthenticated"));
11345
11506
  }
@@ -11347,12 +11508,14 @@ var fetchSubjectListV2 = ({ domain, apiKey, token, valueLabel, cancelToken }) =>
11347
11508
  if (valueLabel) {
11348
11509
  url += `&value_label=${valueLabel}`;
11349
11510
  }
11350
- const config = {
11351
- headers: {
11352
- Authorization: `Bearer ${token}`
11511
+ const config = axiosUtils_default(
11512
+ {
11513
+ headers: {
11514
+ Authorization: `Bearer ${token}`
11515
+ }
11353
11516
  },
11354
11517
  cancelToken
11355
- };
11518
+ );
11356
11519
  return import_axios2.default.get(url, config).then((response) => {
11357
11520
  var _a, _b;
11358
11521
  let subjectList = [];
@@ -11414,12 +11577,14 @@ var fetchDataPreview = ({
11414
11577
  return Promise.reject(new Error("Unauthenticated"));
11415
11578
  }
11416
11579
  const url = `${domain}/autoql/api/v1/query/preview?key=${apiKey}`;
11417
- const config = {
11418
- headers: {
11419
- Authorization: `Bearer ${token}`
11580
+ const config = axiosUtils_default(
11581
+ {
11582
+ headers: {
11583
+ Authorization: `Bearer ${token}`
11584
+ }
11420
11585
  },
11421
11586
  cancelToken
11422
- };
11587
+ );
11423
11588
  const data = {
11424
11589
  subject,
11425
11590
  page_size: numRows,
@@ -12279,8 +12444,8 @@ function formatDecimal_default(x) {
12279
12444
  return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);
12280
12445
  }
12281
12446
  function formatDecimalParts(x, p) {
12282
- if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null;
12283
- var i, coefficient = x.slice(0, i);
12447
+ if (!isFinite(x) || x === 0) return null;
12448
+ var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e"), coefficient = x.slice(0, i);
12284
12449
  return [
12285
12450
  coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
12286
12451
  +x.slice(i + 1)
@@ -12374,7 +12539,7 @@ function formatTrim_default(s) {
12374
12539
  var prefixExponent;
12375
12540
  function formatPrefixAuto_default(x, p) {
12376
12541
  var d = formatDecimalParts(x, p);
12377
- if (!d) return x + "";
12542
+ if (!d) return prefixExponent = void 0, x.toPrecision(p);
12378
12543
  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;
12379
12544
  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];
12380
12545
  }
@@ -12414,13 +12579,13 @@ var map = Array.prototype.map;
12414
12579
  var prefixes = ["y", "z", "a", "f", "p", "n", "\xB5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
12415
12580
  function locale_default(locale2) {
12416
12581
  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 + "";
12417
- function newFormat(specifier) {
12582
+ function newFormat(specifier, options) {
12418
12583
  specifier = formatSpecifier(specifier);
12419
12584
  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;
12420
12585
  if (type === "n") comma = true, type = "g";
12421
12586
  else if (!formatTypes_default[type]) precision === void 0 && (precision = 12), trim = true, type = "g";
12422
12587
  if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "=";
12423
- var prefix = symbol2 === "$" ? currencyPrefix : symbol2 === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", suffix = symbol2 === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
12588
+ 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 : "");
12424
12589
  var formatType = formatTypes_default[type], maybeSuffix = /[defgprs%]/.test(type);
12425
12590
  precision = precision === void 0 ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
12426
12591
  function format2(value) {
@@ -12435,7 +12600,7 @@ function locale_default(locale2) {
12435
12600
  if (trim) value = formatTrim_default(value);
12436
12601
  if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
12437
12602
  valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
12438
- valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
12603
+ valueSuffix = (type === "s" && !isNaN(value) && prefixExponent !== void 0 ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
12439
12604
  if (maybeSuffix) {
12440
12605
  i = -1, n = value.length;
12441
12606
  while (++i < n) {
@@ -12472,9 +12637,9 @@ function locale_default(locale2) {
12472
12637
  return format2;
12473
12638
  }
12474
12639
  function formatPrefix2(specifier, value) {
12475
- 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];
12640
+ 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] });
12476
12641
  return function(value2) {
12477
- return f(k * value2) + prefix;
12642
+ return f(k * value2);
12478
12643
  };
12479
12644
  }
12480
12645
  return {
@@ -13044,6 +13209,7 @@ function color() {
13044
13209
  areAllColumnsHidden,
13045
13210
  areSomeColumnsHidden,
13046
13211
  assignLabelToManagementDataAlert,
13212
+ attachCancelToConfig,
13047
13213
  authenticationDefault,
13048
13214
  autoQLConfigDefault,
13049
13215
  bezierCommand,
@@ -13062,6 +13228,7 @@ function color() {
13062
13228
  createManagementDataAlert,
13063
13229
  createMutatorFn,
13064
13230
  createNotificationChannel,
13231
+ createRequestController,
13065
13232
  createSVGPath,
13066
13233
  currentEventLoopEnd,
13067
13234
  dataConfigDefault,