@mnaoumov/typescript-lib 0.0.0 → 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/@types/debug/package.json +4 -0
- package/LICENSE +21 -0
- package/README.md +15 -1
- package/dist/lib/cjs/@types/debug.d.cts +21 -0
- package/dist/lib/cjs/abort-controller.cjs +144 -0
- package/dist/lib/cjs/abort-controller.d.cts +136 -0
- package/dist/lib/cjs/aggregate-error.cjs +40 -0
- package/dist/lib/cjs/aggregate-error.d.cts +24 -0
- package/dist/lib/cjs/array-buffer.cjs +38 -0
- package/dist/lib/cjs/array-buffer.d.cts +16 -0
- package/dist/lib/cjs/array.cjs +76 -0
- package/dist/lib/cjs/array.d.cts +46 -0
- package/dist/lib/cjs/async-events.cjs +408 -0
- package/dist/lib/cjs/async-events.d.cts +456 -0
- package/dist/lib/cjs/async-operation-hook.cjs +55 -0
- package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
- package/dist/lib/cjs/async.cjs +463 -0
- package/dist/lib/cjs/async.d.cts +415 -0
- package/dist/lib/cjs/beeper.cjs +68 -0
- package/dist/lib/cjs/beeper.d.cts +21 -0
- package/dist/lib/cjs/blob.cjs +102 -0
- package/dist/lib/cjs/blob.d.cts +60 -0
- package/dist/lib/cjs/bytes.cjs +56 -0
- package/dist/lib/cjs/bytes.d.cts +17 -0
- package/dist/lib/cjs/debug-controller.cjs +22 -0
- package/dist/lib/cjs/debug-controller.d.cts +87 -0
- package/dist/lib/cjs/debug.cjs +204 -0
- package/dist/lib/cjs/debug.d.cts +66 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +157 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +96 -0
- package/dist/lib/cjs/disposable.cjs +364 -0
- package/dist/lib/cjs/disposable.d.cts +387 -0
- package/dist/lib/cjs/enum.cjs +42 -0
- package/dist/lib/cjs/enum.d.cts +24 -0
- package/dist/lib/cjs/error.cjs +239 -0
- package/dist/lib/cjs/error.d.cts +182 -0
- package/dist/lib/cjs/function.cjs +83 -0
- package/dist/lib/cjs/function.d.cts +128 -0
- package/dist/lib/cjs/html-element.cjs +283 -0
- package/dist/lib/cjs/html-element.d.cts +200 -0
- package/dist/lib/cjs/index.cjs +137 -0
- package/dist/lib/cjs/index.d.cts +33 -0
- package/dist/lib/cjs/jpeg-metadata.cjs +170 -0
- package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +100 -0
- package/dist/lib/cjs/library.d.cts +96 -0
- package/dist/lib/cjs/object-utils.cjs +559 -0
- package/dist/lib/cjs/object-utils.d.cts +298 -0
- package/dist/lib/cjs/path.cjs +171 -0
- package/dist/lib/cjs/path.d.cts +155 -0
- package/dist/lib/cjs/reg-exp.cjs +196 -0
- package/dist/lib/cjs/reg-exp.d.cts +87 -0
- package/dist/lib/cjs/string.cjs +268 -0
- package/dist/lib/cjs/string.d.cts +362 -0
- package/dist/lib/cjs/transformers/date-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +115 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/index.cjs +65 -0
- package/dist/lib/cjs/transformers/index.d.cts +9 -0
- package/dist/lib/cjs/transformers/map-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
- package/dist/lib/cjs/transformers/set-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +69 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
- package/dist/lib/cjs/transformers/transformer.cjs +112 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +72 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
- package/dist/lib/cjs/transformers/typed-transformer.cjs +36 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
- package/dist/lib/cjs/two-way-map.cjs +150 -0
- package/dist/lib/cjs/two-way-map.d.cts +101 -0
- package/dist/lib/cjs/type-guards.cjs +70 -0
- package/dist/lib/cjs/type-guards.d.cts +84 -0
- package/dist/lib/cjs/type.cjs +63 -0
- package/dist/lib/cjs/type.d.cts +122 -0
- package/dist/lib/cjs/typescript-lib-state.cjs +68 -0
- package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
- package/dist/lib/cjs/url.cjs +78 -0
- package/dist/lib/cjs/url.d.cts +74 -0
- package/dist/lib/cjs/value-provider.cjs +42 -0
- package/dist/lib/cjs/value-provider.d.cts +29 -0
- package/dist/lib/cjs/value-wrapper.cjs +86 -0
- package/dist/lib/cjs/value-wrapper.d.cts +47 -0
- package/dist/lib/esm/@types/debug.d.mts +21 -0
- package/dist/lib/esm/abort-controller.d.mts +136 -0
- package/dist/lib/esm/abort-controller.mjs +115 -0
- package/dist/lib/esm/aggregate-error.d.mts +24 -0
- package/dist/lib/esm/aggregate-error.mjs +16 -0
- package/dist/lib/esm/array-buffer.d.mts +16 -0
- package/dist/lib/esm/array-buffer.mjs +14 -0
- package/dist/lib/esm/array.d.mts +46 -0
- package/dist/lib/esm/array.mjs +49 -0
- package/dist/lib/esm/async-events.d.mts +456 -0
- package/dist/lib/esm/async-events.mjs +383 -0
- package/dist/lib/esm/async-operation-hook.d.mts +59 -0
- package/dist/lib/esm/async-operation-hook.mjs +27 -0
- package/dist/lib/esm/async.d.mts +415 -0
- package/dist/lib/esm/async.mjs +435 -0
- package/dist/lib/esm/beeper.d.mts +21 -0
- package/dist/lib/esm/beeper.mjs +44 -0
- package/dist/lib/esm/blob.d.mts +60 -0
- package/dist/lib/esm/blob.mjs +77 -0
- package/dist/lib/esm/bytes.d.mts +17 -0
- package/dist/lib/esm/bytes.mjs +32 -0
- package/dist/lib/esm/debug-controller.d.mts +87 -0
- package/dist/lib/esm/debug-controller.mjs +6 -0
- package/dist/lib/esm/debug.d.mts +66 -0
- package/dist/lib/esm/debug.mjs +168 -0
- package/dist/lib/esm/desktop-zip-extractor.d.mts +96 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +136 -0
- package/dist/lib/esm/disposable.d.mts +387 -0
- package/dist/lib/esm/disposable.mjs +324 -0
- package/dist/lib/esm/enum.d.mts +24 -0
- package/dist/lib/esm/enum.mjs +17 -0
- package/dist/lib/esm/error.d.mts +182 -0
- package/dist/lib/esm/error.mjs +204 -0
- package/dist/lib/esm/function.d.mts +128 -0
- package/dist/lib/esm/function.mjs +52 -0
- package/dist/lib/esm/html-element.d.mts +200 -0
- package/dist/lib/esm/html-element.mjs +247 -0
- package/dist/lib/esm/index.d.mts +33 -0
- package/dist/lib/esm/index.mjs +72 -0
- package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
- package/dist/lib/esm/jpeg-metadata.mjs +145 -0
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/library.d.mts +96 -0
- package/dist/lib/esm/library.mjs +74 -0
- package/dist/lib/esm/object-utils.d.mts +298 -0
- package/dist/lib/esm/object-utils.mjs +523 -0
- package/dist/lib/esm/path.d.mts +155 -0
- package/dist/lib/esm/path.mjs +122 -0
- package/dist/lib/esm/reg-exp.d.mts +87 -0
- package/dist/lib/esm/reg-exp.mjs +169 -0
- package/dist/lib/esm/string.d.mts +362 -0
- package/dist/lib/esm/string.mjs +230 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/date-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +94 -0
- package/dist/lib/esm/transformers/index.d.mts +9 -0
- package/dist/lib/esm/transformers/index.mjs +24 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
- package/dist/lib/esm/transformers/map-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/set-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +45 -0
- package/dist/lib/esm/transformers/transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/transformer.mjs +88 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +48 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/typed-transformer.mjs +12 -0
- package/dist/lib/esm/two-way-map.d.mts +101 -0
- package/dist/lib/esm/two-way-map.mjs +126 -0
- package/dist/lib/esm/type-guards.d.mts +84 -0
- package/dist/lib/esm/type-guards.mjs +41 -0
- package/dist/lib/esm/type.d.mts +122 -0
- package/dist/lib/esm/type.mjs +39 -0
- package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
- package/dist/lib/esm/typescript-lib-state.mjs +40 -0
- package/dist/lib/esm/url.d.mts +74 -0
- package/dist/lib/esm/url.mjs +50 -0
- package/dist/lib/esm/value-provider.d.mts +29 -0
- package/dist/lib/esm/value-provider.mjs +18 -0
- package/dist/lib/esm/value-wrapper.d.mts +47 -0
- package/dist/lib/esm/value-wrapper.mjs +62 -0
- package/package.json +153 -13
- package/transformers/date-transformer/package.json +6 -0
- package/transformers/group-transformer/package.json +6 -0
- package/transformers/index/package.json +6 -0
- package/transformers/map-transformer/package.json +6 -0
- package/transformers/package.json +6 -0
- package/transformers/set-transformer/package.json +6 -0
- package/transformers/skip-private-property-transformer/package.json +6 -0
- package/transformers/transformer/package.json +6 -0
- package/transformers/two-way-map-transformer/package.json +6 -0
- package/transformers/typed-transformer/package.json +6 -0
|
@@ -0,0 +1,324 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
7
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
8
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
ensureDisposeSymbols();
|
|
12
|
+
})();
|
|
13
|
+
|
|
14
|
+
import { createAggregateError } from "./aggregate-error.mjs";
|
|
15
|
+
import { assertNever } from "./type-guards.mjs";
|
|
16
|
+
var DisposeErrorBehavior = /* @__PURE__ */ ((DisposeErrorBehavior2) => {
|
|
17
|
+
DisposeErrorBehavior2[DisposeErrorBehavior2["Aggregate"] = 0] = "Aggregate";
|
|
18
|
+
DisposeErrorBehavior2[DisposeErrorBehavior2["FailFast"] = 1] = "FailFast";
|
|
19
|
+
return DisposeErrorBehavior2;
|
|
20
|
+
})(DisposeErrorBehavior || {});
|
|
21
|
+
var DisposeOrder = /* @__PURE__ */ ((DisposeOrder2) => {
|
|
22
|
+
DisposeOrder2[DisposeOrder2["Lifo"] = 0] = "Lifo";
|
|
23
|
+
DisposeOrder2[DisposeOrder2["Fifo"] = 1] = "Fifo";
|
|
24
|
+
return DisposeOrder2;
|
|
25
|
+
})(DisposeOrder || {});
|
|
26
|
+
var MultipleDisposeBehavior = /* @__PURE__ */ ((MultipleDisposeBehavior2) => {
|
|
27
|
+
MultipleDisposeBehavior2[MultipleDisposeBehavior2["Invoke"] = 0] = "Invoke";
|
|
28
|
+
MultipleDisposeBehavior2[MultipleDisposeBehavior2["Ignore"] = 1] = "Ignore";
|
|
29
|
+
MultipleDisposeBehavior2[MultipleDisposeBehavior2["Throw"] = 2] = "Throw";
|
|
30
|
+
return MultipleDisposeBehavior2;
|
|
31
|
+
})(MultipleDisposeBehavior || {});
|
|
32
|
+
class AsyncDisposableBase {
|
|
33
|
+
/**
|
|
34
|
+
* How the disposable behaves when disposed more than once.
|
|
35
|
+
*
|
|
36
|
+
* @default {@link MultipleDisposeBehavior.Ignore}
|
|
37
|
+
*/
|
|
38
|
+
multipleDisposeBehavior = 1 /* Ignore */;
|
|
39
|
+
/**
|
|
40
|
+
* Whether this disposable has been disposed (its teardown has run at least once).
|
|
41
|
+
*
|
|
42
|
+
* @returns `true` once disposal has started.
|
|
43
|
+
*/
|
|
44
|
+
get isDisposed() {
|
|
45
|
+
return this._isDisposed;
|
|
46
|
+
}
|
|
47
|
+
_isDisposed = false;
|
|
48
|
+
/**
|
|
49
|
+
* Disposes the object. Convenience alias that delegates to `this[Symbol.asyncDispose]()`.
|
|
50
|
+
*
|
|
51
|
+
* @returns A {@link Promise} that resolves once teardown completes.
|
|
52
|
+
*/
|
|
53
|
+
asyncDispose() {
|
|
54
|
+
return this[Symbol.asyncDispose]();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Disposes the object by running {@link AsyncDisposableBase.performDisposeAsync}, honoring the configured
|
|
58
|
+
* {@link MultipleDisposeBehavior} on a repeat dispose.
|
|
59
|
+
*
|
|
60
|
+
* @returns A {@link Promise} that resolves once teardown completes.
|
|
61
|
+
*/
|
|
62
|
+
async [Symbol.asyncDispose]() {
|
|
63
|
+
if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this._isDisposed = true;
|
|
67
|
+
await this.performDisposeAsync();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
class AsyncCallbackDisposable extends AsyncDisposableBase {
|
|
71
|
+
callback;
|
|
72
|
+
/**
|
|
73
|
+
* Creates a new instance of {@link AsyncCallbackDisposable}.
|
|
74
|
+
*
|
|
75
|
+
* @param params - The parameters.
|
|
76
|
+
*/
|
|
77
|
+
constructor(params) {
|
|
78
|
+
super();
|
|
79
|
+
this.callback = params.callback;
|
|
80
|
+
this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Runs the dispose callback.
|
|
84
|
+
*
|
|
85
|
+
* @returns A {@link Promise} that resolves once the callback completes.
|
|
86
|
+
*/
|
|
87
|
+
async performDisposeAsync() {
|
|
88
|
+
await this.callback();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function dispose(disposable) {
|
|
92
|
+
disposable[Symbol.dispose]();
|
|
93
|
+
}
|
|
94
|
+
class DisposableBase {
|
|
95
|
+
/**
|
|
96
|
+
* How the disposable behaves when disposed more than once.
|
|
97
|
+
*
|
|
98
|
+
* @default {@link MultipleDisposeBehavior.Ignore}
|
|
99
|
+
*/
|
|
100
|
+
multipleDisposeBehavior = 1 /* Ignore */;
|
|
101
|
+
/**
|
|
102
|
+
* Whether this disposable has been disposed (its teardown has run at least once).
|
|
103
|
+
*
|
|
104
|
+
* @returns `true` once disposal has started.
|
|
105
|
+
*/
|
|
106
|
+
get isDisposed() {
|
|
107
|
+
return this._isDisposed;
|
|
108
|
+
}
|
|
109
|
+
_isDisposed = false;
|
|
110
|
+
/**
|
|
111
|
+
* Disposes the object. Convenience alias that delegates to `this[Symbol.dispose]()`.
|
|
112
|
+
*/
|
|
113
|
+
dispose() {
|
|
114
|
+
this[Symbol.dispose]();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Disposes the object by running {@link DisposableBase.performDispose}, honoring the configured
|
|
118
|
+
* {@link MultipleDisposeBehavior} on a repeat dispose.
|
|
119
|
+
*/
|
|
120
|
+
[Symbol.dispose]() {
|
|
121
|
+
if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
this._isDisposed = true;
|
|
125
|
+
this.performDispose();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
class CallbackDisposable extends DisposableBase {
|
|
129
|
+
callback;
|
|
130
|
+
/**
|
|
131
|
+
* Creates a new instance of {@link CallbackDisposable}.
|
|
132
|
+
*
|
|
133
|
+
* @param params - The parameters.
|
|
134
|
+
*/
|
|
135
|
+
constructor(params) {
|
|
136
|
+
super();
|
|
137
|
+
this.callback = params.callback;
|
|
138
|
+
this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Runs the dispose callback.
|
|
142
|
+
*/
|
|
143
|
+
performDispose() {
|
|
144
|
+
this.callback();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
class CombineAsyncDisposable extends AsyncDisposableBase {
|
|
148
|
+
children;
|
|
149
|
+
disposeOrder;
|
|
150
|
+
errorBehavior;
|
|
151
|
+
/**
|
|
152
|
+
* Creates a new instance of {@link CombineAsyncDisposable}.
|
|
153
|
+
*
|
|
154
|
+
* @param params - The parameters.
|
|
155
|
+
*/
|
|
156
|
+
constructor(params) {
|
|
157
|
+
super();
|
|
158
|
+
this.children = [...params.asyncDisposables];
|
|
159
|
+
this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
|
|
160
|
+
this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
|
|
161
|
+
this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
|
|
165
|
+
* {@link DisposeErrorBehavior} when a child throws.
|
|
166
|
+
*
|
|
167
|
+
* @returns A {@link Promise} that resolves once all children have been disposed.
|
|
168
|
+
*/
|
|
169
|
+
async performDisposeAsync() {
|
|
170
|
+
const errors = [];
|
|
171
|
+
for (const child of this.getOrderedChildren()) {
|
|
172
|
+
try {
|
|
173
|
+
await child[Symbol.asyncDispose]();
|
|
174
|
+
} catch (error) {
|
|
175
|
+
if (this.errorBehavior === 1 /* FailFast */) {
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
errors.push(error);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (errors.length > 0) {
|
|
182
|
+
throw createAggregateError(errors);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
getOrderedChildren() {
|
|
186
|
+
switch (this.disposeOrder) {
|
|
187
|
+
case 1 /* Fifo */: {
|
|
188
|
+
return this.children;
|
|
189
|
+
}
|
|
190
|
+
case 0 /* Lifo */: {
|
|
191
|
+
return [...this.children].reverse();
|
|
192
|
+
}
|
|
193
|
+
default: {
|
|
194
|
+
assertNever(this.disposeOrder);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
class CombineDisposable extends DisposableBase {
|
|
200
|
+
children;
|
|
201
|
+
disposeOrder;
|
|
202
|
+
errorBehavior;
|
|
203
|
+
/**
|
|
204
|
+
* Creates a new instance of {@link CombineDisposable}.
|
|
205
|
+
*
|
|
206
|
+
* @param params - The parameters.
|
|
207
|
+
*/
|
|
208
|
+
constructor(params) {
|
|
209
|
+
super();
|
|
210
|
+
this.children = [...params.disposables];
|
|
211
|
+
this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
|
|
212
|
+
this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
|
|
213
|
+
this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
|
|
217
|
+
* {@link DisposeErrorBehavior} when a child throws.
|
|
218
|
+
*/
|
|
219
|
+
performDispose() {
|
|
220
|
+
const errors = [];
|
|
221
|
+
for (const child of this.getOrderedChildren()) {
|
|
222
|
+
try {
|
|
223
|
+
child[Symbol.dispose]();
|
|
224
|
+
} catch (error) {
|
|
225
|
+
if (this.errorBehavior === 1 /* FailFast */) {
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
errors.push(error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (errors.length > 0) {
|
|
232
|
+
throw createAggregateError(errors);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
getOrderedChildren() {
|
|
236
|
+
switch (this.disposeOrder) {
|
|
237
|
+
case 1 /* Fifo */: {
|
|
238
|
+
return this.children;
|
|
239
|
+
}
|
|
240
|
+
case 0 /* Lifo */: {
|
|
241
|
+
return [...this.children].reverse();
|
|
242
|
+
}
|
|
243
|
+
default: {
|
|
244
|
+
assertNever(this.disposeOrder);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
async function disposeAsync(asyncDisposable) {
|
|
250
|
+
await asyncDisposable[Symbol.asyncDispose]();
|
|
251
|
+
}
|
|
252
|
+
function isAsyncDisposable($unknown) {
|
|
253
|
+
const asyncDisposable = $unknown;
|
|
254
|
+
return !!asyncDisposable[Symbol.asyncDispose];
|
|
255
|
+
}
|
|
256
|
+
function isAsyncDisposableEx($unknown) {
|
|
257
|
+
const asyncDisposableEx = $unknown;
|
|
258
|
+
return isAsyncDisposable($unknown) && typeof asyncDisposableEx.asyncDispose === "function";
|
|
259
|
+
}
|
|
260
|
+
function isDisposable($unknown) {
|
|
261
|
+
const disposable = $unknown;
|
|
262
|
+
return !!disposable[Symbol.dispose];
|
|
263
|
+
}
|
|
264
|
+
function isDisposableEx($unknown) {
|
|
265
|
+
const disposableEx = $unknown;
|
|
266
|
+
return isDisposable($unknown) && typeof disposableEx.dispose === "function";
|
|
267
|
+
}
|
|
268
|
+
function toAsyncDisposableEx(asyncDisposable) {
|
|
269
|
+
return isAsyncDisposableEx(asyncDisposable) ? asyncDisposable : {
|
|
270
|
+
asyncDispose: asyncDisposeAdapted,
|
|
271
|
+
[Symbol.asyncDispose]: asyncDisposeAdapted
|
|
272
|
+
};
|
|
273
|
+
function asyncDisposeAdapted() {
|
|
274
|
+
return disposeAsync(asyncDisposable);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function toDisposableEx(disposable) {
|
|
278
|
+
return isDisposableEx(disposable) ? disposable : {
|
|
279
|
+
dispose: disposeAdapted,
|
|
280
|
+
[Symbol.dispose]: disposeAdapted
|
|
281
|
+
};
|
|
282
|
+
function disposeAdapted() {
|
|
283
|
+
dispose(disposable);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function shouldPerformDispose(isDisposed, multipleDisposeBehavior) {
|
|
287
|
+
if (!isDisposed) {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
switch (multipleDisposeBehavior) {
|
|
291
|
+
case 1 /* Ignore */: {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
case 0 /* Invoke */: {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
case 2 /* Throw */: {
|
|
298
|
+
throw new Error("This disposable has already been disposed.");
|
|
299
|
+
}
|
|
300
|
+
default: {
|
|
301
|
+
assertNever(multipleDisposeBehavior);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export {
|
|
306
|
+
AsyncCallbackDisposable,
|
|
307
|
+
AsyncDisposableBase,
|
|
308
|
+
CallbackDisposable,
|
|
309
|
+
CombineAsyncDisposable,
|
|
310
|
+
CombineDisposable,
|
|
311
|
+
DisposableBase,
|
|
312
|
+
DisposeErrorBehavior,
|
|
313
|
+
DisposeOrder,
|
|
314
|
+
MultipleDisposeBehavior,
|
|
315
|
+
dispose,
|
|
316
|
+
disposeAsync,
|
|
317
|
+
isAsyncDisposable,
|
|
318
|
+
isAsyncDisposableEx,
|
|
319
|
+
isDisposable,
|
|
320
|
+
isDisposableEx,
|
|
321
|
+
toAsyncDisposableEx,
|
|
322
|
+
toDisposableEx
|
|
323
|
+
};
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXNwb3NhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZXJyb3IudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBlcnJvciBzZW1hbnRpY3Mgb2YgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSB3aGVuXG4gKiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZUVycm9yQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGlzcG9zZSBldmVyeSBjaGlsZCBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdywgY29sbGVjdGluZyB0aGUgdGhyb3duIGVycm9ycyBhbmQgcmUtdGhyb3dpbmcgdGhlbVxuICAgKiBhcyBhIHNpbmdsZSB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIEFnZ3JlZ2F0ZSxcblxuICAvKipcbiAgICogUmUtdGhyb3cgdGhlIGZpcnN0IGVycm9yIGEgY2hpbGQgdGhyb3dzIGltbWVkaWF0ZWx5LCBsZWF2aW5nIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdW5kaXNwb3NlZC5cbiAgICovXG4gIEZhaWxGYXN0XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSBkaXNwb3Nlc1xuICogaXRzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgZW51bSBEaXNwb3NlT3JkZXIge1xuICAvKipcbiAgICogRGlzcG9zZSB0aGUgbGFzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChsYXN0LWluLCBmaXJzdC1vdXQpLCBsaWtlIG5lc3RlZCBgdXNpbmdgIGRlY2xhcmF0aW9uc1xuICAgKiB1bndpbmRpbmcgaW4gcmV2ZXJzZS5cbiAgICovXG4gIExpZm8sXG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGZpcnN0LXJlZ2lzdGVyZWQgY2hpbGQgZmlyc3QgKGZpcnN0LWluLCBmaXJzdC1vdXQpLlxuICAgKi9cbiAgRmlmb1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaG93IGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gb3Ige0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBiZWhhdmVzIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgZW51bSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIGV2ZXJ5IGRpc3Bvc2UuXG4gICAqL1xuICBJbnZva2UsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgSWdub3JlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgdGhyb3cuXG4gICAqL1xuICBUaHJvd1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRoYXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBjb252ZW5pZW5jZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfVxuICogbWV0aG9kLCBzbyBhIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuYXN5bmNEaXNwb3NlKClgIGluc3RlYWQgb2YgdGhlIGNsdW5raWVyXG4gKiBgaGFuZGxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRGlzcG9zYWJsZUV4IGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jRGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICgpID0+IFByb21pc2FibGU8dm9pZD47XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENvbWJpbmVBc3luY0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXN5bmMgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zYWJsZXM6IEl0ZXJhYmxlPEFzeW5jRGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2FibGVzOiBJdGVyYWJsZTxEaXNwb3NhYmxlPjtcblxuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZHJlbiBhcmUgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlT3JkZXIuTGlmb31cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcj86IERpc3Bvc2VPcmRlcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGV9XG4gICAqL1xuICByZWFkb25seSBlcnJvckJlaGF2aW9yPzogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIGl0IGlzIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QsIHNvIGFcbiAqIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuZGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llciBgaGFuZGxlW1N5bWJvbC5kaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NhYmxlRXggZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhXG4gKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9KSBhbmQgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IGFsaWFzOyBhIHN1YmNsYXNzIG9ubHlcbiAqIGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBc3luY0Rpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHByb3RlY3RlZCBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBkaXNwb3NhYmxlIGhhcyBiZWVuIGRpc3Bvc2VkIChpdHMgdGVhcmRvd24gaGFzIHJ1biBhdCBsZWFzdCBvbmNlKS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIG9uY2UgZGlzcG9zYWwgaGFzIHN0YXJ0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIENvbnZlbmllbmNlIGFsaWFzIHRoYXQgZGVsZWdhdGVzIHRvIGB0aGlzW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jRGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZUFzeW5jfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtRGlzcG9zZUFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCB0ZWFyZG93bi4gQ2FsbGVkIGF0IG1vc3Qgb25jZSB1bmxlc3Mge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX0gaXMgc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNhYmxlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1EaXNwb3NlQXN5bmMoKTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkIHZpYSBgYXdhaXQgdXNpbmdgIChvciBhIG1hbnVhbFxuICogYGF3YWl0IGRpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWApLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBBc3luY0Rpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGEge0BsaW5rIERpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKWAgYXQgdGhlIGNhbGwgc2l0ZTogaXQgcmVhZHMgYmV0dGVyIGFuZCBrZWVwcyB0aGVcbiAqIHdlbGwta25vd24gc3ltYm9sIHJlZmVyZW5jZWQgaW4gYSBzaW5nbGUgcGxhY2UuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlKGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiB2b2lkIHtcbiAgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgQXN5bmNEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5MaWZvOiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGRpc3Bvc2FibGVzIGFuZCBkaXNwb3NlcyBhbGwgb2YgdGhlbSB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbWJpbmVEaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBEaXNwb3NhYmxlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZU9yZGVyOiBEaXNwb3NlT3JkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcjogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuZGlzcG9zYWJsZXNdO1xuICAgIHRoaXMuZGlzcG9zZU9yZGVyID0gcGFyYW1zLmRpc3Bvc2VPcmRlciA/PyBEaXNwb3NlT3JkZXIuTGlmbztcbiAgICB0aGlzLmVycm9yQmVoYXZpb3IgPSBwYXJhbXMuZXJyb3JCZWhhdmlvciA/PyBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGU7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYWxsIGNvbWJpbmVkIGNoaWxkcmVuIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBEaXNwb3NlT3JkZXJ9LCBhcHBseWluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3J9IHdoZW4gYSBjaGlsZCB0aHJvd3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZ2V0T3JkZXJlZENoaWxkcmVuKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKVxuICAgID8gYXN5bmNEaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBhc3luY0Rpc3Bvc2U6IGFzeW5jRGlzcG9zZUFkYXB0ZWQsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgICB9O1xuXG4gIGZ1bmN0aW9uIGFzeW5jRGlzcG9zZUFkYXB0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRzIGEgcGxhaW4ge0BsaW5rIERpc3Bvc2FibGV9IGludG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgdGhhdCBkZWxlZ2F0ZXMgdG8gYFN5bWJvbC5kaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gYWRhcHRcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gd3JhcHBpbmcgdGhlIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGUpXG4gICAgPyBkaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VBZGFwdGVkXG4gICAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlQWRhcHRlZCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZToge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZToge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsbUJBQW1CO0FBTXJCLElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBS0wsRUFBQUEsNENBQUE7QUFLQSxFQUFBQSw0Q0FBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLGVBQUwsa0JBQUtDLGtCQUFMO0FBS0wsRUFBQUEsNEJBQUE7QUFLQSxFQUFBQSw0QkFBQTtBQVZVLFNBQUFBO0FBQUEsR0FBQTtBQWlCTCxJQUFLLDBCQUFMLGtCQUFLQyw2QkFBTDtBQUlMLEVBQUFBLGtEQUFBO0FBS0EsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQWRVLFNBQUFBO0FBQUEsR0FBQTtBQXlKTCxNQUFlLG9CQUFpRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU0zRCwwQkFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPN0QsSUFBYyxhQUFzQjtBQUNsQyxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFUSxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2YsZUFBOEI7QUFDbkMsV0FBTyxLQUFLLE9BQU8sWUFBWSxFQUFFO0FBQUEsRUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsT0FBTyxZQUFZLElBQW1CO0FBQ2xELFFBQUksQ0FBQyxxQkFBcUIsS0FBSyxhQUFhLEtBQUssdUJBQXVCLEdBQUc7QUFDekU7QUFBQSxJQUNGO0FBRUEsU0FBSyxjQUFjO0FBQ25CLFVBQU0sS0FBSyxvQkFBb0I7QUFBQSxFQUNqQztBQVFGO0FBTU8sTUFBTSxnQ0FBZ0Msb0JBQW9CO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FB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RSxRQUFNLGFBQWE7QUFFbkIsU0FBTyxDQUFDLENBQUMsV0FBVyxPQUFPLE9BQU87QUFDcEM7QUFRTyxTQUFTLGVBQWUsVUFBNkM7QUFDMUUsUUFBTSxlQUFlO0FBQ3JCLFNBQU8sYUFBYSxRQUFRLEtBQUssT0FBTyxhQUFhLFlBQVk7QUFDbkU7QUFXTyxTQUFTLG9CQUFvQixpQkFBcUQ7QUFDdkYsU0FBTyxvQkFBb0IsZUFBZSxJQUN0QyxrQkFDQTtBQUFBLElBQ0EsY0FBYztBQUFBLElBQ2QsQ0FBQyxPQUFPLFlBQVksR0FBRztBQUFBLEVBQ3pCO0FBRUYsV0FBUyxzQkFBcUM7QUFDNUMsV0FBTyxhQUFhLGVBQWU7QUFBQSxFQUNyQztBQUNGO0FBV08sU0FBUyxlQUFlLFlBQXNDO0FBQ25FLFNBQU8sZUFBZSxVQUFVLElBQzVCLGFBQ0E7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULENBQUMsT0FBTyxPQUFPLEdBQUc7QUFBQSxFQUNwQjtBQUVGLFdBQVMsaUJBQXVCO0FBQzlCLFlBQVEsVUFBVTtBQUFBLEVBQ3BCO0FBQ0Y7QUFXQSxTQUFTLHFCQUFxQixZQUFxQix5QkFBMkQ7QUFDNUcsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLFVBQVEseUJBQXlCO0FBQUEsSUFDL0IsS0FBSyxnQkFBZ0M7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssZ0JBQWdDO0FBQ25DLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLGVBQStCO0FBQ2xDLFlBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBLElBQzlEO0FBQUEsSUFDQSxTQUFTO0FBQ1Asa0JBQVksdUJBQXVCO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOlsiRGlzcG9zZUVycm9yQmVoYXZpb3IiLCJEaXNwb3NlT3JkZXIiLCJNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Contains utility functions for enums.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get the key of an enum value.
|
|
9
|
+
*
|
|
10
|
+
* @typeParam T - The enum type.
|
|
11
|
+
* @param enumType - The enum type.
|
|
12
|
+
* @param value - The value to get the key of.
|
|
13
|
+
* @returns The key of the enum value.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getEnumKey<T extends Record<string, string>>(enumType: T, value: T[keyof T]): keyof T;
|
|
16
|
+
/**
|
|
17
|
+
* Get the value of an enum key.
|
|
18
|
+
*
|
|
19
|
+
* @typeParam T - The enum type.
|
|
20
|
+
* @param enumType - The enum type.
|
|
21
|
+
* @param key - The key to get the value of.
|
|
22
|
+
* @returns The value of the enum key.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getEnumValue<T extends Record<string, string>>(enumType: T, key: string): T[keyof T];
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
import { ensureNonNullable } from "./type-guards.mjs";
|
|
7
|
+
function getEnumKey(enumType, value) {
|
|
8
|
+
return ensureNonNullable(Object.keys(enumType).find((k) => enumType[k] === value), `Invalid enum value: ${value}`);
|
|
9
|
+
}
|
|
10
|
+
function getEnumValue(enumType, key) {
|
|
11
|
+
return ensureNonNullable(enumType[key], `Invalid enum key: ${key}`);
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
getEnumKey,
|
|
15
|
+
getEnumValue
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VudW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZW51bXMuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIGtleSBvZiBhbiBlbnVtIHZhbHVlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBlbnVtIHR5cGUuXG4gKiBAcGFyYW0gZW51bVR5cGUgLSBUaGUgZW51bSB0eXBlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGdldCB0aGUga2V5IG9mLlxuICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgZW51bSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1LZXk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KGVudW1UeXBlOiBULCB2YWx1ZTogVFtrZXlvZiBUXSk6IGtleW9mIFQge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoT2JqZWN0LmtleXMoZW51bVR5cGUpLmZpbmQoKGspID0+IGVudW1UeXBlW2tdID09PSB2YWx1ZSksIGBJbnZhbGlkIGVudW0gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBvZiBhbiBlbnVtIGtleS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgZW51bSB0eXBlLlxuICogQHBhcmFtIGVudW1UeXBlIC0gVGhlIGVudW0gdHlwZS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIGdldCB0aGUgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGVudW0ga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihlbnVtVHlwZTogVCwga2V5OiBzdHJpbmcpOiBUW2tleW9mIFRdIHtcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKGVudW1UeXBlW2tleV0sIGBJbnZhbGlkIGVudW0ga2V5OiAke2tleX1gKSBhcyBUW2tleW9mIFRdO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFNQSxTQUFTLHlCQUF5QjtBQVUzQixTQUFTLFdBQTZDLFVBQWEsT0FBNEI7QUFDcEcsU0FBTyxrQkFBa0IsT0FBTyxLQUFLLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLEtBQUssRUFBRTtBQUNuSDtBQVVPLFNBQVMsYUFBK0MsVUFBYSxLQUF5QjtBQUNuRyxTQUFPLGtCQUFrQixTQUFTLEdBQUcsR0FBRyxxQkFBcUIsR0FBRyxFQUFFO0FBQ3BFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/// <reference lib="dom" />
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
*
|
|
6
|
+
* Contains utility functions for error handling.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* A message of the AsyncWrapperError.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
|
|
12
|
+
/**
|
|
13
|
+
* Parameters for the {@link CustomStackTraceError} constructor.
|
|
14
|
+
*/
|
|
15
|
+
export interface CustomStackTraceErrorConstructorParams {
|
|
16
|
+
/**
|
|
17
|
+
* The cause of the error.
|
|
18
|
+
*/
|
|
19
|
+
readonly cause: unknown;
|
|
20
|
+
/**
|
|
21
|
+
* The message of the error.
|
|
22
|
+
*/
|
|
23
|
+
readonly message: string;
|
|
24
|
+
/**
|
|
25
|
+
* The stack trace of the error.
|
|
26
|
+
*/
|
|
27
|
+
readonly stackTrace: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* An error that wraps an error with a custom stack trace.
|
|
31
|
+
*/
|
|
32
|
+
export declare class CustomStackTraceError extends Error {
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new CustomStackTraceError.
|
|
35
|
+
*
|
|
36
|
+
* @param params - The parameters for the error.
|
|
37
|
+
*/
|
|
38
|
+
constructor(params: CustomStackTraceErrorConstructorParams);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* An error that wraps a non-`Error` value that was thrown, preserving the original value in `cause`.
|
|
42
|
+
*/
|
|
43
|
+
export declare class ErrorWrapper extends Error {
|
|
44
|
+
/**
|
|
45
|
+
* Creates a new ErrorWrapper.
|
|
46
|
+
*
|
|
47
|
+
* @param thrownValue - The original non-`Error` value that was thrown.
|
|
48
|
+
*/
|
|
49
|
+
constructor(thrownValue: unknown);
|
|
50
|
+
/**
|
|
51
|
+
* Normalizes any thrown value to an `Error`.
|
|
52
|
+
*
|
|
53
|
+
* Returns the value unchanged if it is already an `Error`, otherwise wraps it in an {@link ErrorWrapper}.
|
|
54
|
+
*
|
|
55
|
+
* @param thrownValue - The thrown value to normalize.
|
|
56
|
+
* @returns An `Error` instance: the original value if it is already an `Error`, otherwise an {@link ErrorWrapper}.
|
|
57
|
+
*/
|
|
58
|
+
static create(thrownValue: unknown): Error;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* An error that is not printed to the console.
|
|
62
|
+
*/
|
|
63
|
+
export declare class SilentError extends Error {
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new SilentError.
|
|
66
|
+
*
|
|
67
|
+
* @param message - The message of the error.
|
|
68
|
+
*/
|
|
69
|
+
constructor(message: string);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Empties the collection window opened by {@link startCollectingUnhandledAsyncErrors} and returns what it
|
|
73
|
+
* held, leaving the window **open** so errors emitted afterwards keep being collected.
|
|
74
|
+
*
|
|
75
|
+
* This is what the test setup's (`@mnaoumov/typescript-test-toolkit/setup`) `beforeEach` / `afterEach` use, rather than
|
|
76
|
+
* {@link stopCollectingUnhandledAsyncErrors}: an async error emitted in the gap between two tests (e.g. by a
|
|
77
|
+
* `setTimeout` the test left pending) would otherwise land on a closed window and vanish unreported.
|
|
78
|
+
*
|
|
79
|
+
* @returns The unhandled async errors collected so far, or an empty array if no window is open.
|
|
80
|
+
*/
|
|
81
|
+
export declare function drainCollectedUnhandledAsyncErrors(): unknown[];
|
|
82
|
+
/**
|
|
83
|
+
* Emits an asynchronous error event.
|
|
84
|
+
*
|
|
85
|
+
* When a collection window is open (see {@link startCollectingUnhandledAsyncErrors}) the error is
|
|
86
|
+
* collected as unhandled unless it is ignored — either because `shouldIgnore` is `true` or an
|
|
87
|
+
* {@link startAsyncErrorIgnoreContext} scope is active. A registered consumer handler deliberately does
|
|
88
|
+
* **not** exempt the error: in production it shows the user a Notice, which is not a test asserting that
|
|
89
|
+
* the error was expected. {@link startAsyncErrorIgnoreContext} is the single, explicit opt-out.
|
|
90
|
+
*
|
|
91
|
+
* @param asyncError - The error to emit as an asynchronous error event.
|
|
92
|
+
* @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.
|
|
93
|
+
*/
|
|
94
|
+
export declare function emitAsyncErrorEvent(asyncError: unknown, shouldIgnore?: boolean): void;
|
|
95
|
+
/**
|
|
96
|
+
* Converts an error to a string representation, including nested causes and the aggregated errors of
|
|
97
|
+
* an `AggregateError`, with indentation.
|
|
98
|
+
*
|
|
99
|
+
* @param error - The error to convert to a string.
|
|
100
|
+
* @returns The string representation of the error.
|
|
101
|
+
*/
|
|
102
|
+
export declare function errorToString(error: unknown): string;
|
|
103
|
+
/**
|
|
104
|
+
* Gets the current stack trace as a string, excluding the current function call.
|
|
105
|
+
*
|
|
106
|
+
* @param framesToSkip - The number of frames to skip in the stack trace.
|
|
107
|
+
* @returns A string representation of the current stack trace, excluding the current function call.
|
|
108
|
+
*/
|
|
109
|
+
export declare function getStackTrace(framesToSkip?: number): string;
|
|
110
|
+
/**
|
|
111
|
+
* Checks whether an {@link startAsyncErrorIgnoreContext} scope is currently active.
|
|
112
|
+
*
|
|
113
|
+
* @returns `true` if at least one ignore context is active, `false` otherwise.
|
|
114
|
+
*/
|
|
115
|
+
export declare function isAsyncErrorIgnoreContextActive(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Prints an error to the console, including nested causes and optional ANSI sequence clearing.
|
|
118
|
+
*
|
|
119
|
+
* @param error - The error to print.
|
|
120
|
+
* @param console - The console to print to (default: `globalThis.console`).
|
|
121
|
+
*/
|
|
122
|
+
export declare function printError(error: unknown, console?: Console): void;
|
|
123
|
+
/**
|
|
124
|
+
* Registers an event handler for asynchronous errors.
|
|
125
|
+
*
|
|
126
|
+
* Registering a handler does not mark the errors it receives as expected — see
|
|
127
|
+
* {@link emitAsyncErrorEvent}. A test that deliberately triggers an async error opens a
|
|
128
|
+
* {@link startAsyncErrorIgnoreContext} scope regardless of who is listening.
|
|
129
|
+
*
|
|
130
|
+
* @param handler - The handler function to be called when an asynchronous error event occurs.
|
|
131
|
+
* @returns A {@link Disposable} that unregisters the handler when disposed, for use with `using`.
|
|
132
|
+
*/
|
|
133
|
+
export declare function registerAsyncErrorEventHandler(handler: (asyncError: unknown) => void): Disposable;
|
|
134
|
+
/**
|
|
135
|
+
* Opens an ignore context in which async errors are treated as expected rather than unhandled, so the
|
|
136
|
+
* test harness does not fail the test.
|
|
137
|
+
*
|
|
138
|
+
* While the returned disposable is held, an async error emitted directly (see
|
|
139
|
+
* {@link emitAsyncErrorEvent}) is not collected as unhandled. Crucially, a fire-and-forget operation
|
|
140
|
+
* scheduled within the scope (e.g. via {@link async!invokeAsyncSafely}) is also ignored when it later
|
|
141
|
+
* rejects — even after the scope has exited — because {@link async!addErrorHandler} captures the active
|
|
142
|
+
* ignore context at schedule time. A test therefore does not need to drain the operation itself:
|
|
143
|
+
*
|
|
144
|
+
* ```ts
|
|
145
|
+
* it('does not fail', () => {
|
|
146
|
+
* using _ = startAsyncErrorIgnoreContext();
|
|
147
|
+
* invokeAsyncSafely(() => Promise.reject(new Error('deliberately swallowed')));
|
|
148
|
+
* });
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* Contexts nest; the ignore only ends once every open context has been disposed.
|
|
152
|
+
*
|
|
153
|
+
* @returns A {@link Disposable} that closes the ignore context when disposed, for use with `using`.
|
|
154
|
+
*/
|
|
155
|
+
export declare function startAsyncErrorIgnoreContext(): Disposable;
|
|
156
|
+
/**
|
|
157
|
+
* Opens a window in which async errors emitted outside an ignore context are collected as unhandled
|
|
158
|
+
* (see {@link emitAsyncErrorEvent}), discarding anything collected by a previous window.
|
|
159
|
+
*
|
|
160
|
+
* Intended for the test harness only: the per-test setup opens a window before each test and empties it
|
|
161
|
+
* after each test via {@link drainCollectedUnhandledAsyncErrors}, closing it for good with
|
|
162
|
+
* {@link stopCollectingUnhandledAsyncErrors} once the file's last test has run. In production no window
|
|
163
|
+
* is open, so emitting an async error carries no bookkeeping overhead.
|
|
164
|
+
*/
|
|
165
|
+
export declare function startCollectingUnhandledAsyncErrors(): void;
|
|
166
|
+
/**
|
|
167
|
+
* Closes the window opened by {@link startCollectingUnhandledAsyncErrors} and returns the unhandled
|
|
168
|
+
* async errors collected while it was open.
|
|
169
|
+
*
|
|
170
|
+
* Use {@link drainCollectedUnhandledAsyncErrors} instead wherever collection must continue afterwards —
|
|
171
|
+
* once the window is closed, a later async error is not collected by anyone.
|
|
172
|
+
*
|
|
173
|
+
* @returns The collected unhandled async errors, or an empty array if no window was open.
|
|
174
|
+
*/
|
|
175
|
+
export declare function stopCollectingUnhandledAsyncErrors(): unknown[];
|
|
176
|
+
/**
|
|
177
|
+
* Throws an error with the specified message.
|
|
178
|
+
*
|
|
179
|
+
* @param error - The error to throw.
|
|
180
|
+
* @throws
|
|
181
|
+
*/
|
|
182
|
+
export declare function throwExpression(error: unknown): never;
|