@riddance/host 0.0.8 → 0.0.10
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/context.d.ts +0 -7
- package/context.js +2 -20
- package/{lib → host}/context.d.ts +0 -1
- package/host/context.js +90 -0
- package/{lib → host}/emitter.d.ts +0 -0
- package/host/emitter.js +68 -0
- package/{lib → host}/http.d.ts +1 -1
- package/{lib → host}/http.js +1 -1
- package/{lib → host}/logging.d.ts +0 -0
- package/host/logging.js +191 -0
- package/{lib → host}/reflect.d.ts +3 -3
- package/{lib → host}/reflect.js +1 -1
- package/{lib → host}/registry.d.ts +0 -0
- package/host/registry.js +61 -0
- package/http.js +2 -2
- package/package.json +36 -36
- package/lib/context.js +0 -102
- package/lib/emitter.js +0 -81
- package/lib/logging.js +0 -205
- package/lib/registry.js +0 -61
package/lib/logging.js
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _LogBuffer_instances, _LogBuffer_transport, _LogBuffer_entries, _LogBuffer_size, _LogBuffer_flusher, _LogBuffer_signal, _LogBuffer_asyncTransport, _LogBuffer_timeout, _LogBuffer_startFlush, _EnrichingLogger_buffer, _EnrichingLogger_reservedEnrichment, _EnrichingLogger_customEnrichment, _EnrichingLogger_level;
|
|
13
|
-
import { performance } from 'perf_hooks';
|
|
14
|
-
export function makeLogger(transport, minimumLogLevel, signal) {
|
|
15
|
-
return new EnrichingLogger(new LogBuffer(transport, signal), minimumLogLevel
|
|
16
|
-
? ['fatal', 'error', 'warning', 'info', 'debug', 'trace'].indexOf(minimumLogLevel)
|
|
17
|
-
: 5, signal);
|
|
18
|
-
}
|
|
19
|
-
const performanceTimeOrigin100ns = Math.round(performance.timeOrigin * 10000);
|
|
20
|
-
export function highPrecisionISODate(performanceNow) {
|
|
21
|
-
const now100ns = performanceTimeOrigin100ns + Math.round(performanceNow * 10000);
|
|
22
|
-
return (new Date(now100ns / 10000).toISOString().substring(0, 20) +
|
|
23
|
-
(now100ns % 10000000).toString().padStart(7, '0') +
|
|
24
|
-
'Z');
|
|
25
|
-
}
|
|
26
|
-
class LogBuffer {
|
|
27
|
-
constructor(transport, signal) {
|
|
28
|
-
_LogBuffer_instances.add(this);
|
|
29
|
-
_LogBuffer_transport.set(this, void 0);
|
|
30
|
-
_LogBuffer_entries.set(this, []);
|
|
31
|
-
_LogBuffer_size.set(this, 0);
|
|
32
|
-
_LogBuffer_flusher.set(this, void 0);
|
|
33
|
-
_LogBuffer_signal.set(this, void 0);
|
|
34
|
-
_LogBuffer_asyncTransport.set(this, void 0);
|
|
35
|
-
_LogBuffer_timeout.set(this, void 0);
|
|
36
|
-
__classPrivateFieldSet(this, _LogBuffer_transport, transport, "f");
|
|
37
|
-
__classPrivateFieldSet(this, _LogBuffer_signal, signal, "f");
|
|
38
|
-
}
|
|
39
|
-
collect(level, numericLogLevel, message, error, fields, reservedEnrichment, customEnrichment) {
|
|
40
|
-
const offset = performance.now();
|
|
41
|
-
const json = JSON.stringify({
|
|
42
|
-
timestamp: highPrecisionISODate(offset),
|
|
43
|
-
level,
|
|
44
|
-
message,
|
|
45
|
-
error: errorAsJson(error),
|
|
46
|
-
...reservedEnrichment,
|
|
47
|
-
...((fields || customEnrichment) && {
|
|
48
|
-
fields: customEnrichment
|
|
49
|
-
? fields
|
|
50
|
-
? { ...customEnrichment, ...fields }
|
|
51
|
-
: customEnrichment
|
|
52
|
-
: fields,
|
|
53
|
-
}),
|
|
54
|
-
});
|
|
55
|
-
__classPrivateFieldGet(this, _LogBuffer_entries, "f").push({
|
|
56
|
-
timestamp: offset,
|
|
57
|
-
level,
|
|
58
|
-
message,
|
|
59
|
-
error,
|
|
60
|
-
json,
|
|
61
|
-
});
|
|
62
|
-
__classPrivateFieldSet(this, _LogBuffer_size, __classPrivateFieldGet(this, _LogBuffer_size, "f") + json.length, "f");
|
|
63
|
-
if (__classPrivateFieldGet(this, _LogBuffer_asyncTransport, "f") === false) {
|
|
64
|
-
// eslint-disable-next-line no-void
|
|
65
|
-
void __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(__classPrivateFieldGet(this, _LogBuffer_entries, "f"), __classPrivateFieldGet(this, _LogBuffer_signal, "f"));
|
|
66
|
-
__classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
|
|
67
|
-
__classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
|
|
68
|
-
}
|
|
69
|
-
else if (__classPrivateFieldGet(this, _LogBuffer_asyncTransport, "f") === undefined) {
|
|
70
|
-
__classPrivateFieldSet(this, _LogBuffer_asyncTransport, true, "f");
|
|
71
|
-
setImmediate(() => {
|
|
72
|
-
if (__classPrivateFieldGet(this, _LogBuffer_flusher, "f")) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const sendResult = __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(__classPrivateFieldGet(this, _LogBuffer_entries, "f"), __classPrivateFieldGet(this, _LogBuffer_signal, "f"));
|
|
76
|
-
__classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
|
|
77
|
-
__classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
|
|
78
|
-
if (sendResult) {
|
|
79
|
-
__classPrivateFieldSet(this, _LogBuffer_flusher, sendResult, "f");
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
__classPrivateFieldSet(this, _LogBuffer_asyncTransport, false, "f");
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
if (numericLogLevel < 2 || __classPrivateFieldGet(this, _LogBuffer_entries, "f").length > 8 || __classPrivateFieldGet(this, _LogBuffer_size, "f") > 64000) {
|
|
88
|
-
// eslint-disable-next-line no-void
|
|
89
|
-
void this.flush();
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
__classPrivateFieldSet(this, _LogBuffer_timeout, setTimeout(() => {
|
|
93
|
-
// eslint-disable-next-line no-void
|
|
94
|
-
void this.flush();
|
|
95
|
-
__classPrivateFieldSet(this, _LogBuffer_timeout, undefined, "f");
|
|
96
|
-
}, 2000), "f");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
async flush() {
|
|
101
|
-
if (__classPrivateFieldGet(this, _LogBuffer_entries, "f").length === 0) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
__classPrivateFieldGet(this, _LogBuffer_instances, "m", _LogBuffer_startFlush).call(this, __classPrivateFieldGet(this, _LogBuffer_entries, "f"));
|
|
105
|
-
__classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
|
|
106
|
-
__classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
|
|
107
|
-
if (__classPrivateFieldGet(this, _LogBuffer_timeout, "f")) {
|
|
108
|
-
clearTimeout(__classPrivateFieldGet(this, _LogBuffer_timeout, "f"));
|
|
109
|
-
__classPrivateFieldSet(this, _LogBuffer_timeout, undefined, "f");
|
|
110
|
-
}
|
|
111
|
-
return await __classPrivateFieldGet(this, _LogBuffer_flusher, "f");
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
_LogBuffer_transport = new WeakMap(), _LogBuffer_entries = new WeakMap(), _LogBuffer_size = new WeakMap(), _LogBuffer_flusher = new WeakMap(), _LogBuffer_signal = new WeakMap(), _LogBuffer_asyncTransport = new WeakMap(), _LogBuffer_timeout = new WeakMap(), _LogBuffer_instances = new WeakSet(), _LogBuffer_startFlush = function _LogBuffer_startFlush(entries) {
|
|
115
|
-
if (__classPrivateFieldGet(this, _LogBuffer_flusher, "f")) {
|
|
116
|
-
__classPrivateFieldSet(this, _LogBuffer_flusher, __classPrivateFieldGet(this, _LogBuffer_flusher, "f").then(() => __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(entries, __classPrivateFieldGet(this, _LogBuffer_signal, "f"))), "f");
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
__classPrivateFieldSet(this, _LogBuffer_flusher, __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(entries, __classPrivateFieldGet(this, _LogBuffer_signal, "f")), "f");
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
class EnrichingLogger {
|
|
123
|
-
constructor(buffer, level, reservedEnrichment, customEnrichment) {
|
|
124
|
-
_EnrichingLogger_buffer.set(this, void 0);
|
|
125
|
-
_EnrichingLogger_reservedEnrichment.set(this, void 0);
|
|
126
|
-
_EnrichingLogger_customEnrichment.set(this, void 0);
|
|
127
|
-
_EnrichingLogger_level.set(this, void 0);
|
|
128
|
-
__classPrivateFieldSet(this, _EnrichingLogger_buffer, buffer, "f");
|
|
129
|
-
__classPrivateFieldSet(this, _EnrichingLogger_level, level, "f");
|
|
130
|
-
__classPrivateFieldSet(this, _EnrichingLogger_reservedEnrichment, reservedEnrichment, "f");
|
|
131
|
-
__classPrivateFieldSet(this, _EnrichingLogger_customEnrichment, customEnrichment, "f");
|
|
132
|
-
}
|
|
133
|
-
enrich(fields) {
|
|
134
|
-
return new EnrichingLogger(__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f"), __classPrivateFieldGet(this, _EnrichingLogger_level, "f"), __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), {
|
|
135
|
-
...(__classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f") ?? {}),
|
|
136
|
-
...fields,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
flush() {
|
|
140
|
-
return __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").flush();
|
|
141
|
-
}
|
|
142
|
-
enrichReserved(fields) {
|
|
143
|
-
return new EnrichingLogger(__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f"), __classPrivateFieldGet(this, _EnrichingLogger_level, "f"), {
|
|
144
|
-
...(__classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f") ?? {}),
|
|
145
|
-
...fields,
|
|
146
|
-
}, __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
147
|
-
}
|
|
148
|
-
trace(message, error, fields) {
|
|
149
|
-
if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 5) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('trace', 5, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
153
|
-
}
|
|
154
|
-
debug(message, error, fields) {
|
|
155
|
-
if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 4) {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('debug', 4, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
159
|
-
}
|
|
160
|
-
info(message, error, fields) {
|
|
161
|
-
if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 3) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('info', 3, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
165
|
-
}
|
|
166
|
-
warn(message, error, fields) {
|
|
167
|
-
if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 2) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('warning', 2, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
171
|
-
}
|
|
172
|
-
error(message, error, fields) {
|
|
173
|
-
if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 1) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('error', 1, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
177
|
-
}
|
|
178
|
-
fatal(message, error, fields) {
|
|
179
|
-
__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('fatal', 0, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
_EnrichingLogger_buffer = new WeakMap(), _EnrichingLogger_reservedEnrichment = new WeakMap(), _EnrichingLogger_customEnrichment = new WeakMap(), _EnrichingLogger_level = new WeakMap();
|
|
183
|
-
function errorAsJson(error) {
|
|
184
|
-
if (error === undefined || error === null) {
|
|
185
|
-
return undefined;
|
|
186
|
-
}
|
|
187
|
-
if (error instanceof Error) {
|
|
188
|
-
return {
|
|
189
|
-
message: error.message,
|
|
190
|
-
name: error.name,
|
|
191
|
-
stack: error.stack,
|
|
192
|
-
...error,
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
if (error instanceof Object) {
|
|
196
|
-
return {
|
|
197
|
-
...error,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
return {
|
|
201
|
-
message: error?.toString(),
|
|
202
|
-
name: typeof error,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUl4QyxNQUFNLFVBQVUsVUFBVSxDQUN0QixTQUF1QixFQUN2QixlQUFxQyxFQUNyQyxNQUFtQjtJQUVuQixPQUFPLElBQUksZUFBZSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQ2hDLGVBQWU7UUFDWCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUMsRUFDUCxNQUFNLENBQ1QsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQTtBQUU3RSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDdkQsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDaEYsT0FBTyxDQUNILElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNqRCxHQUFHLENBQ04sQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFNBQVM7SUFTWCxZQUFZLFNBQXVCLEVBQUUsTUFBbUI7O1FBUnhELHVDQUFpQztRQUNqQyw2QkFBdUIsRUFBRSxFQUFBO1FBQ3pCLDBCQUFRLENBQUMsRUFBQTtRQUNULHFDQUFvQztRQUNwQyxvQ0FBNkI7UUFDN0IsNENBQW9DO1FBQ3BDLHFDQUFvQztRQUdoQyx1QkFBQSxJQUFJLHdCQUFjLFNBQVMsTUFBQSxDQUFBO1FBQzNCLHVCQUFBLElBQUkscUJBQVcsTUFBTSxNQUFBLENBQUE7SUFDekIsQ0FBQztJQUVELE9BQU8sQ0FDSCxLQUFlLEVBQ2YsZUFBdUIsRUFDdkIsT0FBZSxFQUNmLEtBQWMsRUFDZCxNQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsZ0JBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDdkMsS0FBSztZQUNMLE9BQU87WUFDUCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN6QixHQUFHLGtCQUFrQjtZQUNyQixHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSTtnQkFDaEMsTUFBTSxFQUFFLGdCQUFnQjtvQkFDcEIsQ0FBQyxDQUFDLE1BQU07d0JBQ0osQ0FBQyxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRTt3QkFDcEMsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDdEIsQ0FBQyxDQUFDLE1BQU07YUFDZixDQUFDO1NBQ0wsQ0FBQyxDQUFBO1FBQ0YsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLElBQUksQ0FBQztZQUNmLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLEtBQUs7WUFDTCxPQUFPO1lBQ1AsS0FBSztZQUNMLElBQUk7U0FDUCxDQUFDLENBQUE7UUFDRixtR0FBYyxJQUFJLENBQUMsTUFBTSxNQUFBLENBQUE7UUFFekIsSUFBSSx1QkFBQSxJQUFJLGlDQUFnQixLQUFLLEtBQUssRUFBRTtZQUNoQyxtQ0FBbUM7WUFDbkMsS0FBSyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUksMEJBQVMsRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FBQTtZQUM3RCx1QkFBQSxJQUFJLHNCQUFZLEVBQUUsTUFBQSxDQUFBO1lBQ2xCLHVCQUFBLElBQUksbUJBQVMsQ0FBQyxNQUFBLENBQUE7U0FDakI7YUFBTSxJQUFJLHVCQUFBLElBQUksaUNBQWdCLEtBQUssU0FBUyxFQUFFO1lBQzNDLHVCQUFBLElBQUksNkJBQW1CLElBQUksTUFBQSxDQUFBO1lBQzNCLFlBQVksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSx1QkFBQSxJQUFJLDBCQUFTLEVBQUU7b0JBQ2YsT0FBTTtpQkFDVDtnQkFDRCxNQUFNLFVBQVUsR0FBRyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUksMEJBQVMsRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FBQTtnQkFDM0UsdUJBQUEsSUFBSSxzQkFBWSxFQUFFLE1BQUEsQ0FBQTtnQkFDbEIsdUJBQUEsSUFBSSxtQkFBUyxDQUFDLE1BQUEsQ0FBQTtnQkFDZCxJQUFJLFVBQVUsRUFBRTtvQkFDWix1QkFBQSxJQUFJLHNCQUFZLFVBQVUsTUFBQSxDQUFBO2lCQUM3QjtxQkFBTTtvQkFDSCx1QkFBQSxJQUFJLDZCQUFtQixLQUFLLE1BQUEsQ0FBQTtpQkFDL0I7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO2FBQU07WUFDSCxJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksdUJBQUEsSUFBSSwwQkFBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksdUJBQUEsSUFBSSx1QkFBTSxHQUFHLEtBQUssRUFBRTtnQkFDdkUsbUNBQW1DO2dCQUNuQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUNwQjtpQkFBTTtnQkFDSCx1QkFBQSxJQUFJLHNCQUFZLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQzVCLG1DQUFtQztvQkFDbkMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7b0JBQ2pCLHVCQUFBLElBQUksc0JBQVksU0FBUyxNQUFBLENBQUE7Z0JBQzdCLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBQSxDQUFBO2FBQ1g7U0FDSjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksdUJBQUEsSUFBSSwwQkFBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsT0FBTTtTQUNUO1FBQ0QsdUJBQUEsSUFBSSxtREFBWSxNQUFoQixJQUFJLEVBQWEsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLENBQUE7UUFDL0IsdUJBQUEsSUFBSSxzQkFBWSxFQUFFLE1BQUEsQ0FBQTtRQUNsQix1QkFBQSxJQUFJLG1CQUFTLENBQUMsTUFBQSxDQUFBO1FBQ2QsSUFBSSx1QkFBQSxJQUFJLDBCQUFTLEVBQUU7WUFDZixZQUFZLENBQUMsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLENBQUE7WUFDM0IsdUJBQUEsSUFBSSxzQkFBWSxTQUFTLE1BQUEsQ0FBQTtTQUM1QjtRQUNELE9BQU8sTUFBTSx1QkFBQSxJQUFJLDBCQUFTLENBQUE7SUFDOUIsQ0FBQztDQVdKOzhWQVRlLE9BQW1CO0lBQzNCLElBQUksdUJBQUEsSUFBSSwwQkFBUyxFQUFFO1FBQ2YsdUJBQUEsSUFBSSxzQkFBWSx1QkFBQSxJQUFJLDBCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNwQyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FDckQsTUFBQSxDQUFBO0tBQ0o7U0FBTTtRQUNILHVCQUFBLElBQUksc0JBQVksdUJBQUEsSUFBSSw0QkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsdUJBQUEsSUFBSSx5QkFBUSxDQUFDLE1BQUEsQ0FBQTtLQUNyRTtBQUNMLENBQUM7QUFHTCxNQUFNLGVBQWU7SUFNakIsWUFDSSxNQUFpQixFQUNqQixLQUFhLEVBQ2Isa0JBQTJCLEVBQzNCLGdCQUF5QjtRQVQ3QiwwQ0FBMkI7UUFDM0Isc0RBQXFDO1FBQ3JDLG9EQUFtQztRQUNuQyx5Q0FBdUI7UUFRbkIsdUJBQUEsSUFBSSwyQkFBVyxNQUFNLE1BQUEsQ0FBQTtRQUNyQix1QkFBQSxJQUFJLDBCQUFVLEtBQUssTUFBQSxDQUFBO1FBQ25CLHVCQUFBLElBQUksdUNBQXVCLGtCQUFrQixNQUFBLENBQUE7UUFDN0MsdUJBQUEsSUFBSSxxQ0FBcUIsZ0JBQWdCLE1BQUEsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDakIsT0FBTyxJQUFJLGVBQWUsQ0FBQyx1QkFBQSxJQUFJLCtCQUFRLEVBQUUsdUJBQUEsSUFBSSw4QkFBTyxFQUFFLHVCQUFBLElBQUksMkNBQW9CLEVBQUU7WUFDNUUsR0FBRyxDQUFDLHVCQUFBLElBQUkseUNBQWtCLElBQUksRUFBRSxDQUFDO1lBQ2pDLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyx1QkFBQSxJQUFJLCtCQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjO1FBQ3pCLE9BQU8sSUFBSSxlQUFlLENBQ3RCLHVCQUFBLElBQUksK0JBQVEsRUFDWix1QkFBQSxJQUFJLDhCQUFPLEVBQ1g7WUFDSSxHQUFHLENBQUMsdUJBQUEsSUFBSSwyQ0FBb0IsSUFBSSxFQUFFLENBQUM7WUFDbkMsR0FBRyxNQUFNO1NBQ1osRUFDRCx1QkFBQSxJQUFJLHlDQUFrQixDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQTBCO1FBQzdELElBQUksdUJBQUEsSUFBSSw4QkFBTyxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFNO1NBQ1Q7UUFDRCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixPQUFPLEVBQ1AsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSx1QkFBQSxJQUFJLDhCQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU07U0FDVDtRQUNELHVCQUFBLElBQUksK0JBQVEsQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQUEsSUFBSSwyQ0FBb0IsRUFDeEIsdUJBQUEsSUFBSSx5Q0FBa0IsQ0FDekIsQ0FBQTtJQUNMLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUEwQjtRQUM1RCxJQUFJLHVCQUFBLElBQUksOEJBQU8sR0FBRyxDQUFDLEVBQUU7WUFDakIsT0FBTTtTQUNUO1FBQ0QsdUJBQUEsSUFBSSwrQkFBUSxDQUFDLE9BQU8sQ0FDaEIsTUFBTSxFQUNOLENBQUMsRUFDRCxPQUFPLEVBQ1AsS0FBSyxFQUNMLE1BQU0sRUFDTix1QkFBQSxJQUFJLDJDQUFvQixFQUN4Qix1QkFBQSxJQUFJLHlDQUFrQixDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQTBCO1FBQzVELElBQUksdUJBQUEsSUFBSSw4QkFBTyxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFNO1NBQ1Q7UUFDRCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixTQUFTLEVBQ1QsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSx1QkFBQSxJQUFJLDhCQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU07U0FDVDtRQUNELHVCQUFBLElBQUksK0JBQVEsQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQUEsSUFBSSwyQ0FBb0IsRUFDeEIsdUJBQUEsSUFBSSx5Q0FBa0IsQ0FDekIsQ0FBQTtJQUNMLENBQUM7SUFDRCxLQUFLLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUEwQjtRQUM3RCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixPQUFPLEVBQ1AsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0NBQ0o7O0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtRQUN2QyxPQUFPLFNBQVMsQ0FBQTtLQUNuQjtJQUNELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtRQUN4QixPQUFPO1lBQ0gsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsR0FBSSxLQUErQztTQUM5QyxDQUFBO0tBQ1o7SUFDRCxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUU7UUFDekIsT0FBTztZQUNILEdBQUcsS0FBSztTQUNILENBQUE7S0FDWjtJQUNELE9BQU87UUFDSCxPQUFPLEVBQUcsS0FBNEIsRUFBRSxRQUFRLEVBQUU7UUFDbEQsSUFBSSxFQUFFLE9BQU8sS0FBSztLQUNiLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGVyZm9ybWFuY2UgfSBmcm9tICdwZXJmX2hvb2tzJ1xyXG5pbXBvcnQgeyBBYm9ydFNpZ25hbCwgSnNvbiwgTG9nZ2VyIH0gZnJvbSAnLi4vY29udGV4dC5qcydcclxuaW1wb3J0IHsgTG9nRW50cnksIExvZ0xldmVsLCBMb2dUcmFuc3BvcnQsIFJvb3RMb2dnZXIgfSBmcm9tICcuL2NvbnRleHQuanMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvZ2dlcihcclxuICAgIHRyYW5zcG9ydDogTG9nVHJhbnNwb3J0LFxyXG4gICAgbWluaW11bUxvZ0xldmVsOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCxcclxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwsXHJcbik6IFJvb3RMb2dnZXIge1xyXG4gICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXHJcbiAgICAgICAgbmV3IExvZ0J1ZmZlcih0cmFuc3BvcnQsIHNpZ25hbCksXHJcbiAgICAgICAgbWluaW11bUxvZ0xldmVsXHJcbiAgICAgICAgICAgID8gWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2luZm8nLCAnZGVidWcnLCAndHJhY2UnXS5pbmRleE9mKG1pbmltdW1Mb2dMZXZlbClcclxuICAgICAgICAgICAgOiA1LFxyXG4gICAgICAgIHNpZ25hbCxcclxuICAgIClcclxufVxyXG5cclxuY29uc3QgcGVyZm9ybWFuY2VUaW1lT3JpZ2luMTAwbnMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKiAxMDAwMClcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBub3cxMDBucyA9IHBlcmZvcm1hbmNlVGltZU9yaWdpbjEwMG5zICsgTWF0aC5yb3VuZChwZXJmb3JtYW5jZU5vdyAqIDEwMDAwKVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBuZXcgRGF0ZShub3cxMDBucyAvIDEwMDAwKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAyMCkgK1xyXG4gICAgICAgIChub3cxMDBucyAlIDEwMDAwMDAwKS50b1N0cmluZygpLnBhZFN0YXJ0KDcsICcwJykgK1xyXG4gICAgICAgICdaJ1xyXG4gICAgKVxyXG59XHJcblxyXG5jbGFzcyBMb2dCdWZmZXIge1xyXG4gICAgcmVhZG9ubHkgI3RyYW5zcG9ydDogTG9nVHJhbnNwb3J0XHJcbiAgICAjZW50cmllczogTG9nRW50cnlbXSA9IFtdXHJcbiAgICAjc2l6ZSA9IDBcclxuICAgICNmbHVzaGVyPzogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxyXG4gICAgcmVhZG9ubHkgI3NpZ25hbDogQWJvcnRTaWduYWxcclxuICAgICNhc3luY1RyYW5zcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZFxyXG4gICAgI3RpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcclxuICAgICAgICB0aGlzLiN0cmFuc3BvcnQgPSB0cmFuc3BvcnRcclxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcclxuICAgIH1cclxuXHJcbiAgICBjb2xsZWN0KFxyXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcclxuICAgICAgICBudW1lcmljTG9nTGV2ZWw6IG51bWJlcixcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgZXJyb3I6IHVua25vd24sXHJcbiAgICAgICAgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgcmVzZXJ2ZWRFbnJpY2htZW50OiBvYmplY3QgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGhpZ2hQcmVjaXNpb25JU09EYXRlKG9mZnNldCksXHJcbiAgICAgICAgICAgIGxldmVsLFxyXG4gICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JBc0pzb24oZXJyb3IpLFxyXG4gICAgICAgICAgICAuLi5yZXNlcnZlZEVucmljaG1lbnQsXHJcbiAgICAgICAgICAgIC4uLigoZmllbGRzIHx8IGN1c3RvbUVucmljaG1lbnQpICYmIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkczogY3VzdG9tRW5yaWNobWVudFxyXG4gICAgICAgICAgICAgICAgICAgID8gZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyAuLi5jdXN0b21FbnJpY2htZW50LCAuLi5maWVsZHMgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN1c3RvbUVucmljaG1lbnRcclxuICAgICAgICAgICAgICAgICAgICA6IGZpZWxkcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLiNlbnRyaWVzLnB1c2goe1xyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9mZnNldCxcclxuICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBqc29uLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBqc29uLmxlbmd0aFxyXG5cclxuICAgICAgICBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXHJcbiAgICAgICAgICAgIHZvaWQgdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKHRoaXMuI2VudHJpZXMsIHRoaXMuI3NpZ25hbClcclxuICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgICAgIHRoaXMuI3NpemUgPSAwXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNhc3luY1RyYW5zcG9ydCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXN1bHQgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXModGhpcy4jZW50cmllcywgdGhpcy4jc2lnbmFsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgICAgICAgICB0aGlzLiNzaXplID0gMFxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gc2VuZFJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNhc3luY1RyYW5zcG9ydCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG51bWVyaWNMb2dMZXZlbCA8IDIgfHwgdGhpcy4jZW50cmllcy5sZW5ndGggPiA4IHx8IHRoaXMuI3NpemUgPiA2NDAwMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcclxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5mbHVzaCgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcclxuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2VudHJpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNzdGFydEZsdXNoKHRoaXMuI2VudHJpZXMpXHJcbiAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDBcclxuICAgICAgICBpZiAodGhpcy4jdGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dClcclxuICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxyXG4gICAgfVxyXG5cclxuICAgICNzdGFydEZsdXNoKGVudHJpZXM6IExvZ0VudHJ5W10pIHtcclxuICAgICAgICBpZiAodGhpcy4jZmx1c2hlcikge1xyXG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jZmx1c2hlci50aGVuKCgpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRW5yaWNoaW5nTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcclxuICAgIHJlYWRvbmx5ICNidWZmZXI6IExvZ0J1ZmZlclxyXG4gICAgcmVhZG9ubHkgI3Jlc2VydmVkRW5yaWNobWVudD86IG9iamVjdFxyXG4gICAgcmVhZG9ubHkgI2N1c3RvbUVucmljaG1lbnQ/OiBvYmplY3RcclxuICAgIHJlYWRvbmx5ICNsZXZlbDogbnVtYmVyXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgYnVmZmVyOiBMb2dCdWZmZXIsXHJcbiAgICAgICAgbGV2ZWw6IG51bWJlcixcclxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3QsXHJcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudD86IG9iamVjdCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuI2J1ZmZlciA9IGJ1ZmZlclxyXG4gICAgICAgIHRoaXMuI2xldmVsID0gbGV2ZWxcclxuICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQgPSByZXNlcnZlZEVucmljaG1lbnRcclxuICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50ID0gY3VzdG9tRW5yaWNobWVudFxyXG4gICAgfVxyXG5cclxuICAgIGVucmljaChmaWVsZHM6IG9iamVjdCk6IExvZ2dlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIodGhpcy4jYnVmZmVyLCB0aGlzLiNsZXZlbCwgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LCB7XHJcbiAgICAgICAgICAgIC4uLih0aGlzLiNjdXN0b21FbnJpY2htZW50ID8/IHt9KSxcclxuICAgICAgICAgICAgLi4uZmllbGRzLFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZmx1c2goKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlci5mbHVzaCgpXHJcbiAgICB9XHJcblxyXG4gICAgZW5yaWNoUmVzZXJ2ZWQoZmllbGRzOiBvYmplY3QpOiBFbnJpY2hpbmdMb2dnZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKFxyXG4gICAgICAgICAgICB0aGlzLiNidWZmZXIsXHJcbiAgICAgICAgICAgIHRoaXMuI2xldmVsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50ID8/IHt9KSxcclxuICAgICAgICAgICAgICAgIC4uLmZpZWxkcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2UobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCA1KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ3RyYWNlJyxcclxuICAgICAgICAgICAgNSxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgNCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdkZWJ1ZycsXHJcbiAgICAgICAgICAgIDQsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdpbmZvJyxcclxuICAgICAgICAgICAgMyxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIHdhcm4obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAyKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAyLFxyXG4gICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgZmllbGRzLFxyXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIGZhdGFsKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdmYXRhbCcsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVycm9yQXNKc29uKGVycm9yOiB1bmtub3duKTogSnNvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBlcnJvciA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcclxuICAgICAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLFxyXG4gICAgICAgICAgICAuLi4oZXJyb3IgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSksXHJcbiAgICAgICAgfSBhcyBKc29uXHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5lcnJvcixcclxuICAgICAgICB9IGFzIEpzb25cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIGFzIG9iamVjdCB8IHVuZGVmaW5lZCk/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgbmFtZTogdHlwZW9mIGVycm9yLFxyXG4gICAgfSBhcyBKc29uXHJcbn1cclxuIl19
|
package/lib/registry.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
const handlers = {};
|
|
2
|
-
function addHandler(type, handler) {
|
|
3
|
-
;
|
|
4
|
-
(handlers[type] ??= []).push(handler);
|
|
5
|
-
}
|
|
6
|
-
export function getHandlers(type) {
|
|
7
|
-
return (handlers[type] ?? []);
|
|
8
|
-
}
|
|
9
|
-
let httpHostRegistry;
|
|
10
|
-
function setHttpHost(host) {
|
|
11
|
-
httpHostRegistry = host;
|
|
12
|
-
}
|
|
13
|
-
let metadata;
|
|
14
|
-
export function setMeta(packageName, fileName, revision, config) {
|
|
15
|
-
metadata = {
|
|
16
|
-
packageName,
|
|
17
|
-
fileName,
|
|
18
|
-
revision,
|
|
19
|
-
config,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function getMetadata() {
|
|
23
|
-
return metadata;
|
|
24
|
-
}
|
|
25
|
-
function pathToRegExp(path) {
|
|
26
|
-
return new RegExp(('^' +
|
|
27
|
-
path.replace(/[/\\^$+?.()|[\]{}]/gu, '\\$&').replaceAll('*', '[^/\\?]+') +
|
|
28
|
-
'(\\?.*)?$').replace('[^/\\?]+[^/\\?]+(\\?.*)?$', ''), 'u');
|
|
29
|
-
}
|
|
30
|
-
function combineConfig(base, override) {
|
|
31
|
-
if (base === undefined) {
|
|
32
|
-
return override;
|
|
33
|
-
}
|
|
34
|
-
else if (override === undefined) {
|
|
35
|
-
return base;
|
|
36
|
-
}
|
|
37
|
-
return { ...base, ...override };
|
|
38
|
-
}
|
|
39
|
-
function httpHost(meta, cfg, method, path, entry) {
|
|
40
|
-
addHandler('http', {
|
|
41
|
-
meta,
|
|
42
|
-
config: combineConfig(meta?.config, cfg),
|
|
43
|
-
method,
|
|
44
|
-
pathPattern: path,
|
|
45
|
-
pathRegExp: pathToRegExp(path),
|
|
46
|
-
entry,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
setHttpHost(httpHost);
|
|
50
|
-
export function registerHttpHandler(method, path, configOrHandler, fn) {
|
|
51
|
-
if (typeof configOrHandler === 'function') {
|
|
52
|
-
httpHostRegistry(getMetadata(), undefined, method, path, configOrHandler);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
if (!fn) {
|
|
56
|
-
throw new Error('Please provide a handler function.');
|
|
57
|
-
}
|
|
58
|
-
httpHostRegistry(getMetadata(), configOrHandler, method, path, fn);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxRQUFRLEdBQWlDLEVBQUUsQ0FBQTtBQUVqRCxTQUFTLFVBQVUsQ0FBQyxJQUF3QixFQUFFLE9BQW9CO0lBQzlELENBQUM7SUFBQSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBd0I7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQWtCLENBQUE7QUFDbEQsQ0FBQztBQVVELElBQUksZ0JBQTBCLENBQUE7QUFFOUIsU0FBUyxXQUFXLENBQUMsSUFBYztJQUMvQixnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFDM0IsQ0FBQztBQUVELElBQUksUUFBOEIsQ0FBQTtBQUVsQyxNQUFNLFVBQVUsT0FBTyxDQUNuQixXQUFtQixFQUNuQixRQUFnQixFQUNoQixRQUE0QixFQUM1QixNQUF3QztJQUV4QyxRQUFRLEdBQUc7UUFDUCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFFBQVE7UUFDUixNQUFNO0tBQ1QsQ0FBQTtBQUNMLENBQUM7QUFjRCxTQUFTLFdBQVc7SUFDaEIsT0FBTyxRQUFRLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxJQUFJLE1BQU0sQ0FDYixDQUNJLEdBQUc7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1FBQ3hFLFdBQVcsQ0FDZCxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsRUFDMUMsR0FBRyxDQUNOLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLElBQXNDLEVBQ3RDLFFBQTBDO0lBRTFDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUNwQixPQUFPLFFBQVEsQ0FBQTtLQUNsQjtTQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQTtLQUNkO0lBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUE7QUFDbkMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUNiLElBQTBCLEVBQzFCLEdBQXFDLEVBQ3JDLE1BQWMsRUFDZCxJQUFZLEVBQ1osS0FBYztJQUVkLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDZixJQUFJO1FBQ0osTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUN4QyxNQUFNO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDOUIsS0FBSztLQUNSLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7QUFJckIsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixNQUFjLEVBQ2QsSUFBWSxFQUNaLGVBQStDLEVBQy9DLEVBQVk7SUFFWixJQUFJLE9BQU8sZUFBZSxLQUFLLFVBQVUsRUFBRTtRQUN2QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQTtLQUM1RTtTQUFNO1FBQ0gsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQTtTQUN4RDtRQUNELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0tBQ3JFO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhbmRsZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29udGV4dC5qcydcclxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gJy4uL2h0dHAuanMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBIYW5kbGVyIHtcclxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXHJcbiAgICBjb25maWc6IChQYWNrYWdlQ29uZmlndXJhdGlvbiAmIEhhbmRsZXJDb25maWd1cmF0aW9uKSB8IHVuZGVmaW5lZFxyXG4gICAgbWV0aG9kOiBNZXRob2RcclxuICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmdcclxuICAgIHBhdGhSZWdFeHA6IFJlZ0V4cFxyXG4gICAgZW50cnk6IEhhbmRsZXJcclxufVxyXG5cclxuaW50ZXJmYWNlIEhhbmRsZXJUeXBlcyB7XHJcbiAgICBodHRwOiBIdHRwSGFuZGxlclxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVyczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duW10gfSA9IHt9XHJcblxyXG5mdW5jdGlvbiBhZGRIYW5kbGVyKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcywgaGFuZGxlcjogSHR0cEhhbmRsZXIpIHtcclxuICAgIDsoaGFuZGxlcnNbdHlwZV0gPz89IFtdKS5wdXNoKGhhbmRsZXIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVycyh0eXBlOiBrZXlvZiBIYW5kbGVyVHlwZXMpIHtcclxuICAgIHJldHVybiAoaGFuZGxlcnNbdHlwZV0gPz8gW10pIGFzIEh0dHBIYW5kbGVyW11cclxufVxyXG5cclxudHlwZSBIdHRwSG9zdCA9IChcclxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcclxuICAgIG1ldGhvZDogTWV0aG9kLFxyXG4gICAgcGF0aDogc3RyaW5nLFxyXG4gICAgaGFuZGxlcjogSGFuZGxlcixcclxuKSA9PiB2b2lkXHJcblxyXG5sZXQgaHR0cEhvc3RSZWdpc3RyeTogSHR0cEhvc3RcclxuXHJcbmZ1bmN0aW9uIHNldEh0dHBIb3N0KGhvc3Q6IEh0dHBIb3N0KSB7XHJcbiAgICBodHRwSG9zdFJlZ2lzdHJ5ID0gaG9zdFxyXG59XHJcblxyXG5sZXQgbWV0YWRhdGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0TWV0YShcclxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nLFxyXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICAgIGNvbmZpZzogUGFja2FnZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXHJcbikge1xyXG4gICAgbWV0YWRhdGEgPSB7XHJcbiAgICAgICAgcGFja2FnZU5hbWUsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgcmV2aXNpb24sXHJcbiAgICAgICAgY29uZmlnLFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxyXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VDb25maWd1cmF0aW9uIGV4dGVuZHMgSGFuZGxlckNvbmZpZ3VyYXRpb24ge1xyXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHBhY2thZ2UtbGV2ZWwgY29uZmlndXJhdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YSB7XHJcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nXHJcbiAgICByZXZpc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgICBjb25maWc/OiBQYWNrYWdlQ29uZmlndXJhdGlvblxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXRhZGF0YSgpIHtcclxuICAgIHJldHVybiBtZXRhZGF0YVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXRoVG9SZWdFeHAocGF0aDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcclxuICAgICAgICAoXHJcbiAgICAgICAgICAgICdeJyArXHJcbiAgICAgICAgICAgIHBhdGgucmVwbGFjZSgvWy9cXFxcXiQrPy4oKXxbXFxde31dL2d1LCAnXFxcXCQmJykucmVwbGFjZUFsbCgnKicsICdbXi9cXFxcP10rJykgK1xyXG4gICAgICAgICAgICAnKFxcXFw/LiopPyQnXHJcbiAgICAgICAgKS5yZXBsYWNlKCdbXi9cXFxcP10rW14vXFxcXD9dKyhcXFxcPy4qKT8kJywgJycpLFxyXG4gICAgICAgICd1JyxcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gY29tYmluZUNvbmZpZyhcclxuICAgIGJhc2U6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxyXG4gICAgb3ZlcnJpZGU6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxyXG4pOiAoUGFja2FnZUNvbmZpZ3VyYXRpb24gJiBIYW5kbGVyQ29uZmlndXJhdGlvbikgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGJhc2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBvdmVycmlkZVxyXG4gICAgfSBlbHNlIGlmIChvdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VcclxuICAgIH1cclxuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaHR0cEhvc3QoXHJcbiAgICBtZXRhOiBNZXRhZGF0YSB8IHVuZGVmaW5lZCxcclxuICAgIGNmZzogSGFuZGxlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXHJcbiAgICBtZXRob2Q6IE1ldGhvZCxcclxuICAgIHBhdGg6IHN0cmluZyxcclxuICAgIGVudHJ5OiBIYW5kbGVyLFxyXG4pIHtcclxuICAgIGFkZEhhbmRsZXIoJ2h0dHAnLCB7XHJcbiAgICAgICAgbWV0YSxcclxuICAgICAgICBjb25maWc6IGNvbWJpbmVDb25maWcobWV0YT8uY29uZmlnLCBjZmcpLFxyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBwYXRoUGF0dGVybjogcGF0aCxcclxuICAgICAgICBwYXRoUmVnRXhwOiBwYXRoVG9SZWdFeHAocGF0aCksXHJcbiAgICAgICAgZW50cnksXHJcbiAgICB9KVxyXG59XHJcblxyXG5zZXRIdHRwSG9zdChodHRwSG9zdClcclxuXHJcbmV4cG9ydCB0eXBlIE1ldGhvZCA9ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSdcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh0dHBIYW5kbGVyKFxyXG4gICAgbWV0aG9kOiBNZXRob2QsXHJcbiAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICBjb25maWdPckhhbmRsZXI6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgSGFuZGxlcixcclxuICAgIGZuPzogSGFuZGxlcixcclxuKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGh0dHBIb3N0UmVnaXN0cnkoZ2V0TWV0YWRhdGEoKSwgdW5kZWZpbmVkLCBtZXRob2QsIHBhdGgsIGNvbmZpZ09ySGFuZGxlcilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFmbikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgaGFuZGxlciBmdW5jdGlvbi4nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBodHRwSG9zdFJlZ2lzdHJ5KGdldE1ldGFkYXRhKCksIGNvbmZpZ09ySGFuZGxlciwgbWV0aG9kLCBwYXRoLCBmbilcclxuICAgIH1cclxufVxyXG4iXX0=
|