@mnaoumov/typescript-lib 0.0.0 → 1.0.0

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 (180) hide show
  1. package/@types/debug/package.json +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -1
  4. package/dist/lib/cjs/@types/debug.d.cts +21 -0
  5. package/dist/lib/cjs/abort-controller.cjs +202 -0
  6. package/dist/lib/cjs/abort-controller.d.cts +135 -0
  7. package/dist/lib/cjs/aggregate-error.cjs +98 -0
  8. package/dist/lib/cjs/aggregate-error.d.cts +24 -0
  9. package/dist/lib/cjs/array-buffer.cjs +96 -0
  10. package/dist/lib/cjs/array-buffer.d.cts +16 -0
  11. package/dist/lib/cjs/array.cjs +134 -0
  12. package/dist/lib/cjs/array.d.cts +46 -0
  13. package/dist/lib/cjs/async-events.cjs +466 -0
  14. package/dist/lib/cjs/async-events.d.cts +456 -0
  15. package/dist/lib/cjs/async-operation-hook.cjs +113 -0
  16. package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
  17. package/dist/lib/cjs/async.cjs +521 -0
  18. package/dist/lib/cjs/async.d.cts +414 -0
  19. package/dist/lib/cjs/beeper.cjs +126 -0
  20. package/dist/lib/cjs/beeper.d.cts +21 -0
  21. package/dist/lib/cjs/blob.cjs +160 -0
  22. package/dist/lib/cjs/blob.d.cts +59 -0
  23. package/dist/lib/cjs/bytes.cjs +114 -0
  24. package/dist/lib/cjs/bytes.d.cts +17 -0
  25. package/dist/lib/cjs/debug-controller.cjs +80 -0
  26. package/dist/lib/cjs/debug-controller.d.cts +87 -0
  27. package/dist/lib/cjs/debug.cjs +235 -0
  28. package/dist/lib/cjs/debug.d.cts +66 -0
  29. package/dist/lib/cjs/desktop-zip-extractor.cjs +215 -0
  30. package/dist/lib/cjs/desktop-zip-extractor.d.cts +95 -0
  31. package/dist/lib/cjs/disposable.cjs +414 -0
  32. package/dist/lib/cjs/disposable.d.cts +387 -0
  33. package/dist/lib/cjs/enum.cjs +100 -0
  34. package/dist/lib/cjs/enum.d.cts +24 -0
  35. package/dist/lib/cjs/error.cjs +297 -0
  36. package/dist/lib/cjs/error.d.cts +181 -0
  37. package/dist/lib/cjs/function.cjs +141 -0
  38. package/dist/lib/cjs/function.d.cts +128 -0
  39. package/dist/lib/cjs/html-element.cjs +341 -0
  40. package/dist/lib/cjs/html-element.d.cts +199 -0
  41. package/dist/lib/cjs/index.cjs +195 -0
  42. package/dist/lib/cjs/index.d.cts +33 -0
  43. package/dist/lib/cjs/jpeg-metadata.cjs +228 -0
  44. package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
  45. package/dist/lib/cjs/library.cjs +158 -0
  46. package/dist/lib/cjs/library.d.cts +96 -0
  47. package/dist/lib/cjs/object-utils.cjs +617 -0
  48. package/dist/lib/cjs/object-utils.d.cts +298 -0
  49. package/dist/lib/cjs/path.cjs +202 -0
  50. package/dist/lib/cjs/path.d.cts +154 -0
  51. package/dist/lib/cjs/reg-exp.cjs +254 -0
  52. package/dist/lib/cjs/reg-exp.d.cts +87 -0
  53. package/dist/lib/cjs/string.cjs +326 -0
  54. package/dist/lib/cjs/string.d.cts +361 -0
  55. package/dist/lib/cjs/transformers/date-transformer.cjs +129 -0
  56. package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
  57. package/dist/lib/cjs/transformers/group-transformer.cjs +173 -0
  58. package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
  59. package/dist/lib/cjs/transformers/index.cjs +123 -0
  60. package/dist/lib/cjs/transformers/index.d.cts +9 -0
  61. package/dist/lib/cjs/transformers/map-transformer.cjs +129 -0
  62. package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
  63. package/dist/lib/cjs/transformers/set-transformer.cjs +129 -0
  64. package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
  65. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +127 -0
  66. package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
  67. package/dist/lib/cjs/transformers/transformer.cjs +170 -0
  68. package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
  69. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +130 -0
  70. package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
  71. package/dist/lib/cjs/transformers/typed-transformer.cjs +94 -0
  72. package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
  73. package/dist/lib/cjs/two-way-map.cjs +208 -0
  74. package/dist/lib/cjs/two-way-map.d.cts +101 -0
  75. package/dist/lib/cjs/type-guards.cjs +128 -0
  76. package/dist/lib/cjs/type-guards.d.cts +84 -0
  77. package/dist/lib/cjs/type.cjs +121 -0
  78. package/dist/lib/cjs/type.d.cts +122 -0
  79. package/dist/lib/cjs/typescript-lib-state.cjs +126 -0
  80. package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
  81. package/dist/lib/cjs/url.cjs +136 -0
  82. package/dist/lib/cjs/url.d.cts +74 -0
  83. package/dist/lib/cjs/value-provider.cjs +100 -0
  84. package/dist/lib/cjs/value-provider.d.cts +28 -0
  85. package/dist/lib/cjs/value-wrapper.cjs +144 -0
  86. package/dist/lib/cjs/value-wrapper.d.cts +47 -0
  87. package/dist/lib/esm/@types/debug.d.mts +21 -0
  88. package/dist/lib/esm/abort-controller.d.mts +135 -0
  89. package/dist/lib/esm/abort-controller.mjs +159 -0
  90. package/dist/lib/esm/aggregate-error.d.mts +24 -0
  91. package/dist/lib/esm/aggregate-error.mjs +60 -0
  92. package/dist/lib/esm/array-buffer.d.mts +16 -0
  93. package/dist/lib/esm/array-buffer.mjs +58 -0
  94. package/dist/lib/esm/array.d.mts +46 -0
  95. package/dist/lib/esm/array.mjs +93 -0
  96. package/dist/lib/esm/async-events.d.mts +456 -0
  97. package/dist/lib/esm/async-events.mjs +427 -0
  98. package/dist/lib/esm/async-operation-hook.d.mts +59 -0
  99. package/dist/lib/esm/async-operation-hook.mjs +71 -0
  100. package/dist/lib/esm/async.d.mts +414 -0
  101. package/dist/lib/esm/async.mjs +479 -0
  102. package/dist/lib/esm/beeper.d.mts +21 -0
  103. package/dist/lib/esm/beeper.mjs +88 -0
  104. package/dist/lib/esm/blob.d.mts +59 -0
  105. package/dist/lib/esm/blob.mjs +121 -0
  106. package/dist/lib/esm/bytes.d.mts +17 -0
  107. package/dist/lib/esm/bytes.mjs +76 -0
  108. package/dist/lib/esm/debug-controller.d.mts +87 -0
  109. package/dist/lib/esm/debug-controller.mjs +50 -0
  110. package/dist/lib/esm/debug.d.mts +66 -0
  111. package/dist/lib/esm/debug.mjs +185 -0
  112. package/dist/lib/esm/desktop-zip-extractor.d.mts +95 -0
  113. package/dist/lib/esm/desktop-zip-extractor.mjs +180 -0
  114. package/dist/lib/esm/disposable.d.mts +387 -0
  115. package/dist/lib/esm/disposable.mjs +360 -0
  116. package/dist/lib/esm/enum.d.mts +24 -0
  117. package/dist/lib/esm/enum.mjs +61 -0
  118. package/dist/lib/esm/error.d.mts +181 -0
  119. package/dist/lib/esm/error.mjs +248 -0
  120. package/dist/lib/esm/function.d.mts +128 -0
  121. package/dist/lib/esm/function.mjs +96 -0
  122. package/dist/lib/esm/html-element.d.mts +199 -0
  123. package/dist/lib/esm/html-element.mjs +291 -0
  124. package/dist/lib/esm/index.d.mts +33 -0
  125. package/dist/lib/esm/index.mjs +116 -0
  126. package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
  127. package/dist/lib/esm/jpeg-metadata.mjs +189 -0
  128. package/dist/lib/esm/library.d.mts +96 -0
  129. package/dist/lib/esm/library.mjs +118 -0
  130. package/dist/lib/esm/object-utils.d.mts +298 -0
  131. package/dist/lib/esm/object-utils.mjs +567 -0
  132. package/dist/lib/esm/path.d.mts +154 -0
  133. package/dist/lib/esm/path.mjs +139 -0
  134. package/dist/lib/esm/reg-exp.d.mts +87 -0
  135. package/dist/lib/esm/reg-exp.mjs +213 -0
  136. package/dist/lib/esm/string.d.mts +361 -0
  137. package/dist/lib/esm/string.mjs +274 -0
  138. package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
  139. package/dist/lib/esm/transformers/date-transformer.mjs +91 -0
  140. package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
  141. package/dist/lib/esm/transformers/group-transformer.mjs +138 -0
  142. package/dist/lib/esm/transformers/index.d.mts +9 -0
  143. package/dist/lib/esm/transformers/index.mjs +68 -0
  144. package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
  145. package/dist/lib/esm/transformers/map-transformer.mjs +91 -0
  146. package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
  147. package/dist/lib/esm/transformers/set-transformer.mjs +91 -0
  148. package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
  149. package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +89 -0
  150. package/dist/lib/esm/transformers/transformer.d.mts +70 -0
  151. package/dist/lib/esm/transformers/transformer.mjs +132 -0
  152. package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
  153. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +92 -0
  154. package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
  155. package/dist/lib/esm/transformers/typed-transformer.mjs +56 -0
  156. package/dist/lib/esm/two-way-map.d.mts +101 -0
  157. package/dist/lib/esm/two-way-map.mjs +170 -0
  158. package/dist/lib/esm/type-guards.d.mts +84 -0
  159. package/dist/lib/esm/type-guards.mjs +85 -0
  160. package/dist/lib/esm/type.d.mts +122 -0
  161. package/dist/lib/esm/type.mjs +83 -0
  162. package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
  163. package/dist/lib/esm/typescript-lib-state.mjs +84 -0
  164. package/dist/lib/esm/url.d.mts +74 -0
  165. package/dist/lib/esm/url.mjs +94 -0
  166. package/dist/lib/esm/value-provider.d.mts +28 -0
  167. package/dist/lib/esm/value-provider.mjs +62 -0
  168. package/dist/lib/esm/value-wrapper.d.mts +47 -0
  169. package/dist/lib/esm/value-wrapper.mjs +106 -0
  170. package/package.json +111 -13
  171. package/transformers/date-transformer/package.json +6 -0
  172. package/transformers/group-transformer/package.json +6 -0
  173. package/transformers/index/package.json +6 -0
  174. package/transformers/map-transformer/package.json +6 -0
  175. package/transformers/package.json +6 -0
  176. package/transformers/set-transformer/package.json +6 -0
  177. package/transformers/skip-private-property-transformer/package.json +6 -0
  178. package/transformers/transformer/package.json +6 -0
  179. package/transformers/two-way-map-transformer/package.json +6 -0
  180. package/transformers/typed-transformer/package.json +6 -0
@@ -0,0 +1,297 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
+ symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return '/';
17
+ },
18
+ env: {},
19
+ platform: 'android'
20
+ };
21
+
22
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
+ const existingProcess = globalThis.process;
24
+
25
+ if (!existingProcess) {
26
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
+ globalThis.process = browserProcess;
28
+ return;
29
+ }
30
+
31
+ if (existingProcess.versions?.node) {
32
+ return;
33
+ }
34
+
35
+ const existingProcessRecord = existingProcess;
36
+
37
+ for (const [key, value] of Object.entries(browserProcess)) {
38
+ existingProcessRecord[key] ??= value;
39
+ }
40
+
41
+ existingProcessRecord['browser'] = true;
42
+ }
43
+
44
+ function keepName($unknown) {
45
+ return $unknown;
46
+ }
47
+
48
+ (function initCjs() {
49
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
+ const globalThisRecord = globalThis;
51
+ ensureDisposeSymbols();
52
+ globalThisRecord['__name'] ??= keepName;
53
+ globalThisRecord['__extractDefault'] ??= extractDefault;
54
+
55
+ ensureBrowserProcess();
56
+
57
+ // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
+ function extractDefault(module) {
59
+ return module && module.__esModule && 'default' in module ? module.default : module;
60
+ }
61
+ })();
62
+ })();
63
+
64
+ "use strict";
65
+ var __defProp = Object.defineProperty;
66
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
67
+ var __getOwnPropNames = Object.getOwnPropertyNames;
68
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
69
+ var __export = (target, all) => {
70
+ for (var name in all)
71
+ __defProp(target, name, { get: all[name], enumerable: true });
72
+ };
73
+ var __copyProps = (to, from, except, desc) => {
74
+ if (from && typeof from === "object" || typeof from === "function") {
75
+ for (let key of __getOwnPropNames(from))
76
+ if (!__hasOwnProp.call(to, key) && key !== except)
77
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
78
+ }
79
+ return to;
80
+ };
81
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
82
+ var error_exports = {};
83
+ __export(error_exports, {
84
+ ASYNC_WRAPPER_ERROR_MESSAGE: () => ASYNC_WRAPPER_ERROR_MESSAGE,
85
+ CustomStackTraceError: () => CustomStackTraceError,
86
+ ErrorWrapper: () => ErrorWrapper,
87
+ SilentError: () => SilentError,
88
+ drainCollectedUnhandledAsyncErrors: () => drainCollectedUnhandledAsyncErrors,
89
+ emitAsyncErrorEvent: () => emitAsyncErrorEvent,
90
+ errorToString: () => errorToString,
91
+ getStackTrace: () => getStackTrace,
92
+ isAsyncErrorIgnoreContextActive: () => isAsyncErrorIgnoreContextActive,
93
+ printError: () => printError,
94
+ registerAsyncErrorEventHandler: () => registerAsyncErrorEventHandler,
95
+ startAsyncErrorIgnoreContext: () => startAsyncErrorIgnoreContext,
96
+ startCollectingUnhandledAsyncErrors: () => startCollectingUnhandledAsyncErrors,
97
+ stopCollectingUnhandledAsyncErrors: () => stopCollectingUnhandledAsyncErrors,
98
+ throwExpression: () => throwExpression
99
+ });
100
+ module.exports = __toCommonJS(error_exports);
101
+ var import_async_events = require('./async-events.cjs');
102
+ var import_disposable = require('./disposable.cjs');
103
+ var import_type_guards = require('./type-guards.cjs');
104
+ const errorAsyncEvents = new import_async_events.AsyncEvents();
105
+ errorAsyncEvents.on("asyncError", handleAsyncError);
106
+ const moduleState = {
107
+ asyncErrorIgnoreContextDepth: 0,
108
+ collectedUnhandledAsyncErrors: null
109
+ };
110
+ const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
111
+ const STACK_TRACE_PREFIX = " at";
112
+ const ERROR_HEADER_REG_EXP = /^\w*Error(?:: |$)/;
113
+ const STACK_HEADER_PROBE_MESSAGE = "stack header probe";
114
+ class CustomStackTraceError extends Error {
115
+ /**
116
+ * Creates a new CustomStackTraceError.
117
+ *
118
+ * @param params - The parameters for the error.
119
+ */
120
+ constructor(params) {
121
+ const { cause, message, stackTrace } = params;
122
+ super(message, { cause });
123
+ this.name = "CustomStackTraceError";
124
+ let rootCause = cause;
125
+ const parentCauses = /* @__PURE__ */ new Set();
126
+ while (rootCause instanceof CustomStackTraceError) {
127
+ if (parentCauses.has(rootCause)) {
128
+ throw new Error("Circular cause detected");
129
+ }
130
+ parentCauses.add(rootCause);
131
+ rootCause = rootCause.cause;
132
+ }
133
+ const stackLines = stackTrace.split("\n");
134
+ if (ERROR_HEADER_REG_EXP.test((0, import_type_guards.ensureNonNullable)(stackLines[0]))) {
135
+ stackLines.shift();
136
+ }
137
+ if (hasStackHeader()) {
138
+ stackLines.unshift(getErrorHeader(this));
139
+ }
140
+ this.stack = stackLines.join("\n");
141
+ }
142
+ }
143
+ class ErrorWrapper extends Error {
144
+ /**
145
+ * Creates a new ErrorWrapper.
146
+ *
147
+ * @param thrownValue - The original non-`Error` value that was thrown.
148
+ */
149
+ constructor(thrownValue) {
150
+ super(`A non-Error value was thrown: ${String(thrownValue)}`, { cause: thrownValue });
151
+ this.name = "ErrorWrapper";
152
+ }
153
+ /**
154
+ * Normalizes any thrown value to an `Error`.
155
+ *
156
+ * Returns the value unchanged if it is already an `Error`, otherwise wraps it in an {@link ErrorWrapper}.
157
+ *
158
+ * @param thrownValue - The thrown value to normalize.
159
+ * @returns An `Error` instance: the original value if it is already an `Error`, otherwise an {@link ErrorWrapper}.
160
+ */
161
+ static create(thrownValue) {
162
+ return thrownValue instanceof Error ? thrownValue : new ErrorWrapper(thrownValue);
163
+ }
164
+ }
165
+ class SilentError extends Error {
166
+ /**
167
+ * Creates a new SilentError.
168
+ *
169
+ * @param message - The message of the error.
170
+ */
171
+ constructor(message) {
172
+ super(message);
173
+ this.name = "SilentError";
174
+ }
175
+ }
176
+ function drainCollectedUnhandledAsyncErrors() {
177
+ return moduleState.collectedUnhandledAsyncErrors?.splice(0) ?? [];
178
+ }
179
+ function emitAsyncErrorEvent(asyncError, shouldIgnore = false) {
180
+ const isIgnored = shouldIgnore || moduleState.asyncErrorIgnoreContextDepth > 0;
181
+ if (moduleState.collectedUnhandledAsyncErrors && !isIgnored) {
182
+ moduleState.collectedUnhandledAsyncErrors.push(asyncError);
183
+ }
184
+ errorAsyncEvents.trigger("asyncError", asyncError);
185
+ }
186
+ function errorToString(error) {
187
+ return getErrorLines(error).map((line) => line.text).join("\n");
188
+ }
189
+ function getStackTrace(framesToSkip = 0) {
190
+ const GET_STACK_TRACE_FRAME_COUNT = 1;
191
+ const additionalLinesToSkip = GET_STACK_TRACE_FRAME_COUNT + (hasStackHeader() ? 1 : 0);
192
+ const stack = (0, import_type_guards.ensureNonNullable)(new Error().stack);
193
+ const lines = stack.split("\n");
194
+ return lines.slice(framesToSkip + additionalLinesToSkip).join("\n");
195
+ }
196
+ function isAsyncErrorIgnoreContextActive() {
197
+ return moduleState.asyncErrorIgnoreContextDepth > 0;
198
+ }
199
+ function printError(error, console) {
200
+ console ??= globalThis.console;
201
+ console.error(errorToString(error));
202
+ }
203
+ function registerAsyncErrorEventHandler(handler) {
204
+ const eventRef = errorAsyncEvents.on("asyncError", handler);
205
+ return new import_disposable.CallbackDisposable({
206
+ callback: () => {
207
+ errorAsyncEvents.offref(eventRef);
208
+ },
209
+ multipleDisposeBehavior: import_disposable.MultipleDisposeBehavior.Ignore
210
+ });
211
+ }
212
+ function startAsyncErrorIgnoreContext() {
213
+ moduleState.asyncErrorIgnoreContextDepth++;
214
+ return new import_disposable.CallbackDisposable({
215
+ callback: () => {
216
+ moduleState.asyncErrorIgnoreContextDepth--;
217
+ },
218
+ multipleDisposeBehavior: import_disposable.MultipleDisposeBehavior.Ignore
219
+ });
220
+ }
221
+ function startCollectingUnhandledAsyncErrors() {
222
+ moduleState.collectedUnhandledAsyncErrors = [];
223
+ }
224
+ function stopCollectingUnhandledAsyncErrors() {
225
+ const collectedErrors = moduleState.collectedUnhandledAsyncErrors ?? [];
226
+ moduleState.collectedUnhandledAsyncErrors = null;
227
+ return collectedErrors;
228
+ }
229
+ function throwExpression(error) {
230
+ throw error;
231
+ }
232
+ function generateNestedErrorLines(nestedError, title) {
233
+ const lines = [toTitleLine(title), ...getErrorLines(nestedError).filter((line) => line.text.trim() !== "")];
234
+ return lines.map((line) => line.isFrame ? line : { isFrame: true, text: generateStackTraceLine(line.text) });
235
+ }
236
+ function generateStackTraceLine(title) {
237
+ return `${STACK_TRACE_PREFIX} --- ${title} --- (0)`;
238
+ }
239
+ function getErrorHeader(error) {
240
+ return error.message ? `${error.name}: ${error.message}` : error.name;
241
+ }
242
+ function getErrorLines(error) {
243
+ if (!(error instanceof Error)) {
244
+ return String(error).split("\n").map((text) => toTitleLine(text));
245
+ }
246
+ const lines = getOwnErrorLines(error);
247
+ if (error.cause !== void 0) {
248
+ lines.push(...generateNestedErrorLines(error.cause, "Caused by:"));
249
+ }
250
+ if (error instanceof AggregateError) {
251
+ const aggregatedErrors = error.errors;
252
+ for (const [index, aggregatedError] of aggregatedErrors.entries()) {
253
+ lines.push(...generateNestedErrorLines(aggregatedError, `Aggregated error #${String(index + 1)}:`));
254
+ }
255
+ }
256
+ return lines;
257
+ }
258
+ function getOwnErrorLines(error) {
259
+ const headerLines = getErrorHeader(error).split("\n").map((text) => toTitleLine(text));
260
+ if (error.stack === void 0) {
261
+ return headerLines;
262
+ }
263
+ const stackLines = error.stack.split("\n");
264
+ if (hasStackHeader()) {
265
+ return stackLines.map((text) => ({ isFrame: text.startsWith(STACK_TRACE_PREFIX), text }));
266
+ }
267
+ return [...headerLines, ...stackLines.filter((text) => text.trim() !== "").map((text) => ({ isFrame: true, text }))];
268
+ }
269
+ function handleAsyncError(asyncError) {
270
+ printError(asyncError);
271
+ }
272
+ function hasStackHeader() {
273
+ const firstLine = new Error(STACK_HEADER_PROBE_MESSAGE).stack?.split("\n", 1)[0];
274
+ return firstLine === `Error: ${STACK_HEADER_PROBE_MESSAGE}`;
275
+ }
276
+ function toTitleLine(text) {
277
+ return { isFrame: false, text };
278
+ }
279
+ // Annotate the CommonJS export names for ESM import in node:
280
+ 0 && (module.exports = {
281
+ ASYNC_WRAPPER_ERROR_MESSAGE,
282
+ CustomStackTraceError,
283
+ ErrorWrapper,
284
+ SilentError,
285
+ drainCollectedUnhandledAsyncErrors,
286
+ emitAsyncErrorEvent,
287
+ errorToString,
288
+ getStackTrace,
289
+ isAsyncErrorIgnoreContextActive,
290
+ printError,
291
+ registerAsyncErrorEventHandler,
292
+ startAsyncErrorIgnoreContext,
293
+ startCollectingUnhandledAsyncErrors,
294
+ stopCollectingUnhandledAsyncErrors,
295
+ throwExpression
296
+ });
297
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdG9wLWxldmVsLXNpZGUtZWZmZWN0cyAtLSBJbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgb24gaW1wb3J0IGlzIHdoYXQgdGhpcyBtb2R1bGUgaXMgZm9yLiBEZWZlcnJpbmcgaXQgYmVoaW5kIGEgY2FsbCB3b3VsZCBtZWFuIGV2ZXJ5IGNvbnN1bWVyIGhhZCB0byByZW1lbWJlciB0byBtYWtlIHRoYXQgY2FsbCBiZWZvcmUgdGhlIGZpcnN0IGFzeW5jIGVycm9yLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIG1vbWVudCB0aGUgaGFuZGxlciBuZWVkcyB0byBhbHJlYWR5IGV4aXN0LlxuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIG5lc3RpbmcgZGVwdGggb2YgYWN0aXZlIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZXMuIFdoaWxlIGdyZWF0ZXIgdGhhbiBgMGAsIGFuXG4gICAqIGFzeW5jIGVycm9yIGVtaXR0ZWQgKG9yIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbiB3aG9zZSByZWplY3Rpb24gd2FzIGNhcHR1cmVkKSB3aXRoaW4gdGhlIHNjb3BlIGlzXG4gICAqIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLlxuICAgKi9cbiAgYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVmZmVyIHRoYXQgY29sbGVjdHMgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyB3aGlsZSBhIGNvbGxlY3Rpb24gd2luZG93IGlzIG9wZW4sIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vIHdpbmRvdyBpcyBvcGVuICh0aGUgZGVmYXVsdCBpbiBwcm9kdWN0aW9uKS4gT3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30sXG4gICAqIGVtcHRpZWQgd2l0aG91dCBjbG9zaW5nIGJ5IHtAbGluayBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzfSwgYW5kIGRyYWluZWQtYW5kLWNsb3NlZCBieVxuICAgKiB7QGxpbmsgc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gXHUyMDE0IHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcyB0byBmYWlsIGEgdGVzdCB0aGF0IHN3YWxsb3dlZFxuICAgKiBhbiBhc3luYyBlcnJvci5cbiAgICovXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsIHwgdW5rbm93bltdO1xufVxuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5jb25zdCBtb2R1bGVTdGF0ZTogTW9kdWxlU3RhdGUgPSB7XG4gIGFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGg6IDAsXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsXG59O1xuLyoqXG4gKiBBIG1lc3NhZ2Ugb2YgdGhlIEFzeW5jV3JhcHBlckVycm9yLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFID0gJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBleGVjdXRpbmcgYXN5bmMgb3BlcmF0aW9uJztcblxuY29uc3QgU1RBQ0tfVFJBQ0VfUFJFRklYID0gJyAgICBhdCc7XG5cbmNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG5cbmNvbnN0IFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFID0gJ3N0YWNrIGhlYWRlciBwcm9iZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBDdXN0b21TdGFja1RyYWNlRXJyb3J9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBsaW5lIG9mIGFuIGVycm9yJ3Mgc3RyaW5nIGZvcm0sIHRhZ2dlZCB3aXRoIHdoZXRoZXIgaXQgaXMgYSBzdGFjayBmcmFtZS5cbiAqXG4gKiBBIHRpdGxlIChhbiBlcnJvciBoZWFkZXIsIGEgYENhdXNlZCBieTpgIG1hcmtlciwgYSBsaW5lIG9mIGEgbXVsdGktbGluZSBtZXNzYWdlKSBpcyB3cmFwcGVkIGludG9cbiAqIHtAbGluayBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lfSdzIGZvcm0gd2hlbiB0aGUgZXJyb3IgaXQgYmVsb25ncyB0byBpcyBuZXN0ZWQ7IGEgZnJhbWUgaXMga2VwdCB2ZXJiYXRpbS5cbiAqL1xuaW50ZXJmYWNlIEVycm9yTGluZSB7XG4gIHJlYWRvbmx5IGlzRnJhbWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDdXN0b21TdGFja1RyYWNlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIGNvbnN0IHsgY2F1c2UsIG1lc3NhZ2UsIHN0YWNrVHJhY2UgfSA9IHBhcmFtcztcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAoRVJST1JfSEVBREVSX1JFR19FWFAudGVzdChlbnN1cmVOb25OdWxsYWJsZShzdGFja0xpbmVzWzBdKSkpIHtcbiAgICAgIHN0YWNrTGluZXMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gS2VlcCB0aGUgZW5naW5lJ3Mgb3duIGAuc3RhY2tgIHNoYXBlOiBhIGhlYWRlciBvbmx5IHdoZXJlIHRoZSBlbmdpbmUgd3JpdGVzIG9uZSAoVjgpLCBmcmFtZXMgb25seSB3aGVyZSBpdCBkb2VzIG5vdCAoSmF2YVNjcmlwdENvcmUsIFNwaWRlck1vbmtleSkuXG4gICAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICAgIHN0YWNrTGluZXMudW5zaGlmdChnZXRFcnJvckhlYWRlcih0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSBzdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93biwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yV3JhcHBlciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXJyb3JXcmFwcGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgb3JpZ2luYWwgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRocm93blZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoYEEgbm9uLUVycm9yIHZhbHVlIHdhcyB0aHJvd246ICR7U3RyaW5nKHRocm93blZhbHVlKX1gLCB7IGNhdXNlOiB0aHJvd25WYWx1ZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JXcmFwcGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGFueSB0aHJvd24gdmFsdWUgdG8gYW4gYEVycm9yYC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIHdyYXBzIGl0IGluIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgdGhyb3duIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgQW4gYEVycm9yYCBpbnN0YW5jZTogdGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGhyb3duVmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gICAgcmV0dXJuIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB0aHJvd25WYWx1ZSA6IG5ldyBFcnJvcldyYXBwZXIodGhyb3duVmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBpcyBub3QgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpbGVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTaWxlbnRFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NpbGVudEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGNvbGxlY3Rpb24gd2luZG93IG9wZW5lZCBieSB7QGxpbmsgc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGFuZCByZXR1cm5zIHdoYXQgaXRcbiAqIGhlbGQsIGxlYXZpbmcgdGhlIHdpbmRvdyAqKm9wZW4qKiBzbyBlcnJvcnMgZW1pdHRlZCBhZnRlcndhcmRzIGtlZXAgYmVpbmcgY29sbGVjdGVkLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBzZXR1cCdzIChgQG1uYW91bW92L3R5cGVzY3JpcHQtdGVzdC10b29sa2l0L3NldHVwYCkgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgdXNlLCByYXRoZXIgdGhhblxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9OiBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGluIHRoZSBnYXAgYmV0d2VlbiB0d28gdGVzdHMgKGUuZy4gYnkgYVxuICogYHNldFRpbWVvdXRgIHRoZSB0ZXN0IGxlZnQgcGVuZGluZykgd291bGQgb3RoZXJ3aXNlIGxhbmQgb24gYSBjbG9zZWQgd2luZG93IGFuZCB2YW5pc2ggdW5yZXBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyBjb2xsZWN0ZWQgc28gZmFyLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgaXMgb3Blbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzPy5zcGxpY2UoMCkgPz8gW107XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIFdoZW4gYSBjb2xsZWN0aW9uIHdpbmRvdyBpcyBvcGVuIChzZWUge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSkgdGhlIGVycm9yIGlzXG4gKiBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkIHVubGVzcyBpdCBpcyBpZ25vcmVkIFx1MjAxNCBlaXRoZXIgYmVjYXVzZSBgc2hvdWxkSWdub3JlYCBpcyBgdHJ1ZWAgb3IgYW5cbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSBpcyBhY3RpdmUuIEEgcmVnaXN0ZXJlZCBjb25zdW1lciBoYW5kbGVyIGRlbGliZXJhdGVseSBkb2VzXG4gKiAqKm5vdCoqIGV4ZW1wdCB0aGUgZXJyb3I6IGluIHByb2R1Y3Rpb24gaXQgc2hvd3MgdGhlIHVzZXIgYSBOb3RpY2UsIHdoaWNoIGlzIG5vdCBhIHRlc3QgYXNzZXJ0aW5nIHRoYXRcbiAqIHRoZSBlcnJvciB3YXMgZXhwZWN0ZWQuIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBpcyB0aGUgc2luZ2xlLCBleHBsaWNpdCBvcHQtb3V0LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICogQHBhcmFtIHNob3VsZElnbm9yZSAtIFdoZXRoZXIgdG8gdHJlYXQgdGhlIGVycm9yIGFzIGV4cGVjdGVkIGFuZCBuZXZlciBjb2xsZWN0IGl0IGFzIHVuaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIGlnbm9yZSBjb250ZXh0LiBVc2VkIHRvIGNhcnJ5IHRoZSBzY2hlZHVsZS10aW1lIGlnbm9yZSBkZWNpc2lvbiBvZiBhIGRlZmVycmVkIGZpcmUtYW5kLWZvcmdldCByZWplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24sIHNob3VsZElnbm9yZSA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IGlzSWdub3JlZCA9IHNob3VsZElnbm9yZSB8fCBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoID4gMDtcbiAgaWYgKG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzICYmICFpc0lnbm9yZWQpIHtcbiAgICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycy5wdXNoKGFzeW5jRXJyb3IpO1xuICB9XG4gIGVycm9yQXN5bmNFdmVudHMudHJpZ2dlcignYXN5bmNFcnJvcicsIGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mXG4gKiBhbiBgQWdncmVnYXRlRXJyb3JgLCB3aXRoIGluZGVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvclRvU3RyaW5nKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEVycm9yTGluZXMoZXJyb3IpLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyB0aGUgYGdldFN0YWNrVHJhY2VgIGZyYW1lIGl0c2VsZiwgcGx1cyB0aGUgYEVycm9yYCBoZWFkZXIgbGluZSBvbiBhbiBlbmdpbmUgdGhhdCB3cml0ZXMgb25lLlxuICBjb25zdCBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgPSAxO1xuICBjb25zdCBhZGRpdGlvbmFsTGluZXNUb1NraXAgPSBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgKyAoaGFzU3RhY2tIZWFkZXIoKSA/IDEgOiAwKTtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgYWRkaXRpb25hbExpbmVzVG9Ta2lwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gc2NvcGUgaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYXQgbGVhc3Qgb25lIGlnbm9yZSBjb250ZXh0IGlzIGFjdGl2ZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCA+IDA7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBBY3RpdmVseSB1c2UgZ2xvYmFsVGhpcy5cbiAgY29uc29sZSA/Pz0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBjb25zb2xlLmVycm9yKGVycm9yVG9TdHJpbmcoZXJyb3IpKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGVycm9ycy5cbiAqXG4gKiBSZWdpc3RlcmluZyBhIGhhbmRsZXIgZG9lcyBub3QgbWFyayB0aGUgZXJyb3JzIGl0IHJlY2VpdmVzIGFzIGV4cGVjdGVkIFx1MjAxNCBzZWVcbiAqIHtAbGluayBlbWl0QXN5bmNFcnJvckV2ZW50fS4gQSB0ZXN0IHRoYXQgZGVsaWJlcmF0ZWx5IHRyaWdnZXJzIGFuIGFzeW5jIGVycm9yIG9wZW5zIGFcbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSByZWdhcmRsZXNzIG9mIHdobyBpcyBsaXN0ZW5pbmcuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICBjb25zdCBldmVudFJlZiA9IGVycm9yQXN5bmNFdmVudHMub24oJ2FzeW5jRXJyb3InLCBoYW5kbGVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBlcnJvckFzeW5jRXZlbnRzLm9mZnJlZihldmVudFJlZik7XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGFuIGlnbm9yZSBjb250ZXh0IGluIHdoaWNoIGFzeW5jIGVycm9ycyBhcmUgdHJlYXRlZCBhcyBleHBlY3RlZCByYXRoZXIgdGhhbiB1bmhhbmRsZWQsIHNvIHRoZVxuICogdGVzdCBoYXJuZXNzIGRvZXMgbm90IGZhaWwgdGhlIHRlc3QuXG4gKlxuICogV2hpbGUgdGhlIHJldHVybmVkIGRpc3Bvc2FibGUgaXMgaGVsZCwgYW4gYXN5bmMgZXJyb3IgZW1pdHRlZCBkaXJlY3RseSAoc2VlXG4gKiB7QGxpbmsgZW1pdEFzeW5jRXJyb3JFdmVudH0pIGlzIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLiBDcnVjaWFsbHksIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvblxuICogc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2NvcGUgKGUuZy4gdmlhIHtAbGluayBhc3luYyFpbnZva2VBc3luY1NhZmVseX0pIGlzIGFsc28gaWdub3JlZCB3aGVuIGl0IGxhdGVyXG4gKiByZWplY3RzIFx1MjAxNCBldmVuIGFmdGVyIHRoZSBzY29wZSBoYXMgZXhpdGVkIFx1MjAxNCBiZWNhdXNlIHtAbGluayBhc3luYyFhZGRFcnJvckhhbmRsZXJ9IGNhcHR1cmVzIHRoZSBhY3RpdmVcbiAqIGlnbm9yZSBjb250ZXh0IGF0IHNjaGVkdWxlIHRpbWUuIEEgdGVzdCB0aGVyZWZvcmUgZG9lcyBub3QgbmVlZCB0byBkcmFpbiB0aGUgb3BlcmF0aW9uIGl0c2VsZjpcbiAqXG4gKiBgYGB0c1xuICogaXQoJ2RvZXMgbm90IGZhaWwnLCAoKSA9PiB7XG4gKiAgIHVzaW5nIF8gPSBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0KCk7XG4gKiAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZGVsaWJlcmF0ZWx5IHN3YWxsb3dlZCcpKSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIENvbnRleHRzIG5lc3Q7IHRoZSBpZ25vcmUgb25seSBlbmRzIG9uY2UgZXZlcnkgb3BlbiBjb250ZXh0IGhhcyBiZWVuIGRpc3Bvc2VkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgY2xvc2VzIHRoZSBpZ25vcmUgY29udGV4dCB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHQoKTogRGlzcG9zYWJsZSB7XG4gIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGgrKztcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoLS07XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgd2luZG93IGluIHdoaWNoIGFzeW5jIGVycm9ycyBlbWl0dGVkIG91dHNpZGUgYW4gaWdub3JlIGNvbnRleHQgYXJlIGNvbGxlY3RlZCBhcyB1bmhhbmRsZWRcbiAqIChzZWUge0BsaW5rIGVtaXRBc3luY0Vycm9yRXZlbnR9KSwgZGlzY2FyZGluZyBhbnl0aGluZyBjb2xsZWN0ZWQgYnkgYSBwcmV2aW91cyB3aW5kb3cuXG4gKlxuICogSW50ZW5kZWQgZm9yIHRoZSB0ZXN0IGhhcm5lc3Mgb25seTogdGhlIHBlci10ZXN0IHNldHVwIG9wZW5zIGEgd2luZG93IGJlZm9yZSBlYWNoIHRlc3QgYW5kIGVtcHRpZXMgaXRcbiAqIGFmdGVyIGVhY2ggdGVzdCB2aWEge0BsaW5rIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnN9LCBjbG9zaW5nIGl0IGZvciBnb29kIHdpdGhcbiAqIHtAbGluayBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBvbmNlIHRoZSBmaWxlJ3MgbGFzdCB0ZXN0IGhhcyBydW4uIEluIHByb2R1Y3Rpb24gbm8gd2luZG93XG4gKiBpcyBvcGVuLCBzbyBlbWl0dGluZyBhbiBhc3luYyBlcnJvciBjYXJyaWVzIG5vIGJvb2trZWVwaW5nIG92ZXJoZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdm9pZCB7XG4gIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzID0gW107XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSB3aW5kb3cgb3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gYW5kIHJldHVybnMgdGhlIHVuaGFuZGxlZFxuICogYXN5bmMgZXJyb3JzIGNvbGxlY3RlZCB3aGlsZSBpdCB3YXMgb3Blbi5cbiAqXG4gKiBVc2Uge0BsaW5rIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGluc3RlYWQgd2hlcmV2ZXIgY29sbGVjdGlvbiBtdXN0IGNvbnRpbnVlIGFmdGVyd2FyZHMgXHUyMDE0XG4gKiBvbmNlIHRoZSB3aW5kb3cgaXMgY2xvc2VkLCBhIGxhdGVyIGFzeW5jIGVycm9yIGlzIG5vdCBjb2xsZWN0ZWQgYnkgYW55b25lLlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb2xsZWN0ZWQgdW5oYW5kbGVkIGFzeW5jIGVycm9ycywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm8gd2luZG93IHdhcyBvcGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9ycygpOiB1bmtub3duW10ge1xuICBjb25zdCBjb2xsZWN0ZWRFcnJvcnMgPSBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyA/PyBbXTtcbiAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMgPSBudWxsO1xuICByZXR1cm4gY29sbGVjdGVkRXJyb3JzO1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMobmVzdGVkRXJyb3I6IHVua25vd24sIHRpdGxlOiBzdHJpbmcpOiBFcnJvckxpbmVbXSB7XG4gIGNvbnN0IGxpbmVzID0gW3RvVGl0bGVMaW5lKHRpdGxlKSwgLi4uZ2V0RXJyb3JMaW5lcyhuZXN0ZWRFcnJvcikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRleHQudHJpbSgpICE9PSAnJyldO1xuICByZXR1cm4gbGluZXMubWFwKChsaW5lKSA9PiBsaW5lLmlzRnJhbWUgPyBsaW5lIDogeyBpc0ZyYW1lOiB0cnVlLCB0ZXh0OiBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKGxpbmUudGV4dCkgfSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTVEFDS19UUkFDRV9QUkVGSVh9IC0tLSAke3RpdGxlfSAtLS0gKDApYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGBOYW1lOiBtZXNzYWdlYCBoZWFkZXIgdGhlIHdheSBWOCB3cml0ZXMgaXQgaW50byBgLnN0YWNrYCAoYSBiYXJlIGBOYW1lYCBmb3IgYW4gZW1wdHkgbWVzc2FnZSkuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yLlxuICogQHJldHVybnMgVGhlIGhlYWRlciwgd2hpY2ggc3BhbnMgc2V2ZXJhbCBsaW5lcyB3aGVuIHRoZSBtZXNzYWdlIGRvZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEVycm9ySGVhZGVyKGVycm9yOiBFcnJvcik6IHN0cmluZyB7XG4gIHJldHVybiBlcnJvci5tZXNzYWdlID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogZXJyb3IubmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JMaW5lcyhlcnJvcjogdW5rbm93bik6IEVycm9yTGluZVtdIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKS5zcGxpdCgnXFxuJykubWFwKCh0ZXh0KSA9PiB0b1RpdGxlTGluZSh0ZXh0KSk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IGdldE93bkVycm9yTGluZXMoZXJyb3IpO1xuICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGxpbmVzLnB1c2goLi4uZ2VuZXJhdGVOZXN0ZWRFcnJvckxpbmVzKGVycm9yLmNhdXNlLCAnQ2F1c2VkIGJ5OicpKTtcbiAgfVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcikge1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZWRFcnJvcnM6IHJlYWRvbmx5IHVua25vd25bXSA9IGVycm9yLmVycm9ycztcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgYWdncmVnYXRlZEVycm9yXSBvZiBhZ2dyZWdhdGVkRXJyb3JzLmVudHJpZXMoKSkge1xuICAgICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMoYWdncmVnYXRlZEVycm9yLCBgQWdncmVnYXRlZCBlcnJvciAjJHtTdHJpbmcoaW5kZXggKyAxKX06YCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIGdldE93bkVycm9yTGluZXMoZXJyb3I6IEVycm9yKTogRXJyb3JMaW5lW10ge1xuICBjb25zdCBoZWFkZXJMaW5lcyA9IGdldEVycm9ySGVhZGVyKGVycm9yKS5zcGxpdCgnXFxuJykubWFwKCh0ZXh0KSA9PiB0b1RpdGxlTGluZSh0ZXh0KSk7XG4gIGlmIChlcnJvci5zdGFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhlYWRlckxpbmVzO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICByZXR1cm4gc3RhY2tMaW5lcy5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRleHQuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpLCB0ZXh0IH0pKTtcbiAgfVxuXG4gIC8vIE9uIGFuIGVuZ2luZSB3aXRob3V0IGEgaGVhZGVyIGxpbmUsIHRoZSBgLnN0YWNrYCBpcyBmcmFtZXMgb25seSwgaW4gaXRzIG93biBgbmFtZUB1cmw6bGluZTpjb2xgIGZvcm0sIHNvIHRoZSBtZXNzYWdlIGlzIG5vd2hlcmUgaW4gaXQ6XG4gIC8vIFByZXBlbmQgdGhlIGhlYWRlciwgYW5kIHRha2UgZXZlcnkgc3RhY2sgbGluZSBhcyBhIGZyYW1lLlxuICByZXR1cm4gWy4uLmhlYWRlckxpbmVzLCAuLi5zdGFja0xpbmVzLmZpbHRlcigodGV4dCkgPT4gdGV4dC50cmltKCkgIT09ICcnKS5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRydWUsIHRleHQgfSkpXTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBBbnN3ZXJzIHdoZXRoZXIgdGhpcyBlbmdpbmUncyBgLnN0YWNrYCBvcGVucyB3aXRoIHRoZSBlcnJvcidzIGBOYW1lOiBtZXNzYWdlYCBoZWFkZXIgbGluZS5cbiAqXG4gKiBWOCB3cml0ZXMgb25lOyBKYXZhU2NyaXB0Q29yZSAoZXZlcnkgQXBwbGUgcGxhdGZvcm0sIHNvIE9ic2lkaWFuIG9uIGlPUyBhbmQgaVBhZE9TKSBhbmQgU3BpZGVyTW9ua2V5IHdyaXRlIGZyYW1lcyBvbmx5LlxuICogVGhlIGFuc3dlciBiZWxvbmdzIHRvIHRoZSBlbmdpbmUsIG5vdCB0aGUgcGxhdGZvcm0sIHNvIGl0IGlzIHByb2JlZCByYXRoZXIgdGhhbiByZWFkIG9mZiBgUGxhdGZvcm1gLiBJdCBpcyBwcm9iZWQgb24gZXZlcnlcbiAqIGNhbGwgcmF0aGVyIHRoYW4gY2FjaGVkLCBiZWNhdXNlIGBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZWAgY2FuIHJlc2hhcGUgVjgncyBzdGFjayBhdCBydW50aW1lLCBhbmQgb25lIGV4dHJhIGBFcnJvcmAgY29zdHNcbiAqIG5vdGhpbmcgb24gYSBwYXRoIHRoYXQgaXMgYWxyZWFkeSBoYW5kbGluZyBvbmUuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGAuc3RhY2tgIGNhcnJpZXMgdGhlIGhlYWRlciBsaW5lLlxuICovXG5mdW5jdGlvbiBoYXNTdGFja0hlYWRlcigpOiBib29sZWFuIHtcbiAgY29uc3QgZmlyc3RMaW5lID0gbmV3IEVycm9yKFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFKS5zdGFjaz8uc3BsaXQoJ1xcbicsIDEpWzBdO1xuICByZXR1cm4gZmlyc3RMaW5lID09PSBgRXJyb3I6ICR7U1RBQ0tfSEVBREVSX1BST0JFX01FU1NBR0V9YDtcbn1cblxuZnVuY3Rpb24gdG9UaXRsZUxpbmUodGV4dDogc3RyaW5nKTogRXJyb3JMaW5lIHtcbiAgcmV0dXJuIHsgaXNGcmFtZTogZmFsc2UsIHRleHQgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsMEJBQTRCO0FBQzVCLHdCQUdPO0FBQ1AseUJBQWtDO0FBTWxDLE1BQU0sbUJBQW1CLElBQUksZ0NBQWdDO0FBRTdELGlCQUFpQixHQUFHLGNBQWMsZ0JBQWdCO0FBdUJsRCxNQUFNLGNBQTJCO0FBQUEsRUFDL0IsOEJBQThCO0FBQUEsRUFDOUIsK0JBQStCO0FBQ2pDO0FBSU8sTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSx1QkFBdUI7QUFFN0IsTUFBTSw2QkFBNkI7QUFvQzVCLE1BQU0sOEJBQThCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEMsWUFBWSxRQUFnRDtBQUNqRSxVQUFNLEVBQUUsT0FBTyxTQUFTLFdBQVcsSUFBSTtBQUN2QyxVQUFNLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDeEIsU0FBSyxPQUFPO0FBRVosUUFBSSxZ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
@@ -0,0 +1,181 @@
1
+ /// <reference path="./library.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Contains utility functions for error handling.
6
+ */
7
+ /**
8
+ * A message of the AsyncWrapperError.
9
+ */
10
+ export declare const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
11
+ /**
12
+ * Parameters for the {@link CustomStackTraceError} constructor.
13
+ */
14
+ export interface CustomStackTraceErrorConstructorParams {
15
+ /**
16
+ * The cause of the error.
17
+ */
18
+ readonly cause: unknown;
19
+ /**
20
+ * The message of the error.
21
+ */
22
+ readonly message: string;
23
+ /**
24
+ * The stack trace of the error.
25
+ */
26
+ readonly stackTrace: string;
27
+ }
28
+ /**
29
+ * An error that wraps an error with a custom stack trace.
30
+ */
31
+ export declare class CustomStackTraceError extends Error {
32
+ /**
33
+ * Creates a new CustomStackTraceError.
34
+ *
35
+ * @param params - The parameters for the error.
36
+ */
37
+ constructor(params: CustomStackTraceErrorConstructorParams);
38
+ }
39
+ /**
40
+ * An error that wraps a non-`Error` value that was thrown, preserving the original value in `cause`.
41
+ */
42
+ export declare class ErrorWrapper extends Error {
43
+ /**
44
+ * Creates a new ErrorWrapper.
45
+ *
46
+ * @param thrownValue - The original non-`Error` value that was thrown.
47
+ */
48
+ constructor(thrownValue: unknown);
49
+ /**
50
+ * Normalizes any thrown value to an `Error`.
51
+ *
52
+ * Returns the value unchanged if it is already an `Error`, otherwise wraps it in an {@link ErrorWrapper}.
53
+ *
54
+ * @param thrownValue - The thrown value to normalize.
55
+ * @returns An `Error` instance: the original value if it is already an `Error`, otherwise an {@link ErrorWrapper}.
56
+ */
57
+ static create(thrownValue: unknown): Error;
58
+ }
59
+ /**
60
+ * An error that is not printed to the console.
61
+ */
62
+ export declare class SilentError extends Error {
63
+ /**
64
+ * Creates a new SilentError.
65
+ *
66
+ * @param message - The message of the error.
67
+ */
68
+ constructor(message: string);
69
+ }
70
+ /**
71
+ * Empties the collection window opened by {@link startCollectingUnhandledAsyncErrors} and returns what it
72
+ * held, leaving the window **open** so errors emitted afterwards keep being collected.
73
+ *
74
+ * This is what the test setup's (`@mnaoumov/typescript-test-toolkit/setup`) `beforeEach` / `afterEach` use, rather than
75
+ * {@link stopCollectingUnhandledAsyncErrors}: an async error emitted in the gap between two tests (e.g. by a
76
+ * `setTimeout` the test left pending) would otherwise land on a closed window and vanish unreported.
77
+ *
78
+ * @returns The unhandled async errors collected so far, or an empty array if no window is open.
79
+ */
80
+ export declare function drainCollectedUnhandledAsyncErrors(): unknown[];
81
+ /**
82
+ * Emits an asynchronous error event.
83
+ *
84
+ * When a collection window is open (see {@link startCollectingUnhandledAsyncErrors}) the error is
85
+ * collected as unhandled unless it is ignored — either because `shouldIgnore` is `true` or an
86
+ * {@link startAsyncErrorIgnoreContext} scope is active. A registered consumer handler deliberately does
87
+ * **not** exempt the error: in production it shows the user a Notice, which is not a test asserting that
88
+ * the error was expected. {@link startAsyncErrorIgnoreContext} is the single, explicit opt-out.
89
+ *
90
+ * @param asyncError - The error to emit as an asynchronous error event.
91
+ * @param shouldIgnore - Whether to treat the error as expected and never collect it as unhandled, regardless of the active ignore context. Used to carry the schedule-time ignore decision of a deferred fire-and-forget rejection.
92
+ */
93
+ export declare function emitAsyncErrorEvent(asyncError: unknown, shouldIgnore?: boolean): void;
94
+ /**
95
+ * Converts an error to a string representation, including nested causes and the aggregated errors of
96
+ * an `AggregateError`, with indentation.
97
+ *
98
+ * @param error - The error to convert to a string.
99
+ * @returns The string representation of the error.
100
+ */
101
+ export declare function errorToString(error: unknown): string;
102
+ /**
103
+ * Gets the current stack trace as a string, excluding the current function call.
104
+ *
105
+ * @param framesToSkip - The number of frames to skip in the stack trace.
106
+ * @returns A string representation of the current stack trace, excluding the current function call.
107
+ */
108
+ export declare function getStackTrace(framesToSkip?: number): string;
109
+ /**
110
+ * Checks whether an {@link startAsyncErrorIgnoreContext} scope is currently active.
111
+ *
112
+ * @returns `true` if at least one ignore context is active, `false` otherwise.
113
+ */
114
+ export declare function isAsyncErrorIgnoreContextActive(): boolean;
115
+ /**
116
+ * Prints an error to the console, including nested causes and optional ANSI sequence clearing.
117
+ *
118
+ * @param error - The error to print.
119
+ * @param console - The console to print to (default: `globalThis.console`).
120
+ */
121
+ export declare function printError(error: unknown, console?: Console): void;
122
+ /**
123
+ * Registers an event handler for asynchronous errors.
124
+ *
125
+ * Registering a handler does not mark the errors it receives as expected — see
126
+ * {@link emitAsyncErrorEvent}. A test that deliberately triggers an async error opens a
127
+ * {@link startAsyncErrorIgnoreContext} scope regardless of who is listening.
128
+ *
129
+ * @param handler - The handler function to be called when an asynchronous error event occurs.
130
+ * @returns A {@link Disposable} that unregisters the handler when disposed, for use with `using`.
131
+ */
132
+ export declare function registerAsyncErrorEventHandler(handler: (asyncError: unknown) => void): Disposable;
133
+ /**
134
+ * Opens an ignore context in which async errors are treated as expected rather than unhandled, so the
135
+ * test harness does not fail the test.
136
+ *
137
+ * While the returned disposable is held, an async error emitted directly (see
138
+ * {@link emitAsyncErrorEvent}) is not collected as unhandled. Crucially, a fire-and-forget operation
139
+ * scheduled within the scope (e.g. via {@link async!invokeAsyncSafely}) is also ignored when it later
140
+ * rejects — even after the scope has exited — because {@link async!addErrorHandler} captures the active
141
+ * ignore context at schedule time. A test therefore does not need to drain the operation itself:
142
+ *
143
+ * ```ts
144
+ * it('does not fail', () => {
145
+ * using _ = startAsyncErrorIgnoreContext();
146
+ * invokeAsyncSafely(() => Promise.reject(new Error('deliberately swallowed')));
147
+ * });
148
+ * ```
149
+ *
150
+ * Contexts nest; the ignore only ends once every open context has been disposed.
151
+ *
152
+ * @returns A {@link Disposable} that closes the ignore context when disposed, for use with `using`.
153
+ */
154
+ export declare function startAsyncErrorIgnoreContext(): Disposable;
155
+ /**
156
+ * Opens a window in which async errors emitted outside an ignore context are collected as unhandled
157
+ * (see {@link emitAsyncErrorEvent}), discarding anything collected by a previous window.
158
+ *
159
+ * Intended for the test harness only: the per-test setup opens a window before each test and empties it
160
+ * after each test via {@link drainCollectedUnhandledAsyncErrors}, closing it for good with
161
+ * {@link stopCollectingUnhandledAsyncErrors} once the file's last test has run. In production no window
162
+ * is open, so emitting an async error carries no bookkeeping overhead.
163
+ */
164
+ export declare function startCollectingUnhandledAsyncErrors(): void;
165
+ /**
166
+ * Closes the window opened by {@link startCollectingUnhandledAsyncErrors} and returns the unhandled
167
+ * async errors collected while it was open.
168
+ *
169
+ * Use {@link drainCollectedUnhandledAsyncErrors} instead wherever collection must continue afterwards —
170
+ * once the window is closed, a later async error is not collected by anyone.
171
+ *
172
+ * @returns The collected unhandled async errors, or an empty array if no window was open.
173
+ */
174
+ export declare function stopCollectingUnhandledAsyncErrors(): unknown[];
175
+ /**
176
+ * Throws an error with the specified message.
177
+ *
178
+ * @param error - The error to throw.
179
+ * @throws
180
+ */
181
+ export declare function throwExpression(error: unknown): never;