@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.
- package/bundle/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
- package/bundle/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +6 -0
- package/bundle/dist/_virtual/_rolldown/runtime.js +15 -0
- package/bundle/dist/application/qgrid/oauth.js +140 -0
- package/bundle/dist/application/qgrid/pool.js +100 -0
- package/bundle/dist/application/qgrid/qgrid.frame.js +280 -0
- package/bundle/dist/application/qgrid/qgrid.types.js +79 -0
- package/bundle/dist/application/qgrid/worker.js +183 -0
- package/bundle/dist/application/queries.generated.js +31 -0
- package/bundle/dist/application/request-log/request-log.model.js +113 -0
- package/bundle/dist/application/request-log/request-log.types.js +13 -0
- package/bundle/dist/application/sonamu.generated.js +99 -0
- package/bundle/dist/application/sonamu.generated.sso.js +34 -0
- package/bundle/dist/application/token/token.model.js +157 -0
- package/bundle/dist/application/token/token.types.js +22 -0
- package/bundle/dist/i18n/en.js +63 -0
- package/bundle/dist/i18n/ko.js +62 -0
- package/bundle/dist/i18n/sd.generated.js +272 -0
- package/bundle/dist/index.js +11 -0
- package/bundle/dist/migrations/20260410171405_create__request_logs.js +26 -0
- package/bundle/dist/migrations/20260410171406_create__tokens.js +24 -0
- package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +16 -0
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +155 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +1484 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +887 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +2746 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +662 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +386 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +48 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +1307 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +558 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +33 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +226 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +374 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +37 -0
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +2886 -0
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +10 -0
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +109 -0
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +10 -0
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +10 -0
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +10 -0
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +1127 -0
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +21 -0
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +432 -0
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +506 -0
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +86 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/bundle/dist/sonamu.config.js +196 -0
- package/bundle/dist/testing/fixture.js +8 -0
- package/bundle/dist/testing/global.js +9 -0
- package/bundle/dist/testing/setup-mocks.js +17 -0
- package/bundle/dist/utils/subset-loaders.js +12 -0
- package/bundle/src/application/request-log/request-log.entity.json +75 -0
- package/bundle/src/application/token/token.entity.json +37 -0
- package/bundle/src/migrations/20260410171405_create__request_logs.ts +23 -0
- package/bundle/src/migrations/20260410171406_create__tokens.ts +21 -0
- package/bundle/src/migrations/20260411120624_alter_tokens_alter2.ts +15 -0
- package/bundle/web-dist/client/assets/index-DlPchHBY.js +116 -0
- package/bundle/web-dist/client/assets/index-vZsvyuFn.css +1 -0
- package/bundle/web-dist/client/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
- package/bundle/web-dist/client/assets/routes-CagDz23B.js +1 -0
- package/bundle/web-dist/client/assets/sd.generated-BrQoQXvv.js +47 -0
- package/bundle/web-dist/client/assets/services.generated-BspO2L0j.js +1 -0
- package/bundle/web-dist/client/assets/show-aXUGa0gm.js +29 -0
- package/bundle/web-dist/client/assets/tokens-DRkXtZ3Q.js +1 -0
- package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +9 -0
- package/bundle/web-dist/client/assets/vendor-tanstack-CUxlo6YN.js +1 -0
- package/bundle/web-dist/client/index.html +18 -0
- package/bundle/web-dist/server/assets/react-dom-CGIzOSuj.js +335 -0
- package/bundle/web-dist/server/assets/routes-ClzReRep.js +490 -0
- package/bundle/web-dist/server/assets/sd.generated-BnonqqKr.js +21694 -0
- package/bundle/web-dist/server/assets/services.generated-D5ABD5fr.js +836 -0
- package/bundle/web-dist/server/assets/show-C9pcdSxc.js +23364 -0
- package/bundle/web-dist/server/assets/tokens-JH6FsnWZ.js +860 -0
- package/bundle/web-dist/server/entry-server.generated.js +44646 -0
- package/dist/cli.js +38 -89
- 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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
|
package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js
ADDED
|
@@ -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
|