@cartanova/qgrid-cli 0.1.1 → 1.0.1

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.
Files changed (91) hide show
  1. package/bundle/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
  2. package/bundle/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +6 -0
  3. package/bundle/dist/_virtual/_rolldown/runtime.js +15 -0
  4. package/bundle/dist/application/qgrid/oauth.js +140 -0
  5. package/bundle/dist/application/qgrid/pool.js +100 -0
  6. package/bundle/dist/application/qgrid/qgrid.frame.js +280 -0
  7. package/bundle/dist/application/qgrid/qgrid.types.js +79 -0
  8. package/bundle/dist/application/qgrid/worker.js +183 -0
  9. package/bundle/dist/application/queries.generated.js +31 -0
  10. package/bundle/dist/application/request-log/request-log.model.js +113 -0
  11. package/bundle/dist/application/request-log/request-log.types.js +13 -0
  12. package/bundle/dist/application/sonamu.generated.js +99 -0
  13. package/bundle/dist/application/sonamu.generated.sso.js +34 -0
  14. package/bundle/dist/application/token/token.model.js +157 -0
  15. package/bundle/dist/application/token/token.types.js +22 -0
  16. package/bundle/dist/i18n/en.js +63 -0
  17. package/bundle/dist/i18n/ko.js +62 -0
  18. package/bundle/dist/i18n/sd.generated.js +272 -0
  19. package/bundle/dist/index.js +11 -0
  20. package/bundle/dist/migrations/20260410171405_create__request_logs.js +26 -0
  21. package/bundle/dist/migrations/20260410171406_create__tokens.js +24 -0
  22. package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +16 -0
  23. package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +155 -0
  24. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +1484 -0
  25. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +887 -0
  26. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +2746 -0
  27. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +8 -0
  28. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +8 -0
  29. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +662 -0
  30. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +386 -0
  31. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
  32. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +48 -0
  33. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +1307 -0
  34. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +558 -0
  35. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +33 -0
  36. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +226 -0
  37. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +27 -0
  38. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +77 -0
  39. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +374 -0
  40. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +37 -0
  41. package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +2886 -0
  42. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +10 -0
  43. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +109 -0
  44. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +10 -0
  45. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +10 -0
  46. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +10 -0
  47. package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +1127 -0
  48. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +21 -0
  49. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +432 -0
  50. package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +506 -0
  51. package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +86 -0
  52. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +426 -0
  53. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -0
  54. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +41 -0
  55. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +19 -0
  56. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +202 -0
  57. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +16 -0
  58. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +59 -0
  59. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +2910 -0
  60. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +44 -0
  61. package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_vite@8.0.3_@emnapi_core@1.9.2__bb31087278f97a39b31b92010beab980/node_modules/vitest/dist/index.js +28 -0
  62. package/bundle/dist/sonamu.config.js +196 -0
  63. package/bundle/dist/testing/fixture.js +8 -0
  64. package/bundle/dist/testing/global.js +9 -0
  65. package/bundle/dist/testing/setup-mocks.js +17 -0
  66. package/bundle/dist/utils/subset-loaders.js +12 -0
  67. package/bundle/src/application/request-log/request-log.entity.json +75 -0
  68. package/bundle/src/application/token/token.entity.json +37 -0
  69. package/bundle/src/migrations/20260410171405_create__request_logs.ts +23 -0
  70. package/bundle/src/migrations/20260410171406_create__tokens.ts +21 -0
  71. package/bundle/src/migrations/20260411120624_alter_tokens_alter2.ts +15 -0
  72. package/bundle/web-dist/client/assets/index-DlPchHBY.js +116 -0
  73. package/bundle/web-dist/client/assets/index-vZsvyuFn.css +1 -0
  74. package/bundle/web-dist/client/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
  75. package/bundle/web-dist/client/assets/routes-CagDz23B.js +1 -0
  76. package/bundle/web-dist/client/assets/sd.generated-BrQoQXvv.js +47 -0
  77. package/bundle/web-dist/client/assets/services.generated-BspO2L0j.js +1 -0
  78. package/bundle/web-dist/client/assets/show-aXUGa0gm.js +29 -0
  79. package/bundle/web-dist/client/assets/tokens-DRkXtZ3Q.js +1 -0
  80. package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +9 -0
  81. package/bundle/web-dist/client/assets/vendor-tanstack-CUxlo6YN.js +1 -0
  82. package/bundle/web-dist/client/index.html +18 -0
  83. package/bundle/web-dist/server/assets/react-dom-CGIzOSuj.js +335 -0
  84. package/bundle/web-dist/server/assets/routes-ClzReRep.js +490 -0
  85. package/bundle/web-dist/server/assets/sd.generated-BnonqqKr.js +21694 -0
  86. package/bundle/web-dist/server/assets/services.generated-D5ABD5fr.js +836 -0
  87. package/bundle/web-dist/server/assets/show-C9pcdSxc.js +23364 -0
  88. package/bundle/web-dist/server/assets/tokens-JH6FsnWZ.js +860 -0
  89. package/bundle/web-dist/server/entry-server.generated.js +44646 -0
  90. package/dist/cli.js +38 -89
  91. package/package.json +40 -12
@@ -0,0 +1,374 @@
1
+ import "./constants.js";
2
+ import { isPrimitive, notNullish } from "./helpers.js";
3
+ import { resolve } from "./chunk-pathe.M-eThtNZ.js";
4
+ //#region ../../node_modules/.pnpm/@vitest+utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js
5
+ var comma = ",".charCodeAt(0);
6
+ var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
7
+ var intToChar = new Uint8Array(64);
8
+ var charToInt = new Uint8Array(128);
9
+ for (let i = 0; i < chars.length; i++) {
10
+ const c = chars.charCodeAt(i);
11
+ intToChar[i] = c;
12
+ charToInt[c] = i;
13
+ }
14
+ function decodeInteger(reader, relative) {
15
+ let value = 0;
16
+ let shift = 0;
17
+ let integer = 0;
18
+ do {
19
+ integer = charToInt[reader.next()];
20
+ value |= (integer & 31) << shift;
21
+ shift += 5;
22
+ } while (integer & 32);
23
+ const shouldNegate = value & 1;
24
+ value >>>= 1;
25
+ if (shouldNegate) value = -2147483648 | -value;
26
+ return relative + value;
27
+ }
28
+ function hasMoreVlq(reader, max) {
29
+ if (reader.pos >= max) return false;
30
+ return reader.peek() !== comma;
31
+ }
32
+ var StringReader = class {
33
+ constructor(buffer) {
34
+ this.pos = 0;
35
+ this.buffer = buffer;
36
+ }
37
+ next() {
38
+ return this.buffer.charCodeAt(this.pos++);
39
+ }
40
+ peek() {
41
+ return this.buffer.charCodeAt(this.pos);
42
+ }
43
+ indexOf(char) {
44
+ const { buffer, pos } = this;
45
+ const idx = buffer.indexOf(char, pos);
46
+ return idx === -1 ? buffer.length : idx;
47
+ }
48
+ };
49
+ function decode(mappings) {
50
+ const { length } = mappings;
51
+ const reader = new StringReader(mappings);
52
+ const decoded = [];
53
+ let genColumn = 0;
54
+ let sourcesIndex = 0;
55
+ let sourceLine = 0;
56
+ let sourceColumn = 0;
57
+ let namesIndex = 0;
58
+ do {
59
+ const semi = reader.indexOf(";");
60
+ const line = [];
61
+ let sorted = true;
62
+ let lastCol = 0;
63
+ genColumn = 0;
64
+ while (reader.pos < semi) {
65
+ let seg;
66
+ genColumn = decodeInteger(reader, genColumn);
67
+ if (genColumn < lastCol) sorted = false;
68
+ lastCol = genColumn;
69
+ if (hasMoreVlq(reader, semi)) {
70
+ sourcesIndex = decodeInteger(reader, sourcesIndex);
71
+ sourceLine = decodeInteger(reader, sourceLine);
72
+ sourceColumn = decodeInteger(reader, sourceColumn);
73
+ if (hasMoreVlq(reader, semi)) {
74
+ namesIndex = decodeInteger(reader, namesIndex);
75
+ seg = [
76
+ genColumn,
77
+ sourcesIndex,
78
+ sourceLine,
79
+ sourceColumn,
80
+ namesIndex
81
+ ];
82
+ } else seg = [
83
+ genColumn,
84
+ sourcesIndex,
85
+ sourceLine,
86
+ sourceColumn
87
+ ];
88
+ } else seg = [genColumn];
89
+ line.push(seg);
90
+ reader.pos++;
91
+ }
92
+ if (!sorted) sort(line);
93
+ decoded.push(line);
94
+ reader.pos = semi + 1;
95
+ } while (reader.pos <= length);
96
+ return decoded;
97
+ }
98
+ function sort(line) {
99
+ line.sort(sortComparator);
100
+ }
101
+ function sortComparator(a, b) {
102
+ return a[0] - b[0];
103
+ }
104
+ var COLUMN = 0;
105
+ var SOURCES_INDEX = 1;
106
+ var SOURCE_LINE = 2;
107
+ var SOURCE_COLUMN = 3;
108
+ var NAMES_INDEX = 4;
109
+ var found = false;
110
+ function binarySearch(haystack, needle, low, high) {
111
+ while (low <= high) {
112
+ const mid = low + (high - low >> 1);
113
+ const cmp = haystack[mid][COLUMN] - needle;
114
+ if (cmp === 0) {
115
+ found = true;
116
+ return mid;
117
+ }
118
+ if (cmp < 0) low = mid + 1;
119
+ else high = mid - 1;
120
+ }
121
+ found = false;
122
+ return low - 1;
123
+ }
124
+ function upperBound(haystack, needle, index) {
125
+ for (let i = index + 1; i < haystack.length; index = i++) if (haystack[i][COLUMN] !== needle) break;
126
+ return index;
127
+ }
128
+ function lowerBound(haystack, needle, index) {
129
+ for (let i = index - 1; i >= 0; index = i--) if (haystack[i][COLUMN] !== needle) break;
130
+ return index;
131
+ }
132
+ function memoizedBinarySearch(haystack, needle, state, key) {
133
+ const { lastKey, lastNeedle, lastIndex } = state;
134
+ let low = 0;
135
+ let high = haystack.length - 1;
136
+ if (key === lastKey) {
137
+ if (needle === lastNeedle) {
138
+ found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle;
139
+ return lastIndex;
140
+ }
141
+ if (needle >= lastNeedle) low = lastIndex === -1 ? 0 : lastIndex;
142
+ else high = lastIndex;
143
+ }
144
+ state.lastKey = key;
145
+ state.lastNeedle = needle;
146
+ return state.lastIndex = binarySearch(haystack, needle, low, high);
147
+ }
148
+ var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)";
149
+ var COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)";
150
+ var LEAST_UPPER_BOUND = -1;
151
+ var GREATEST_LOWER_BOUND = 1;
152
+ function cast(map) {
153
+ return map;
154
+ }
155
+ function decodedMappings(map) {
156
+ var _a;
157
+ return (_a = cast(map))._decoded || (_a._decoded = decode(cast(map)._encoded));
158
+ }
159
+ function originalPositionFor(map, needle) {
160
+ let { line, column, bias } = needle;
161
+ line--;
162
+ if (line < 0) throw new Error(LINE_GTR_ZERO);
163
+ if (column < 0) throw new Error(COL_GTR_EQ_ZERO);
164
+ const decoded = decodedMappings(map);
165
+ if (line >= decoded.length) return OMapping(null, null, null, null);
166
+ const segments = decoded[line];
167
+ const index = traceSegmentInternal(segments, cast(map)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);
168
+ if (index === -1) return OMapping(null, null, null, null);
169
+ const segment = segments[index];
170
+ if (segment.length === 1) return OMapping(null, null, null, null);
171
+ const { names, resolvedSources } = map;
172
+ return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null);
173
+ }
174
+ function OMapping(source, line, column, name) {
175
+ return {
176
+ source,
177
+ line,
178
+ column,
179
+ name
180
+ };
181
+ }
182
+ function traceSegmentInternal(segments, memo, line, column, bias) {
183
+ let index = memoizedBinarySearch(segments, column, memo, line);
184
+ if (found) index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);
185
+ else if (bias === LEAST_UPPER_BOUND) index++;
186
+ if (index === -1 || index === segments.length) return -1;
187
+ return index;
188
+ }
189
+ const CHROME_IE_STACK_REGEXP = /^\s*at .*(?:\S:\d+|\(native\))/m;
190
+ const SAFARI_NATIVE_CODE_REGEXP = /^(?:eval@)?(?:\[native code\])?$/;
191
+ const stackIgnorePatterns = [
192
+ "node:internal",
193
+ /\/packages\/\w+\/dist\//,
194
+ /\/@vitest\/\w+\/dist\//,
195
+ "/vitest/dist/",
196
+ "/vitest/src/",
197
+ "/node_modules/chai/",
198
+ "/node_modules/tinyspy/",
199
+ "/vite/dist/node/module-runner",
200
+ "/rolldown-vite/dist/node/module-runner",
201
+ "/deps/chunk-",
202
+ "/deps/@vitest",
203
+ "/deps/loupe",
204
+ "/deps/chai",
205
+ "/browser-playwright/dist/locators.js",
206
+ "/browser-webdriverio/dist/locators.js",
207
+ "/browser-preview/dist/locators.js",
208
+ /node:\w+/,
209
+ /__vitest_test__/,
210
+ /__vitest_browser__/,
211
+ "/@id/__x00__vitest/browser",
212
+ /\/deps\/vitest_/
213
+ ];
214
+ const NOW_LENGTH = Date.now().toString().length;
215
+ const REGEXP_VITEST = new RegExp(`vitest=\\d{${NOW_LENGTH}}`);
216
+ function extractLocation(urlLike) {
217
+ if (!urlLike.includes(":")) return [urlLike];
218
+ const parts = /(.+?)(?::(\d+))?(?::(\d+))?$/.exec(urlLike.replace(/^\(|\)$/g, ""));
219
+ if (!parts) return [urlLike];
220
+ let url = parts[1];
221
+ if (url.startsWith("async ")) url = url.slice(6);
222
+ if (url.startsWith("http:") || url.startsWith("https:")) {
223
+ const urlObj = new URL(url);
224
+ urlObj.searchParams.delete("import");
225
+ urlObj.searchParams.delete("browserv");
226
+ url = urlObj.pathname + urlObj.hash + urlObj.search;
227
+ }
228
+ if (url.startsWith("/@fs/")) {
229
+ const isWindows = /^\/@fs\/[a-zA-Z]:\//.test(url);
230
+ url = url.slice(isWindows ? 5 : 4);
231
+ }
232
+ if (url.includes("vitest=")) url = url.replace(REGEXP_VITEST, "").replace(/[?&]$/, "");
233
+ return [
234
+ url,
235
+ parts[2] || void 0,
236
+ parts[3] || void 0
237
+ ];
238
+ }
239
+ function parseSingleFFOrSafariStack(raw) {
240
+ let line = raw.trim();
241
+ if (SAFARI_NATIVE_CODE_REGEXP.test(line)) return null;
242
+ if (line.includes(" > eval")) line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ":$1");
243
+ if (!line.includes("@")) return null;
244
+ let atIndex = -1;
245
+ let locationPart = "";
246
+ let functionName;
247
+ for (let i = 0; i < line.length; i++) if (line[i] === "@") {
248
+ const candidateLocation = line.slice(i + 1);
249
+ if (candidateLocation.includes(":") && candidateLocation.length >= 3) {
250
+ atIndex = i;
251
+ locationPart = candidateLocation;
252
+ functionName = i > 0 ? line.slice(0, i) : void 0;
253
+ break;
254
+ }
255
+ }
256
+ if (atIndex === -1 || !locationPart.includes(":") || locationPart.length < 3) return null;
257
+ const [url, lineNumber, columnNumber] = extractLocation(locationPart);
258
+ if (!url || !lineNumber || !columnNumber) return null;
259
+ return {
260
+ file: url,
261
+ method: functionName || "",
262
+ line: Number.parseInt(lineNumber),
263
+ column: Number.parseInt(columnNumber)
264
+ };
265
+ }
266
+ function parseSingleStack(raw) {
267
+ const line = raw.trim();
268
+ if (!CHROME_IE_STACK_REGEXP.test(line)) return parseSingleFFOrSafariStack(line);
269
+ return parseSingleV8Stack(line);
270
+ }
271
+ function parseSingleV8Stack(raw) {
272
+ let line = raw.trim();
273
+ if (!CHROME_IE_STACK_REGEXP.test(line)) return null;
274
+ if (line.includes("(eval ")) line = line.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(,.*$)/g, "");
275
+ let sanitizedLine = line.replace(/^\s+/, "").replace(/\(eval code/g, "(").replace(/^.*?\s+/, "");
276
+ const location = sanitizedLine.match(/ (\(.+\)$)/);
277
+ sanitizedLine = location ? sanitizedLine.replace(location[0], "") : sanitizedLine;
278
+ const [url, lineNumber, columnNumber] = extractLocation(location ? location[1] : sanitizedLine);
279
+ let method = location && sanitizedLine || "";
280
+ let file = url && ["eval", "<anonymous>"].includes(url) ? void 0 : url;
281
+ if (!file || !lineNumber || !columnNumber) return null;
282
+ if (method.startsWith("async ")) method = method.slice(6);
283
+ if (file.startsWith("file://")) file = file.slice(7);
284
+ file = file.startsWith("node:") || file.startsWith("internal:") ? file : resolve(file);
285
+ if (method) method = method.replace(/\(0\s?,\s?__vite_ssr_import_\d+__.(\w+)\)/g, "$1").replace(/__(vite_ssr_import|vi_import)_\d+__\./g, "").replace(/(Object\.)?__vite_ssr_export_default__\s?/g, "");
286
+ return {
287
+ method,
288
+ file,
289
+ line: Number.parseInt(lineNumber),
290
+ column: Number.parseInt(columnNumber)
291
+ };
292
+ }
293
+ function parseStacktrace(stack, options = {}) {
294
+ const { ignoreStackEntries = stackIgnorePatterns } = options;
295
+ let stacks = !CHROME_IE_STACK_REGEXP.test(stack) ? parseFFOrSafariStackTrace(stack) : parseV8Stacktrace(stack);
296
+ const helperIndex = stacks.findLastIndex((s) => s.method === "__VITEST_HELPER__" || s.method === "async*__VITEST_HELPER__");
297
+ if (helperIndex >= 0) stacks = stacks.slice(helperIndex + 1);
298
+ return stacks.map((stack) => {
299
+ if (options.getUrlId) stack.file = options.getUrlId(stack.file);
300
+ const map = options.getSourceMap?.(stack.file);
301
+ if (!map || typeof map !== "object" || !map.version) return shouldFilter(ignoreStackEntries, stack.file) ? null : stack;
302
+ const position = getOriginalPosition(new DecodedMap(map, stack.file), stack);
303
+ if (!position) return stack;
304
+ const { line, column, source, name } = position;
305
+ let file = source || stack.file;
306
+ if (file.match(/\/\w:\//)) file = file.slice(1);
307
+ if (shouldFilter(ignoreStackEntries, file)) return null;
308
+ if (line != null && column != null) return {
309
+ line,
310
+ column,
311
+ file,
312
+ method: name || stack.method
313
+ };
314
+ return stack;
315
+ }).filter((s) => s != null);
316
+ }
317
+ function shouldFilter(ignoreStackEntries, file) {
318
+ return ignoreStackEntries.some((p) => file.match(p));
319
+ }
320
+ function parseFFOrSafariStackTrace(stack) {
321
+ return stack.split("\n").map((line) => parseSingleFFOrSafariStack(line)).filter(notNullish);
322
+ }
323
+ function parseV8Stacktrace(stack) {
324
+ return stack.split("\n").map((line) => parseSingleV8Stack(line)).filter(notNullish);
325
+ }
326
+ function parseErrorStacktrace(e, options = {}) {
327
+ if (!e || isPrimitive(e)) return [];
328
+ if ("stacks" in e && e.stacks) return e.stacks;
329
+ const stackStr = e.stack || "";
330
+ let stackFrames = typeof stackStr === "string" ? parseStacktrace(stackStr, options) : [];
331
+ if (!stackFrames.length) {
332
+ const e_ = e;
333
+ if (e_.fileName != null && e_.lineNumber != null && e_.columnNumber != null) stackFrames = parseStacktrace(`${e_.fileName}:${e_.lineNumber}:${e_.columnNumber}`, options);
334
+ if (e_.sourceURL != null && e_.line != null && e_._column != null) stackFrames = parseStacktrace(`${e_.sourceURL}:${e_.line}:${e_.column}`, options);
335
+ }
336
+ if (options.frameFilter) stackFrames = stackFrames.filter((f) => options.frameFilter(e, f) !== false);
337
+ e.stacks = stackFrames;
338
+ return stackFrames;
339
+ }
340
+ var DecodedMap = class {
341
+ _encoded;
342
+ _decoded;
343
+ _decodedMemo;
344
+ url;
345
+ version;
346
+ names = [];
347
+ resolvedSources;
348
+ constructor(map, from) {
349
+ this.map = map;
350
+ const { mappings, names, sources } = map;
351
+ this.version = map.version;
352
+ this.names = names || [];
353
+ this._encoded = mappings || "";
354
+ this._decodedMemo = memoizedState();
355
+ this.url = from;
356
+ this.resolvedSources = (sources || []).map((s) => resolve(from, "..", s || ""));
357
+ }
358
+ };
359
+ function memoizedState() {
360
+ return {
361
+ lastKey: -1,
362
+ lastNeedle: -1,
363
+ lastIndex: -1
364
+ };
365
+ }
366
+ function getOriginalPosition(map, needle) {
367
+ const result = originalPositionFor(map, needle);
368
+ if (result.column == null) return null;
369
+ return result;
370
+ }
371
+ //#endregion
372
+ export { parseErrorStacktrace, parseSingleStack };
373
+
374
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLW1hcC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHZpdGVzdCt1dGlsc0A0LjEuMi9ub2RlX21vZHVsZXMvQHZpdGVzdC91dGlscy9kaXN0L3NvdXJjZS1tYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQcmltaXRpdmUsIG5vdE51bGxpc2ggfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgciBhcyByZXNvbHZlIH0gZnJvbSAnLi9jaHVuay1wYXRoZS5NLWVUaHROWi5qcyc7XG5pbXBvcnQgJy4vY29uc3RhbnRzLmpzJztcblxuLy8gc3JjL3ZscS50c1xudmFyIGNvbW1hID0gXCIsXCIuY2hhckNvZGVBdCgwKTtcbnZhciBjaGFycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO1xudmFyIGludFRvQ2hhciA9IG5ldyBVaW50OEFycmF5KDY0KTtcbnZhciBjaGFyVG9JbnQgPSBuZXcgVWludDhBcnJheSgxMjgpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICBjb25zdCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgaW50VG9DaGFyW2ldID0gYztcbiAgY2hhclRvSW50W2NdID0gaTtcbn1cbmZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyLCByZWxhdGl2ZSkge1xuICBsZXQgdmFsdWUgPSAwO1xuICBsZXQgc2hpZnQgPSAwO1xuICBsZXQgaW50ZWdlciA9IDA7XG4gIGRvIHtcbiAgICBjb25zdCBjID0gcmVhZGVyLm5leHQoKTtcbiAgICBpbnRlZ2VyID0gY2hhclRvSW50W2NdO1xuICAgIHZhbHVlIHw9IChpbnRlZ2VyICYgMzEpIDw8IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IDU7XG4gIH0gd2hpbGUgKGludGVnZXIgJiAzMik7XG4gIGNvbnN0IHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcbiAgdmFsdWUgPj4+PSAxO1xuICBpZiAoc2hvdWxkTmVnYXRlKSB7XG4gICAgdmFsdWUgPSAtMjE0NzQ4MzY0OCB8IC12YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVsYXRpdmUgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhc01vcmVWbHEocmVhZGVyLCBtYXgpIHtcbiAgaWYgKHJlYWRlci5wb3MgPj0gbWF4KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiByZWFkZXIucGVlaygpICE9PSBjb21tYTtcbn1cbnZhciBTdHJpbmdSZWFkZXIgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGJ1ZmZlcikge1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfVxuICBuZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMucG9zKyspO1xuICB9XG4gIHBlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICB9XG4gIGluZGV4T2YoY2hhcikge1xuICAgIGNvbnN0IHsgYnVmZmVyLCBwb3MgfSA9IHRoaXM7XG4gICAgY29uc3QgaWR4ID0gYnVmZmVyLmluZGV4T2YoY2hhciwgcG9zKTtcbiAgICByZXR1cm4gaWR4ID09PSAtMSA/IGJ1ZmZlci5sZW5ndGggOiBpZHg7XG4gIH1cbn07XG5cbi8vIHNyYy9zb3VyY2VtYXAtY29kZWMudHNcbmZ1bmN0aW9uIGRlY29kZShtYXBwaW5ncykge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gbWFwcGluZ3M7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIobWFwcGluZ3MpO1xuICBjb25zdCBkZWNvZGVkID0gW107XG4gIGxldCBnZW5Db2x1bW4gPSAwO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuICBkbyB7XG4gICAgY29uc3Qgc2VtaSA9IHJlYWRlci5pbmRleE9mKFwiO1wiKTtcbiAgICBjb25zdCBsaW5lID0gW107XG4gICAgbGV0IHNvcnRlZCA9IHRydWU7XG4gICAgbGV0IGxhc3RDb2wgPSAwO1xuICAgIGdlbkNvbHVtbiA9IDA7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBzZW1pKSB7XG4gICAgICBsZXQgc2VnO1xuICAgICAgZ2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbik7XG4gICAgICBpZiAoZ2VuQ29sdW1uIDwgbGFzdENvbCkgc29ydGVkID0gZmFsc2U7XG4gICAgICBsYXN0Q29sID0gZ2VuQ29sdW1uO1xuICAgICAgaWYgKGhhc01vcmVWbHEocmVhZGVyLCBzZW1pKSkge1xuICAgICAgICBzb3VyY2VzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlc0luZGV4KTtcbiAgICAgICAgc291cmNlTGluZSA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VMaW5lKTtcbiAgICAgICAgc291cmNlQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUNvbHVtbik7XG4gICAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgICBuYW1lc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIG5hbWVzSW5kZXgpO1xuICAgICAgICAgIHNlZyA9IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZyA9IFtnZW5Db2x1bW5dO1xuICAgICAgfVxuICAgICAgbGluZS5wdXNoKHNlZyk7XG4gICAgICByZWFkZXIucG9zKys7XG4gICAgfVxuICAgIGlmICghc29ydGVkKSBzb3J0KGxpbmUpO1xuICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICByZWFkZXIucG9zID0gc2VtaSArIDE7XG4gIH0gd2hpbGUgKHJlYWRlci5wb3MgPD0gbGVuZ3RoKTtcbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5mdW5jdGlvbiBzb3J0KGxpbmUpIHtcbiAgbGluZS5zb3J0KHNvcnRDb21wYXJhdG9yKTtcbn1cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuXG4vLyBzcmMvdHJhY2UtbWFwcGluZy50c1xuXG4vLyBzcmMvc291cmNlbWFwLXNlZ21lbnQudHNcbnZhciBDT0xVTU4gPSAwO1xudmFyIFNPVVJDRVNfSU5ERVggPSAxO1xudmFyIFNPVVJDRV9MSU5FID0gMjtcbnZhciBTT1VSQ0VfQ09MVU1OID0gMztcbnZhciBOQU1FU19JTkRFWCA9IDQ7XG5cbi8vIHNyYy9iaW5hcnktc2VhcmNoLnRzXG52YXIgZm91bmQgPSBmYWxzZTtcbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaChoYXlzdGFjaywgbmVlZGxlLCBsb3csIGhpZ2gpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cgPj4gMSk7XG4gICAgY29uc3QgY21wID0gaGF5c3RhY2tbbWlkXVtDT0xVTU5dIC0gbmVlZGxlO1xuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIGlmIChjbXAgPCAwKSB7XG4gICAgICBsb3cgPSBtaWQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoID0gbWlkIC0gMTtcbiAgICB9XG4gIH1cbiAgZm91bmQgPSBmYWxzZTtcbiAgcmV0dXJuIGxvdyAtIDE7XG59XG5mdW5jdGlvbiB1cHBlckJvdW5kKGhheXN0YWNrLCBuZWVkbGUsIGluZGV4KSB7XG4gIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGluZGV4ID0gaSsrKSB7XG4gICAgaWYgKGhheXN0YWNrW2ldW0NPTFVNTl0gIT09IG5lZWRsZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuZnVuY3Rpb24gbG93ZXJCb3VuZChoYXlzdGFjaywgbmVlZGxlLCBpbmRleCkge1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGluZGV4ID0gaS0tKSB7XG4gICAgaWYgKGhheXN0YWNrW2ldW0NPTFVNTl0gIT09IG5lZWRsZSkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuZnVuY3Rpb24gbWVtb2l6ZWRCaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgc3RhdGUsIGtleSkge1xuICBjb25zdCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGU7XG4gIGxldCBsb3cgPSAwO1xuICBsZXQgaGlnaCA9IGhheXN0YWNrLmxlbmd0aCAtIDE7XG4gIGlmIChrZXkgPT09IGxhc3RLZXkpIHtcbiAgICBpZiAobmVlZGxlID09PSBsYXN0TmVlZGxlKSB7XG4gICAgICBmb3VuZCA9IGxhc3RJbmRleCAhPT0gLTEgJiYgaGF5c3RhY2tbbGFzdEluZGV4XVtDT0xVTU5dID09PSBuZWVkbGU7XG4gICAgICByZXR1cm4gbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAobmVlZGxlID49IGxhc3ROZWVkbGUpIHtcbiAgICAgIGxvdyA9IGxhc3RJbmRleCA9PT0gLTEgPyAwIDogbGFzdEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoID0gbGFzdEluZGV4O1xuICAgIH1cbiAgfVxuICBzdGF0ZS5sYXN0S2V5ID0ga2V5O1xuICBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlO1xuICByZXR1cm4gc3RhdGUubGFzdEluZGV4ID0gYmluYXJ5U2VhcmNoKGhheXN0YWNrLCBuZWVkbGUsIGxvdywgaGlnaCk7XG59XG5cbi8vIHNyYy90cmFjZS1tYXBwaW5nLnRzXG52YXIgTElORV9HVFJfWkVSTyA9IFwiYGxpbmVgIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgKGxpbmVzIHN0YXJ0IGF0IGxpbmUgMSlcIjtcbnZhciBDT0xfR1RSX0VRX1pFUk8gPSBcImBjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApXCI7XG52YXIgTEVBU1RfVVBQRVJfQk9VTkQgPSAtMTtcbnZhciBHUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5mdW5jdGlvbiBjYXN0KG1hcCkge1xuICByZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcCkge1xuICB2YXIgX2E7XG4gIHJldHVybiAoX2EgPSBjYXN0KG1hcCkpLl9kZWNvZGVkIHx8IChfYS5fZGVjb2RlZCA9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQpKTtcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsUG9zaXRpb25Gb3IobWFwLCBuZWVkbGUpIHtcbiAgbGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG4gIGxpbmUtLTtcbiAgaWYgKGxpbmUgPCAwKSB0aHJvdyBuZXcgRXJyb3IoTElORV9HVFJfWkVSTyk7XG4gIGlmIChjb2x1bW4gPCAwKSB0aHJvdyBuZXcgRXJyb3IoQ09MX0dUUl9FUV9aRVJPKTtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhtYXApO1xuICBpZiAobGluZSA+PSBkZWNvZGVkLmxlbmd0aCkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuICBjb25zdCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV07XG4gIGNvbnN0IGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoXG4gICAgc2VnbWVudHMsXG4gICAgY2FzdChtYXApLl9kZWNvZGVkTWVtbyxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBiaWFzIHx8IEdSRUFURVNUX0xPV0VSX0JPVU5EXG4gICk7XG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBPTWFwcGluZyhudWxsLCBudWxsLCBudWxsLCBudWxsKTtcbiAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcbiAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gIGNvbnN0IHsgbmFtZXMsIHJlc29sdmVkU291cmNlcyB9ID0gbWFwO1xuICByZXR1cm4gT01hcHBpbmcoXG4gICAgcmVzb2x2ZWRTb3VyY2VzW3NlZ21lbnRbU09VUkNFU19JTkRFWF1dLFxuICAgIHNlZ21lbnRbU09VUkNFX0xJTkVdICsgMSxcbiAgICBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLFxuICAgIHNlZ21lbnQubGVuZ3RoID09PSA1ID8gbmFtZXNbc2VnbWVudFtOQU1FU19JTkRFWF1dIDogbnVsbFxuICApO1xufVxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUpIHtcbiAgcmV0dXJuIHsgc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUgfTtcbn1cbmZ1bmN0aW9uIHRyYWNlU2VnbWVudEludGVybmFsKHNlZ21lbnRzLCBtZW1vLCBsaW5lLCBjb2x1bW4sIGJpYXMpIHtcbiAgbGV0IGluZGV4ID0gbWVtb2l6ZWRCaW5hcnlTZWFyY2goc2VnbWVudHMsIGNvbHVtbiwgbWVtbywgbGluZSk7XG4gIGlmIChmb3VuZCkge1xuICAgIGluZGV4ID0gKGJpYXMgPT09IExFQVNUX1VQUEVSX0JPVU5EID8gdXBwZXJCb3VuZCA6IGxvd2VyQm91bmQpKHNlZ21lbnRzLCBjb2x1bW4sIGluZGV4KTtcbiAgfSBlbHNlIGlmIChiaWFzID09PSBMRUFTVF9VUFBFUl9CT1VORCkgaW5kZXgrKztcbiAgaWYgKGluZGV4ID09PSAtMSB8fCBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoKSByZXR1cm4gLTE7XG4gIHJldHVybiBpbmRleDtcbn1cblxuY29uc3QgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKD86XFxTOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuY29uc3QgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKD86ZXZhbEApPyg/OlxcW25hdGl2ZSBjb2RlXFxdKT8kLztcbmNvbnN0IHN0YWNrSWdub3JlUGF0dGVybnMgPSBbXG5cdFwibm9kZTppbnRlcm5hbFwiLFxuXHQvXFwvcGFja2FnZXNcXC9cXHcrXFwvZGlzdFxcLy8sXG5cdC9cXC9Adml0ZXN0XFwvXFx3K1xcL2Rpc3RcXC8vLFxuXHRcIi92aXRlc3QvZGlzdC9cIixcblx0XCIvdml0ZXN0L3NyYy9cIixcblx0XCIvbm9kZV9tb2R1bGVzL2NoYWkvXCIsXG5cdFwiL25vZGVfbW9kdWxlcy90aW55c3B5L1wiLFxuXHRcIi92aXRlL2Rpc3Qvbm9kZS9tb2R1bGUtcnVubmVyXCIsXG5cdFwiL3JvbGxkb3duLXZpdGUvZGlzdC9ub2RlL21vZHVsZS1ydW5uZXJcIixcblx0XCIvZGVwcy9jaHVuay1cIixcblx0XCIvZGVwcy9Adml0ZXN0XCIsXG5cdFwiL2RlcHMvbG91cGVcIixcblx0XCIvZGVwcy9jaGFpXCIsXG5cdFwiL2Jyb3dzZXItcGxheXdyaWdodC9kaXN0L2xvY2F0b3JzLmpzXCIsXG5cdFwiL2Jyb3dzZXItd2ViZHJpdmVyaW8vZGlzdC9sb2NhdG9ycy5qc1wiLFxuXHRcIi9icm93c2VyLXByZXZpZXcvZGlzdC9sb2NhdG9ycy5qc1wiLFxuXHQvbm9kZTpcXHcrLyxcblx0L19fdml0ZXN0X3Rlc3RfXy8sXG5cdC9fX3ZpdGVzdF9icm93c2VyX18vLFxuXHRcIi9AaWQvX194MDBfX3ZpdGVzdC9icm93c2VyXCIsXG5cdC9cXC9kZXBzXFwvdml0ZXN0Xy9cbl07XG5jb25zdCBOT1dfTEVOR1RIID0gRGF0ZS5ub3coKS50b1N0cmluZygpLmxlbmd0aDtcbmNvbnN0IFJFR0VYUF9WSVRFU1QgPSBuZXcgUmVnRXhwKGB2aXRlc3Q9XFxcXGR7JHtOT1dfTEVOR1RIfX1gKTtcbmZ1bmN0aW9uIGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG5cdC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuXHRpZiAoIXVybExpa2UuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0cmV0dXJuIFt1cmxMaWtlXTtcblx0fVxuXHRjb25zdCByZWdFeHAgPSAvKC4rPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT8kLztcblx0Y29uc3QgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL15cXCh8XFwpJC9nLCBcIlwiKSk7XG5cdGlmICghcGFydHMpIHtcblx0XHRyZXR1cm4gW3VybExpa2VdO1xuXHR9XG5cdGxldCB1cmwgPSBwYXJ0c1sxXTtcblx0aWYgKHVybC5zdGFydHNXaXRoKFwiYXN5bmMgXCIpKSB7XG5cdFx0dXJsID0gdXJsLnNsaWNlKDYpO1xuXHR9XG5cdGlmICh1cmwuc3RhcnRzV2l0aChcImh0dHA6XCIpIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cHM6XCIpKSB7XG5cdFx0Y29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXHRcdHVybE9iai5zZWFyY2hQYXJhbXMuZGVsZXRlKFwiaW1wb3J0XCIpO1xuXHRcdHVybE9iai5zZWFyY2hQYXJhbXMuZGVsZXRlKFwiYnJvd3NlcnZcIik7XG5cdFx0dXJsID0gdXJsT2JqLnBhdGhuYW1lICsgdXJsT2JqLmhhc2ggKyB1cmxPYmouc2VhcmNoO1xuXHR9XG5cdGlmICh1cmwuc3RhcnRzV2l0aChcIi9AZnMvXCIpKSB7XG5cdFx0Y29uc3QgaXNXaW5kb3dzID0gL15cXC9AZnNcXC9bYS16QS1aXTpcXC8vLnRlc3QodXJsKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoaXNXaW5kb3dzID8gNSA6IDQpO1xuXHR9XG5cdGlmICh1cmwuaW5jbHVkZXMoXCJ2aXRlc3Q9XCIpKSB7XG5cdFx0dXJsID0gdXJsLnJlcGxhY2UoUkVHRVhQX1ZJVEVTVCwgXCJcIikucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblx0fVxuXHRyZXR1cm4gW1xuXHRcdHVybCxcblx0XHRwYXJ0c1syXSB8fCB1bmRlZmluZWQsXG5cdFx0cGFydHNbM10gfHwgdW5kZWZpbmVkXG5cdF07XG59XG5mdW5jdGlvbiBwYXJzZVNpbmdsZUZGT3JTYWZhcmlTdGFjayhyYXcpIHtcblx0bGV0IGxpbmUgPSByYXcudHJpbSgpO1xuXHRpZiAoU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUC50ZXN0KGxpbmUpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKGxpbmUuaW5jbHVkZXMoXCIgPiBldmFsXCIpKSB7XG5cdFx0bGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWw6XFxkKzpcXGQrL2csIFwiOiQxXCIpO1xuXHR9XG5cdC8vIEVhcmx5IHJldHVybiBmb3IgbGluZXMgdGhhdCBkb24ndCBsb29rIGxpa2UgRmlyZWZveC9TYWZhcmkgc3RhY2sgdHJhY2VzXG5cdC8vIEZpcmVmb3gvU2FmYXJpIHN0YWNrIHRyYWNlcyBtdXN0IGNvbnRhaW4gJ0AnIGFuZCBzaG91bGQgaGF2ZSBsb2NhdGlvbiBpbmZvIGFmdGVyIGl0XG5cdGlmICghbGluZS5pbmNsdWRlcyhcIkBcIikpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBGaW5kIHRoZSBjb3JyZWN0IEAgdGhhdCBzZXBhcmF0ZXMgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uXG5cdC8vIEZvciBjYXNlcyBsaWtlICdAaHR0cHM6Ly9AZnMvcGF0aCcgb3IgJ2Z1bmN0aW9uTmFtZUBodHRwczovL0Bmcy9wYXRoJ1xuXHQvLyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGZpcnN0IEAgdGhhdCBwcmVjZWRlcyBhIHZhbGlkIGxvY2F0aW9uIChjb250YWluaW5nIDopXG5cdGxldCBhdEluZGV4ID0gLTE7XG5cdGxldCBsb2NhdGlvblBhcnQgPSBcIlwiO1xuXHRsZXQgZnVuY3Rpb25OYW1lO1xuXHQvLyBUcnkgZWFjaCBAIGZyb20gbGVmdCB0byByaWdodCB0byBmaW5kIHRoZSBvbmUgdGhhdCBnaXZlcyB1cyBhIHZhbGlkIGxvY2F0aW9uXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChsaW5lW2ldID09PSBcIkBcIikge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlTG9jYXRpb24gPSBsaW5lLnNsaWNlKGkgKyAxKTtcblx0XHRcdC8vIE1pbmltdW0gbGVuZ3RoIDMgZm9yIHZhbGlkIGxvY2F0aW9uOiAxIGZvciBmaWxlbmFtZSArIDEgZm9yIGNvbG9uICsgMSBmb3IgbGluZSBudW1iZXIgKGUuZy4sIFwiYToxXCIpXG5cdFx0XHRpZiAoY2FuZGlkYXRlTG9jYXRpb24uaW5jbHVkZXMoXCI6XCIpICYmIGNhbmRpZGF0ZUxvY2F0aW9uLmxlbmd0aCA+PSAzKSB7XG5cdFx0XHRcdGF0SW5kZXggPSBpO1xuXHRcdFx0XHRsb2NhdGlvblBhcnQgPSBjYW5kaWRhdGVMb2NhdGlvbjtcblx0XHRcdFx0ZnVuY3Rpb25OYW1lID0gaSA+IDAgPyBsaW5lLnNsaWNlKDAsIGkpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gVmFsaWRhdGUgd2UgZm91bmQgYSB2YWxpZCBsb2NhdGlvbiB3aXRoIG1pbmltdW0gbGVuZ3RoIChmaWxlbmFtZTpsaW5lIGZvcm1hdClcblx0aWYgKGF0SW5kZXggPT09IC0xIHx8ICFsb2NhdGlvblBhcnQuaW5jbHVkZXMoXCI6XCIpIHx8IGxvY2F0aW9uUGFydC5sZW5ndGggPCAzKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgW3VybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyXSA9IGV4dHJhY3RMb2NhdGlvbihsb2NhdGlvblBhcnQpO1xuXHRpZiAoIXVybCB8fCAhbGluZU51bWJlciB8fCAhY29sdW1uTnVtYmVyKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRmaWxlOiB1cmwsXG5cdFx0bWV0aG9kOiBmdW5jdGlvbk5hbWUgfHwgXCJcIixcblx0XHRsaW5lOiBOdW1iZXIucGFyc2VJbnQobGluZU51bWJlciksXG5cdFx0Y29sdW1uOiBOdW1iZXIucGFyc2VJbnQoY29sdW1uTnVtYmVyKVxuXHR9O1xufVxuZnVuY3Rpb24gcGFyc2VTaW5nbGVTdGFjayhyYXcpIHtcblx0Y29uc3QgbGluZSA9IHJhdy50cmltKCk7XG5cdGlmICghQ0hST01FX0lFX1NUQUNLX1JFR0VYUC50ZXN0KGxpbmUpKSB7XG5cdFx0cmV0dXJuIHBhcnNlU2luZ2xlRkZPclNhZmFyaVN0YWNrKGxpbmUpO1xuXHR9XG5cdHJldHVybiBwYXJzZVNpbmdsZVY4U3RhY2sobGluZSk7XG59XG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vc3RhY2t0cmFjZWpzL2Vycm9yLXN0YWNrLXBhcnNlclxuLy8gQ3JlZGl0IHRvIHN0YWNrdHJhY2Vqc1xuZnVuY3Rpb24gcGFyc2VTaW5nbGVWOFN0YWNrKHJhdykge1xuXHRsZXQgbGluZSA9IHJhdy50cmltKCk7XG5cdGlmICghQ0hST01FX0lFX1NUQUNLX1JFR0VYUC50ZXN0KGxpbmUpKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKGxpbmUuaW5jbHVkZXMoXCIoZXZhbCBcIikpIHtcblx0XHRsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgXCJldmFsXCIpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteKCldKil8KCwuKiQpL2csIFwiXCIpO1xuXHR9XG5cdGxldCBzYW5pdGl6ZWRMaW5lID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sIFwiXCIpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCBcIihcIikucmVwbGFjZSgvXi4qP1xccysvLCBcIlwiKTtcblx0Ly8gY2FwdHVyZSBhbmQgcHJlc2VydmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gXCIoL2Zvby9teSBiYXIuanM6MTI6ODcpXCIgaW5cblx0Ly8gY2FzZSBpdCBoYXMgc3BhY2VzIGluIGl0LCBhcyB0aGUgc3RyaW5nIGlzIHNwbGl0IG9uIFxccysgbGF0ZXIgb25cblx0Y29uc3QgbG9jYXRpb24gPSBzYW5pdGl6ZWRMaW5lLm1hdGNoKC8gKFxcKC4rXFwpJCkvKTtcblx0Ly8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIGZyb20gdGhlIGxpbmUsIGlmIGl0IHdhcyBtYXRjaGVkXG5cdHNhbml0aXplZExpbmUgPSBsb2NhdGlvbiA/IHNhbml0aXplZExpbmUucmVwbGFjZShsb2NhdGlvblswXSwgXCJcIikgOiBzYW5pdGl6ZWRMaW5lO1xuXHQvLyBpZiBhIGxvY2F0aW9uIHdhcyBtYXRjaGVkLCBwYXNzIGl0IHRvIGV4dHJhY3RMb2NhdGlvbigpIG90aGVyd2lzZSBwYXNzIGFsbCBzYW5pdGl6ZWRMaW5lXG5cdC8vIGJlY2F1c2UgdGhpcyBsaW5lIGRvZXNuJ3QgaGF2ZSBmdW5jdGlvbiBuYW1lXG5cdGNvbnN0IFt1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gPSBleHRyYWN0TG9jYXRpb24obG9jYXRpb24gPyBsb2NhdGlvblsxXSA6IHNhbml0aXplZExpbmUpO1xuXHRsZXQgbWV0aG9kID0gbG9jYXRpb24gJiYgc2FuaXRpemVkTGluZSB8fCBcIlwiO1xuXHRsZXQgZmlsZSA9IHVybCAmJiBbXCJldmFsXCIsIFwiPGFub255bW91cz5cIl0uaW5jbHVkZXModXJsKSA/IHVuZGVmaW5lZCA6IHVybDtcblx0aWYgKCFmaWxlIHx8ICFsaW5lTnVtYmVyIHx8ICFjb2x1bW5OdW1iZXIpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAobWV0aG9kLnN0YXJ0c1dpdGgoXCJhc3luYyBcIikpIHtcblx0XHRtZXRob2QgPSBtZXRob2Quc2xpY2UoNik7XG5cdH1cblx0aWYgKGZpbGUuc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpIHtcblx0XHRmaWxlID0gZmlsZS5zbGljZSg3KTtcblx0fVxuXHQvLyBub3JtYWxpemUgV2luZG93cyBwYXRoIChcXCAtPiAvKVxuXHRmaWxlID0gZmlsZS5zdGFydHNXaXRoKFwibm9kZTpcIikgfHwgZmlsZS5zdGFydHNXaXRoKFwiaW50ZXJuYWw6XCIpID8gZmlsZSA6IHJlc29sdmUoZmlsZSk7XG5cdGlmIChtZXRob2QpIHtcblx0XHRtZXRob2QgPSBtZXRob2QucmVwbGFjZSgvXFwoMFxccz8sXFxzP19fdml0ZV9zc3JfaW1wb3J0X1xcZCtfXy4oXFx3KylcXCkvZywgXCIkMVwiKS5yZXBsYWNlKC9fXyh2aXRlX3Nzcl9pbXBvcnR8dmlfaW1wb3J0KV9cXGQrX19cXC4vZywgXCJcIikucmVwbGFjZSgvKE9iamVjdFxcLik/X192aXRlX3Nzcl9leHBvcnRfZGVmYXVsdF9fXFxzPy9nLCBcIlwiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1ldGhvZCxcblx0XHRmaWxlLFxuXHRcdGxpbmU6IE51bWJlci5wYXJzZUludChsaW5lTnVtYmVyKSxcblx0XHRjb2x1bW46IE51bWJlci5wYXJzZUludChjb2x1bW5OdW1iZXIpXG5cdH07XG59XG5mdW5jdGlvbiBjcmVhdGVTdGFja1N0cmluZyhzdGFja3MpIHtcblx0cmV0dXJuIHN0YWNrcy5tYXAoKHN0YWNrKSA9PiB7XG5cdFx0Y29uc3QgbGluZSA9IGAke3N0YWNrLmZpbGV9OiR7c3RhY2subGluZX06JHtzdGFjay5jb2x1bW59YDtcblx0XHRpZiAoc3RhY2subWV0aG9kKSB7XG5cdFx0XHRyZXR1cm4gYCAgICBhdCAke3N0YWNrLm1ldGhvZH0oJHtsaW5lfSlgO1xuXHRcdH1cblx0XHRyZXR1cm4gYCAgICBhdCAke2xpbmV9YDtcblx0fSkuam9pbihcIlxcblwiKTtcbn1cbmZ1bmN0aW9uIHBhcnNlU3RhY2t0cmFjZShzdGFjaywgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgaWdub3JlU3RhY2tFbnRyaWVzID0gc3RhY2tJZ25vcmVQYXR0ZXJucyB9ID0gb3B0aW9ucztcblx0bGV0IHN0YWNrcyA9ICFDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQLnRlc3Qoc3RhY2spID8gcGFyc2VGRk9yU2FmYXJpU3RhY2tUcmFjZShzdGFjaykgOiBwYXJzZVY4U3RhY2t0cmFjZShzdGFjayk7XG5cdC8vIHJlbW92ZSBhc3NlcnRpb24gaGVscGVyJ3MgaW50ZXJuYWwgc3RhY2tzXG5cdGNvbnN0IGhlbHBlckluZGV4ID0gc3RhY2tzLmZpbmRMYXN0SW5kZXgoKHMpID0+IHMubWV0aG9kID09PSBcIl9fVklURVNUX0hFTFBFUl9fXCIgfHwgcy5tZXRob2QgPT09IFwiYXN5bmMqX19WSVRFU1RfSEVMUEVSX19cIik7XG5cdGlmIChoZWxwZXJJbmRleCA+PSAwKSB7XG5cdFx0c3RhY2tzID0gc3RhY2tzLnNsaWNlKGhlbHBlckluZGV4ICsgMSk7XG5cdH1cblx0cmV0dXJuIHN0YWNrcy5tYXAoKHN0YWNrKSA9PiB7XG5cdFx0aWYgKG9wdGlvbnMuZ2V0VXJsSWQpIHtcblx0XHRcdHN0YWNrLmZpbGUgPSBvcHRpb25zLmdldFVybElkKHN0YWNrLmZpbGUpO1xuXHRcdH1cblx0XHRjb25zdCBtYXAgPSBvcHRpb25zLmdldFNvdXJjZU1hcD8uKHN0YWNrLmZpbGUpO1xuXHRcdGlmICghbWFwIHx8IHR5cGVvZiBtYXAgIT09IFwib2JqZWN0XCIgfHwgIW1hcC52ZXJzaW9uKSB7XG5cdFx0XHRyZXR1cm4gc2hvdWxkRmlsdGVyKGlnbm9yZVN0YWNrRW50cmllcywgc3RhY2suZmlsZSkgPyBudWxsIDogc3RhY2s7XG5cdFx0fVxuXHRcdGNvbnN0IHRyYWNlTWFwID0gbmV3IERlY29kZWRNYXAobWFwLCBzdGFjay5maWxlKTtcblx0XHRjb25zdCBwb3NpdGlvbiA9IGdldE9yaWdpbmFsUG9zaXRpb24odHJhY2VNYXAsIHN0YWNrKTtcblx0XHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0XHRyZXR1cm4gc3RhY2s7XG5cdFx0fVxuXHRcdGNvbnN0IHsgbGluZSwgY29sdW1uLCBzb3VyY2UsIG5hbWUgfSA9IHBvc2l0aW9uO1xuXHRcdGxldCBmaWxlID0gc291cmNlIHx8IHN0YWNrLmZpbGU7XG5cdFx0aWYgKGZpbGUubWF0Y2goL1xcL1xcdzpcXC8vKSkge1xuXHRcdFx0ZmlsZSA9IGZpbGUuc2xpY2UoMSk7XG5cdFx0fVxuXHRcdGlmIChzaG91bGRGaWx0ZXIoaWdub3JlU3RhY2tFbnRyaWVzLCBmaWxlKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGlmIChsaW5lICE9IG51bGwgJiYgY29sdW1uICE9IG51bGwpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGxpbmUsXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0ZmlsZSxcblx0XHRcdFx0bWV0aG9kOiBuYW1lIHx8IHN0YWNrLm1ldGhvZFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0YWNrO1xuXHR9KS5maWx0ZXIoKHMpID0+IHMgIT0gbnVsbCk7XG59XG5mdW5jdGlvbiBzaG91bGRGaWx0ZXIoaWdub3JlU3RhY2tFbnRyaWVzLCBmaWxlKSB7XG5cdHJldHVybiBpZ25vcmVTdGFja0VudHJpZXMuc29tZSgocCkgPT4gZmlsZS5tYXRjaChwKSk7XG59XG5mdW5jdGlvbiBwYXJzZUZGT3JTYWZhcmlTdGFja1RyYWNlKHN0YWNrKSB7XG5cdHJldHVybiBzdGFjay5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IHBhcnNlU2luZ2xlRkZPclNhZmFyaVN0YWNrKGxpbmUpKS5maWx0ZXIobm90TnVsbGlzaCk7XG59XG5mdW5jdGlvbiBwYXJzZVY4U3RhY2t0cmFjZShzdGFjaykge1xuXHRyZXR1cm4gc3RhY2suc3BsaXQoXCJcXG5cIikubWFwKChsaW5lKSA9PiBwYXJzZVNpbmdsZVY4U3RhY2sobGluZSkpLmZpbHRlcihub3ROdWxsaXNoKTtcbn1cbmZ1bmN0aW9uIHBhcnNlRXJyb3JTdGFja3RyYWNlKGUsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoIWUgfHwgaXNQcmltaXRpdmUoZSkpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKFwic3RhY2tzXCIgaW4gZSAmJiBlLnN0YWNrcykge1xuXHRcdHJldHVybiBlLnN0YWNrcztcblx0fVxuXHRjb25zdCBzdGFja1N0ciA9IGUuc3RhY2sgfHwgXCJcIjtcblx0Ly8gaWYgXCJzdGFja1wiIHByb3BlcnR5IHdhcyBvdmVyd3JpdHRlbiBhdCBydW50aW1lIHRvIGJlIHNvbWV0aGluZyBlbHNlLFxuXHQvLyBpZ25vcmUgdGhlIHZhbHVlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBob3cgdG8gcHJvY2VzcyBpdFxuXHRsZXQgc3RhY2tGcmFtZXMgPSB0eXBlb2Ygc3RhY2tTdHIgPT09IFwic3RyaW5nXCIgPyBwYXJzZVN0YWNrdHJhY2Uoc3RhY2tTdHIsIG9wdGlvbnMpIDogW107XG5cdGlmICghc3RhY2tGcmFtZXMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgZV8gPSBlO1xuXHRcdGlmIChlXy5maWxlTmFtZSAhPSBudWxsICYmIGVfLmxpbmVOdW1iZXIgIT0gbnVsbCAmJiBlXy5jb2x1bW5OdW1iZXIgIT0gbnVsbCkge1xuXHRcdFx0c3RhY2tGcmFtZXMgPSBwYXJzZVN0YWNrdHJhY2UoYCR7ZV8uZmlsZU5hbWV9OiR7ZV8ubGluZU51bWJlcn06JHtlXy5jb2x1bW5OdW1iZXJ9YCwgb3B0aW9ucyk7XG5cdFx0fVxuXHRcdGlmIChlXy5zb3VyY2VVUkwgIT0gbnVsbCAmJiBlXy5saW5lICE9IG51bGwgJiYgZV8uX2NvbHVtbiAhPSBudWxsKSB7XG5cdFx0XHRzdGFja0ZyYW1lcyA9IHBhcnNlU3RhY2t0cmFjZShgJHtlXy5zb3VyY2VVUkx9OiR7ZV8ubGluZX06JHtlXy5jb2x1bW59YCwgb3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zLmZyYW1lRmlsdGVyKSB7XG5cdFx0c3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIoKGYpID0+IG9wdGlvbnMuZnJhbWVGaWx0ZXIoZSwgZikgIT09IGZhbHNlKTtcblx0fVxuXHRlLnN0YWNrcyA9IHN0YWNrRnJhbWVzO1xuXHRyZXR1cm4gc3RhY2tGcmFtZXM7XG59XG5jbGFzcyBEZWNvZGVkTWFwIHtcblx0X2VuY29kZWQ7XG5cdF9kZWNvZGVkO1xuXHRfZGVjb2RlZE1lbW87XG5cdHVybDtcblx0dmVyc2lvbjtcblx0bmFtZXMgPSBbXTtcblx0cmVzb2x2ZWRTb3VyY2VzO1xuXHRjb25zdHJ1Y3RvcihtYXAsIGZyb20pIHtcblx0XHR0aGlzLm1hcCA9IG1hcDtcblx0XHRjb25zdCB7IG1hcHBpbmdzLCBuYW1lcywgc291cmNlcyB9ID0gbWFwO1xuXHRcdHRoaXMudmVyc2lvbiA9IG1hcC52ZXJzaW9uO1xuXHRcdHRoaXMubmFtZXMgPSBuYW1lcyB8fCBbXTtcblx0XHR0aGlzLl9lbmNvZGVkID0gbWFwcGluZ3MgfHwgXCJcIjtcblx0XHR0aGlzLl9kZWNvZGVkTWVtbyA9IG1lbW9pemVkU3RhdGUoKTtcblx0XHR0aGlzLnVybCA9IGZyb207XG5cdFx0dGhpcy5yZXNvbHZlZFNvdXJjZXMgPSAoc291cmNlcyB8fCBbXSkubWFwKChzKSA9PiByZXNvbHZlKGZyb20sIFwiLi5cIiwgcyB8fCBcIlwiKSk7XG5cdH1cbn1cbmZ1bmN0aW9uIG1lbW9pemVkU3RhdGUoKSB7XG5cdHJldHVybiB7XG5cdFx0bGFzdEtleTogLTEsXG5cdFx0bGFzdE5lZWRsZTogLTEsXG5cdFx0bGFzdEluZGV4OiAtMVxuXHR9O1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxQb3NpdGlvbihtYXAsIG5lZWRsZSkge1xuXHRjb25zdCByZXN1bHQgPSBvcmlnaW5hbFBvc2l0aW9uRm9yKG1hcCwgbmVlZGxlKTtcblx0aWYgKHJlc3VsdC5jb2x1bW4gPT0gbnVsbCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7IERlY29kZWRNYXAsIGNyZWF0ZVN0YWNrU3RyaW5nLCBzdGFja0lnbm9yZVBhdHRlcm5zIGFzIGRlZmF1bHRTdGFja0lnbm9yZVBhdHRlcm5zLCBnZXRPcmlnaW5hbFBvc2l0aW9uLCBwYXJzZUVycm9yU3RhY2t0cmFjZSwgcGFyc2VTaW5nbGVGRk9yU2FmYXJpU3RhY2ssIHBhcnNlU2luZ2xlU3RhY2ssIHBhcnNlU2luZ2xlVjhTdGFjaywgcGFyc2VTdGFja3RyYWNlIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLElBQUksUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUM3QixJQUFJLFFBQVE7QUFDWixJQUFJLFlBQVksSUFBSSxXQUFXLEdBQUc7QUFDbEMsSUFBSSxZQUFZLElBQUksV0FBVyxJQUFJO0FBQ25DLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztDQUNyQyxNQUFNLElBQUksTUFBTSxXQUFXLEVBQUU7QUFDN0IsV0FBVSxLQUFLO0FBQ2YsV0FBVSxLQUFLOztBQUVqQixTQUFTLGNBQWMsUUFBUSxVQUFVO0NBQ3ZDLElBQUksUUFBUTtDQUNaLElBQUksUUFBUTtDQUNaLElBQUksVUFBVTtBQUNkLElBQUc7QUFFRCxZQUFVLFVBREEsT0FBTyxNQUFNO0FBRXZCLFlBQVUsVUFBVSxPQUFPO0FBQzNCLFdBQVM7VUFDRixVQUFVO0NBQ25CLE1BQU0sZUFBZSxRQUFRO0FBQzdCLFlBQVc7QUFDWCxLQUFJLGFBQ0YsU0FBUSxjQUFjLENBQUM7QUFFekIsUUFBTyxXQUFXOztBQUVwQixTQUFTLFdBQVcsUUFBUSxLQUFLO0FBQy9CLEtBQUksT0FBTyxPQUFPLElBQUssUUFBTztBQUM5QixRQUFPLE9BQU8sTUFBTSxLQUFLOztBQUUzQixJQUFJLGVBQWUsTUFBTTtDQUN2QixZQUFZLFFBQVE7QUFDbEIsT0FBSyxNQUFNO0FBQ1gsT0FBSyxTQUFTOztDQUVoQixPQUFPO0FBQ0wsU0FBTyxLQUFLLE9BQU8sV0FBVyxLQUFLLE1BQU07O0NBRTNDLE9BQU87QUFDTCxTQUFPLEtBQUssT0FBTyxXQUFXLEtBQUssSUFBSTs7Q0FFekMsUUFBUSxNQUFNO0VBQ1osTUFBTSxF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
@@ -0,0 +1,37 @@
1
+ //#region ../../node_modules/.pnpm/@vitest+utils@4.1.2/node_modules/@vitest/utils/dist/timers.js
2
+ const SAFE_TIMERS_SYMBOL = Symbol("vitest:SAFE_TIMERS");
3
+ function getSafeTimers() {
4
+ const { setTimeout: safeSetTimeout, setInterval: safeSetInterval, clearInterval: safeClearInterval, clearTimeout: safeClearTimeout, setImmediate: safeSetImmediate, clearImmediate: safeClearImmediate, queueMicrotask: safeQueueMicrotask } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis;
5
+ const { nextTick: safeNextTick } = globalThis[SAFE_TIMERS_SYMBOL] || globalThis.process || {};
6
+ return {
7
+ nextTick: safeNextTick,
8
+ setTimeout: safeSetTimeout,
9
+ setInterval: safeSetInterval,
10
+ clearInterval: safeClearInterval,
11
+ clearTimeout: safeClearTimeout,
12
+ setImmediate: safeSetImmediate,
13
+ clearImmediate: safeClearImmediate,
14
+ queueMicrotask: safeQueueMicrotask
15
+ };
16
+ }
17
+ /**
18
+ * Returns a promise that resolves after the specified duration.
19
+ *
20
+ * @param timeout - Delay in milliseconds
21
+ * @param scheduler - Timer function to use, defaults to `setTimeout`. Useful for mocked timers.
22
+ *
23
+ * @example
24
+ * await delay(100)
25
+ *
26
+ * @example
27
+ * // With mocked timers
28
+ * const { setTimeout } = getSafeTimers()
29
+ * await delay(100, setTimeout)
30
+ */
31
+ function delay(timeout, scheduler = setTimeout) {
32
+ return new Promise((resolve) => scheduler(resolve, timeout));
33
+ }
34
+ //#endregion
35
+ export { delay, getSafeTimers };
36
+
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXJzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Adml0ZXN0K3V0aWxzQDQuMS4yL25vZGVfbW9kdWxlcy9Adml0ZXN0L3V0aWxzL2Rpc3QvdGltZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNBRkVfVElNRVJTX1NZTUJPTCA9IFN5bWJvbChcInZpdGVzdDpTQUZFX1RJTUVSU1wiKTtcbmZ1bmN0aW9uIGdldFNhZmVUaW1lcnMoKSB7XG5cdGNvbnN0IHsgc2V0VGltZW91dDogc2FmZVNldFRpbWVvdXQsIHNldEludGVydmFsOiBzYWZlU2V0SW50ZXJ2YWwsIGNsZWFySW50ZXJ2YWw6IHNhZmVDbGVhckludGVydmFsLCBjbGVhclRpbWVvdXQ6IHNhZmVDbGVhclRpbWVvdXQsIHNldEltbWVkaWF0ZTogc2FmZVNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGU6IHNhZmVDbGVhckltbWVkaWF0ZSwgcXVldWVNaWNyb3Rhc2s6IHNhZmVRdWV1ZU1pY3JvdGFzayB9ID0gZ2xvYmFsVGhpc1tTQUZFX1RJTUVSU19TWU1CT0xdIHx8IGdsb2JhbFRoaXM7XG5cdGNvbnN0IHsgbmV4dFRpY2s6IHNhZmVOZXh0VGljayB9ID0gZ2xvYmFsVGhpc1tTQUZFX1RJTUVSU19TWU1CT0xdIHx8IGdsb2JhbFRoaXMucHJvY2VzcyB8fCB7fTtcblx0cmV0dXJuIHtcblx0XHRuZXh0VGljazogc2FmZU5leHRUaWNrLFxuXHRcdHNldFRpbWVvdXQ6IHNhZmVTZXRUaW1lb3V0LFxuXHRcdHNldEludGVydmFsOiBzYWZlU2V0SW50ZXJ2YWwsXG5cdFx0Y2xlYXJJbnRlcnZhbDogc2FmZUNsZWFySW50ZXJ2YWwsXG5cdFx0Y2xlYXJUaW1lb3V0OiBzYWZlQ2xlYXJUaW1lb3V0LFxuXHRcdHNldEltbWVkaWF0ZTogc2FmZVNldEltbWVkaWF0ZSxcblx0XHRjbGVhckltbWVkaWF0ZTogc2FmZUNsZWFySW1tZWRpYXRlLFxuXHRcdHF1ZXVlTWljcm90YXNrOiBzYWZlUXVldWVNaWNyb3Rhc2tcblx0fTtcbn1cbmZ1bmN0aW9uIHNldFNhZmVUaW1lcnMoKSB7XG5cdGNvbnN0IHsgc2V0VGltZW91dDogc2FmZVNldFRpbWVvdXQsIHNldEludGVydmFsOiBzYWZlU2V0SW50ZXJ2YWwsIGNsZWFySW50ZXJ2YWw6IHNhZmVDbGVhckludGVydmFsLCBjbGVhclRpbWVvdXQ6IHNhZmVDbGVhclRpbWVvdXQsIHNldEltbWVkaWF0ZTogc2FmZVNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGU6IHNhZmVDbGVhckltbWVkaWF0ZSwgcXVldWVNaWNyb3Rhc2s6IHNhZmVRdWV1ZU1pY3JvdGFzayB9ID0gZ2xvYmFsVGhpcztcblx0Y29uc3QgeyBuZXh0VGljazogc2FmZU5leHRUaWNrIH0gPSBnbG9iYWxUaGlzLnByb2Nlc3MgfHwge307XG5cdGNvbnN0IHRpbWVycyA9IHtcblx0XHRuZXh0VGljazogc2FmZU5leHRUaWNrLFxuXHRcdHNldFRpbWVvdXQ6IHNhZmVTZXRUaW1lb3V0LFxuXHRcdHNldEludGVydmFsOiBzYWZlU2V0SW50ZXJ2YWwsXG5cdFx0Y2xlYXJJbnRlcnZhbDogc2FmZUNsZWFySW50ZXJ2YWwsXG5cdFx0Y2xlYXJUaW1lb3V0OiBzYWZlQ2xlYXJUaW1lb3V0LFxuXHRcdHNldEltbWVkaWF0ZTogc2FmZVNldEltbWVkaWF0ZSxcblx0XHRjbGVhckltbWVkaWF0ZTogc2FmZUNsZWFySW1tZWRpYXRlLFxuXHRcdHF1ZXVlTWljcm90YXNrOiBzYWZlUXVldWVNaWNyb3Rhc2tcblx0fTtcblx0Z2xvYmFsVGhpc1tTQUZFX1RJTUVSU19TWU1CT0xdID0gdGltZXJzO1xufVxuLyoqXG4qIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi5cbipcbiogQHBhcmFtIHRpbWVvdXQgLSBEZWxheSBpbiBtaWxsaXNlY29uZHNcbiogQHBhcmFtIHNjaGVkdWxlciAtIFRpbWVyIGZ1bmN0aW9uIHRvIHVzZSwgZGVmYXVsdHMgdG8gYHNldFRpbWVvdXRgLiBVc2VmdWwgZm9yIG1vY2tlZCB0aW1lcnMuXG4qXG4qIEBleGFtcGxlXG4qIGF3YWl0IGRlbGF5KDEwMClcbipcbiogQGV4YW1wbGVcbiogLy8gV2l0aCBtb2NrZWQgdGltZXJzXG4qIGNvbnN0IHsgc2V0VGltZW91dCB9ID0gZ2V0U2FmZVRpbWVycygpXG4qIGF3YWl0IGRlbGF5KDEwMCwgc2V0VGltZW91dClcbiovXG5mdW5jdGlvbiBkZWxheSh0aW1lb3V0LCBzY2hlZHVsZXIgPSBzZXRUaW1lb3V0KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2NoZWR1bGVyKHJlc29sdmUsIHRpbWVvdXQpKTtcbn1cblxuZXhwb3J0IHsgZGVsYXksIGdldFNhZmVUaW1lcnMsIHNldFNhZmVUaW1lcnMgfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxxQkFBcUIsT0FBTyxxQkFBcUI7QUFDdkQsU0FBUyxnQkFBZ0I7Q0FDeEIsTUFBTSxFQUFFLFlBQVksZ0JBQWdCLGFBQWEsaUJBQWlCLGVBQWUsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsa0JBQWtCLGdCQUFnQixvQkFBb0IsZ0JBQWdCLHVCQUF1QixXQUFXLHVCQUF1QjtDQUNqUixNQUFNLEVBQUUsVUFBVSxpQkFBaUIsV0FBVyx1QkFBdUIsV0FBVyxXQUFXLEVBQUU7QUFDN0YsUUFBTztFQUNOLFVBQVU7RUFDVixZQUFZO0VBQ1osYUFBYTtFQUNiLGVBQWU7RUFDZixjQUFjO0VBQ2QsY0FBYztFQUNkLGdCQUFnQjtFQUNoQixnQkFBZ0I7RUFDaEI7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQkYsU0FBUyxNQUFNLFNBQVMsWUFBWSxZQUFZO0FBQy9DLFFBQU8sSUFBSSxTQUFTLFlBQVksVUFBVSxTQUFTLFFBQVEsQ0FBQyJ9