@mswjs/interceptors 0.19.4 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/BatchInterceptor.d.ts +5 -5
- package/lib/BatchInterceptor.js +14 -59
- package/lib/BatchInterceptor.js.map +1 -1
- package/lib/Interceptor.d.ts +7 -6
- package/lib/Interceptor.js +39 -64
- package/lib/Interceptor.js.map +1 -1
- package/lib/RemoteHttpInterceptor.js +115 -209
- package/lib/RemoteHttpInterceptor.js.map +1 -1
- package/lib/glossary.d.ts +2 -2
- package/lib/interceptors/ClientRequest/NodeClientRequest.js +141 -278
- package/lib/interceptors/ClientRequest/NodeClientRequest.js.map +1 -1
- package/lib/interceptors/ClientRequest/http.get.js +5 -34
- package/lib/interceptors/ClientRequest/http.get.js.map +1 -1
- package/lib/interceptors/ClientRequest/http.request.js +6 -35
- package/lib/interceptors/ClientRequest/http.request.js.map +1 -1
- package/lib/interceptors/ClientRequest/index.js +22 -82
- package/lib/interceptors/ClientRequest/index.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/cloneIncomingMessage.js +18 -62
- package/lib/interceptors/ClientRequest/utils/cloneIncomingMessage.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/createRequest.js +10 -32
- package/lib/interceptors/ClientRequest/utils/createRequest.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/createResponse.js +6 -6
- package/lib/interceptors/ClientRequest/utils/createResponse.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/getIncomingMessageBody.js +12 -12
- package/lib/interceptors/ClientRequest/utils/getIncomingMessageBody.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestArgs.js +21 -52
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestArgs.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestEndArgs.js +5 -9
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestEndArgs.js.map +1 -1
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestWriteArgs.js +6 -6
- package/lib/interceptors/ClientRequest/utils/normalizeClientRequestWriteArgs.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestController.d.ts +44 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestController.js +413 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestController.js.map +1 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestProxy.d.ts +20 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestProxy.js +75 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestProxy.js.map +1 -0
- package/lib/interceptors/XMLHttpRequest/index.js +23 -42
- package/lib/interceptors/XMLHttpRequest/index.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/polyfills/EventPolyfill.js +11 -12
- package/lib/interceptors/XMLHttpRequest/polyfills/EventPolyfill.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.js +9 -27
- package/lib/interceptors/XMLHttpRequest/polyfills/ProgressEventPolyfill.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/utils/concatArrayBuffer.js +1 -1
- package/lib/interceptors/XMLHttpRequest/utils/concatArrayBuffer.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/utils/createEvent.js +7 -7
- package/lib/interceptors/XMLHttpRequest/utils/createEvent.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/utils/createResponse.js +2 -2
- package/lib/interceptors/XMLHttpRequest/utils/createResponse.js.map +1 -1
- package/lib/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.js +2 -2
- package/lib/interceptors/XMLHttpRequest/utils/isDomParserSupportedType.js.map +1 -1
- package/lib/interceptors/fetch/index.js +52 -125
- package/lib/interceptors/fetch/index.js.map +1 -1
- package/lib/presets/browser.js +2 -2
- package/lib/presets/browser.js.map +1 -1
- package/lib/presets/node.js +2 -2
- package/lib/presets/node.js.map +1 -1
- package/lib/utils/AsyncEventEmitter.d.ts +9 -8
- package/lib/utils/AsyncEventEmitter.js +84 -190
- package/lib/utils/AsyncEventEmitter.js.map +1 -1
- package/lib/utils/bufferUtils.js +3 -3
- package/lib/utils/bufferUtils.js.map +1 -1
- package/lib/utils/cloneObject.js +2 -19
- package/lib/utils/cloneObject.js.map +1 -1
- package/lib/utils/createLazyCallback.js +14 -49
- package/lib/utils/createLazyCallback.js.map +1 -1
- package/lib/utils/createProxy.d.ts +8 -0
- package/lib/utils/createProxy.js +45 -0
- package/lib/utils/createProxy.js.map +1 -0
- package/lib/utils/getCleanUrl.js +1 -2
- package/lib/utils/getCleanUrl.js.map +1 -1
- package/lib/utils/getRequestOptionsByUrl.js +3 -3
- package/lib/utils/getRequestOptionsByUrl.js.map +1 -1
- package/lib/utils/getUrlByRequestOptions.js +23 -39
- package/lib/utils/getUrlByRequestOptions.js.map +1 -1
- package/lib/utils/nextTick.js +2 -2
- package/lib/utils/nextTick.js.map +1 -1
- package/lib/utils/parseJson.js +1 -1
- package/lib/utils/parseJson.js.map +1 -1
- package/lib/utils/toInteractiveRequest.js +3 -3
- package/lib/utils/toInteractiveRequest.js.map +1 -1
- package/lib/utils/uuid.js +2 -2
- package/lib/utils/uuid.js.map +1 -1
- package/package.json +2 -2
- package/src/BatchInterceptor.test.ts +2 -2
- package/src/BatchInterceptor.ts +14 -13
- package/src/Interceptor.ts +12 -11
- package/src/glossary.ts +2 -6
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestController.ts +578 -0
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestProxy.ts +111 -0
- package/src/interceptors/XMLHttpRequest/index.ts +12 -13
- package/src/utils/AsyncEventEmitter.test.ts +6 -6
- package/src/utils/AsyncEventEmitter.ts +60 -50
- package/src/utils/createProxy.ts +78 -0
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestOverride.d.ts +0 -93
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestOverride.js +0 -567
- package/lib/interceptors/XMLHttpRequest/XMLHttpRequestOverride.js.map +0 -1
- package/src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts +0 -684
|
@@ -1,567 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __values = (this && this.__values) || function(o) {
|
|
39
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
-
if (m) return m.call(o);
|
|
41
|
-
if (o && typeof o.length === "number") return {
|
|
42
|
-
next: function () {
|
|
43
|
-
if (o && i >= o.length) o = void 0;
|
|
44
|
-
return { value: o && o[i++], done: !o };
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
-
};
|
|
49
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
-
if (!m) return o;
|
|
52
|
-
var i = m.call(o), r, ar = [], e;
|
|
53
|
-
try {
|
|
54
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
-
}
|
|
56
|
-
catch (error) { e = { error: error }; }
|
|
57
|
-
finally {
|
|
58
|
-
try {
|
|
59
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
-
}
|
|
61
|
-
finally { if (e) throw e.error; }
|
|
62
|
-
}
|
|
63
|
-
return ar;
|
|
64
|
-
};
|
|
65
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
-
exports.createXMLHttpRequestOverride = void 0;
|
|
67
|
-
var until_1 = require("@open-draft/until");
|
|
68
|
-
var web_fetch_1 = require("@remix-run/web-fetch");
|
|
69
|
-
var headers_polyfill_1 = require("headers-polyfill");
|
|
70
|
-
var parseJson_1 = require("../../utils/parseJson");
|
|
71
|
-
var createEvent_1 = require("./utils/createEvent");
|
|
72
|
-
var bufferUtils_1 = require("../../utils/bufferUtils");
|
|
73
|
-
var createResponse_1 = require("./utils/createResponse");
|
|
74
|
-
var concatArrayBuffer_1 = require("./utils/concatArrayBuffer");
|
|
75
|
-
var toInteractiveRequest_1 = require("../../utils/toInteractiveRequest");
|
|
76
|
-
var uuid_1 = require("../../utils/uuid");
|
|
77
|
-
var isDomParserSupportedType_1 = require("./utils/isDomParserSupportedType");
|
|
78
|
-
var createXMLHttpRequestOverride = function (options) {
|
|
79
|
-
var _a;
|
|
80
|
-
var XMLHttpRequest = options.XMLHttpRequest, emitter = options.emitter, log = options.log;
|
|
81
|
-
return _a = /** @class */ (function () {
|
|
82
|
-
function XMLHttpRequestOverride() {
|
|
83
|
-
// Collection of events modified by `addEventListener`/`removeEventListener` calls.
|
|
84
|
-
this._events = [];
|
|
85
|
-
this.log = log;
|
|
86
|
-
this.UNSENT = 0;
|
|
87
|
-
this.OPENED = 1;
|
|
88
|
-
this.HEADERS_RECEIVED = 2;
|
|
89
|
-
this.LOADING = 3;
|
|
90
|
-
this.DONE = 4;
|
|
91
|
-
this.onreadystatechange = null;
|
|
92
|
-
/* Events */
|
|
93
|
-
this.onabort = null;
|
|
94
|
-
this.onerror = null;
|
|
95
|
-
this.onload = null;
|
|
96
|
-
this.onloadend = null;
|
|
97
|
-
this.onloadstart = null;
|
|
98
|
-
this.onprogress = null;
|
|
99
|
-
this.ontimeout = null;
|
|
100
|
-
this.url = '';
|
|
101
|
-
this.method = 'GET';
|
|
102
|
-
this.readyState = this.UNSENT;
|
|
103
|
-
this.withCredentials = false;
|
|
104
|
-
this.status = 0;
|
|
105
|
-
this.statusText = '';
|
|
106
|
-
this.responseType = 'text';
|
|
107
|
-
this.responseURL = '';
|
|
108
|
-
this.upload = {};
|
|
109
|
-
this.timeout = 0;
|
|
110
|
-
this._requestHeaders = new headers_polyfill_1.Headers();
|
|
111
|
-
this._responseBuffer = new Uint8Array();
|
|
112
|
-
this._responseHeaders = new headers_polyfill_1.Headers();
|
|
113
|
-
}
|
|
114
|
-
XMLHttpRequestOverride.prototype.setReadyState = function (nextState) {
|
|
115
|
-
if (nextState === this.readyState) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
this.log('readyState change %d -> %d', this.readyState, nextState);
|
|
119
|
-
this.readyState = nextState;
|
|
120
|
-
if (nextState !== this.UNSENT) {
|
|
121
|
-
this.log('triggering readystate change...');
|
|
122
|
-
this.trigger('readystatechange');
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
/**
|
|
126
|
-
* Triggers both direct callback and attached event listeners
|
|
127
|
-
* for the given event.
|
|
128
|
-
*/
|
|
129
|
-
XMLHttpRequestOverride.prototype.trigger = function (eventName, options) {
|
|
130
|
-
var e_1, _a;
|
|
131
|
-
this.log('trigger "%s" (%d)', eventName, this.readyState);
|
|
132
|
-
this.log('resolve listener for event "%s"', eventName);
|
|
133
|
-
var callback = this["on" + eventName];
|
|
134
|
-
callback === null || callback === void 0 ? void 0 : callback.call(this, (0, createEvent_1.createEvent)(this, eventName, options));
|
|
135
|
-
try {
|
|
136
|
-
for (var _b = __values(this._events), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
137
|
-
var event_1 = _c.value;
|
|
138
|
-
if (event_1.name === eventName) {
|
|
139
|
-
log('calling mock event listener "%s" (%d)', eventName, this.readyState);
|
|
140
|
-
event_1.listener.call(this, (0, createEvent_1.createEvent)(this, eventName, options));
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
145
|
-
finally {
|
|
146
|
-
try {
|
|
147
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
148
|
-
}
|
|
149
|
-
finally { if (e_1) throw e_1.error; }
|
|
150
|
-
}
|
|
151
|
-
return this;
|
|
152
|
-
};
|
|
153
|
-
XMLHttpRequestOverride.prototype.reset = function () {
|
|
154
|
-
this.log('reset');
|
|
155
|
-
this.setReadyState(this.UNSENT);
|
|
156
|
-
this.status = 0;
|
|
157
|
-
this.statusText = '';
|
|
158
|
-
this._responseBuffer = new Uint8Array();
|
|
159
|
-
this._requestHeaders = new headers_polyfill_1.Headers();
|
|
160
|
-
this._responseHeaders = new headers_polyfill_1.Headers();
|
|
161
|
-
};
|
|
162
|
-
XMLHttpRequestOverride.prototype.open = function (method, url, async, user, password) {
|
|
163
|
-
if (async === void 0) { async = true; }
|
|
164
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
165
|
-
return __generator(this, function (_a) {
|
|
166
|
-
this.log = this.log.extend("request " + method + " " + url);
|
|
167
|
-
this.log('open', { method: method, url: url, async: async, user: user, password: password });
|
|
168
|
-
this.reset();
|
|
169
|
-
this.setReadyState(this.OPENED);
|
|
170
|
-
if (typeof url === 'undefined') {
|
|
171
|
-
this.url = method;
|
|
172
|
-
this.method = 'GET';
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
this.url = url;
|
|
176
|
-
this.method = method;
|
|
177
|
-
this.async = async;
|
|
178
|
-
this.user = user;
|
|
179
|
-
this.password = password;
|
|
180
|
-
}
|
|
181
|
-
return [2 /*return*/];
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
|
-
XMLHttpRequestOverride.prototype.send = function (data) {
|
|
186
|
-
var _this = this;
|
|
187
|
-
this.log('send %s %s', this.method, this.url);
|
|
188
|
-
var requestBuffer = typeof data === 'string' ? (0, bufferUtils_1.encodeBuffer)(data) : data;
|
|
189
|
-
var url;
|
|
190
|
-
try {
|
|
191
|
-
url = new URL(this.url);
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
// Assume a relative URL, if construction of a new `URL` instance fails.
|
|
195
|
-
// Since `XMLHttpRequest` always executed in a DOM-like environment,
|
|
196
|
-
// resolve the relative request URL against the current window location.
|
|
197
|
-
url = new URL(this.url, window.location.href);
|
|
198
|
-
}
|
|
199
|
-
this.log('request headers', this._requestHeaders);
|
|
200
|
-
// Create an intercepted request instance exposed to the request intercepting middleware.
|
|
201
|
-
var requestId = (0, uuid_1.uuidv4)();
|
|
202
|
-
var capturedRequest = new web_fetch_1.Request(url, {
|
|
203
|
-
method: this.method,
|
|
204
|
-
headers: this._requestHeaders,
|
|
205
|
-
credentials: this.withCredentials ? 'include' : 'omit',
|
|
206
|
-
body: requestBuffer,
|
|
207
|
-
});
|
|
208
|
-
var interactiveRequest = (0, toInteractiveRequest_1.toInteractiveRequest)(capturedRequest);
|
|
209
|
-
this.log('emitting the "request" event for %d listener(s)...', emitter.listenerCount('request'));
|
|
210
|
-
emitter.emit('request', interactiveRequest, requestId);
|
|
211
|
-
this.log('awaiting mocked response...');
|
|
212
|
-
Promise.resolve((0, until_1.until)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
213
|
-
var _a, mockedResponse;
|
|
214
|
-
return __generator(this, function (_b) {
|
|
215
|
-
switch (_b.label) {
|
|
216
|
-
case 0: return [4 /*yield*/, emitter.untilIdle('request', function (_a) {
|
|
217
|
-
var _b = __read(_a.args, 2), pendingRequestId = _b[1];
|
|
218
|
-
return pendingRequestId === requestId;
|
|
219
|
-
})];
|
|
220
|
-
case 1:
|
|
221
|
-
_b.sent();
|
|
222
|
-
this.log('all request listeners have been resolved!');
|
|
223
|
-
return [4 /*yield*/, interactiveRequest.respondWith.invoked()];
|
|
224
|
-
case 2:
|
|
225
|
-
_a = __read.apply(void 0, [_b.sent(), 1]), mockedResponse = _a[0];
|
|
226
|
-
this.log('event.respondWith called with:', mockedResponse);
|
|
227
|
-
return [2 /*return*/, mockedResponse];
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
}); })).then(function (_a) {
|
|
231
|
-
var _b, _c;
|
|
232
|
-
var _d = __read(_a, 2), middlewareException = _d[0], mockedResponse = _d[1];
|
|
233
|
-
// When the request middleware throws an exception, error the request.
|
|
234
|
-
// This cancels the request and is similar to a network error.
|
|
235
|
-
if (middlewareException) {
|
|
236
|
-
_this.log('middleware function threw an exception!', middlewareException);
|
|
237
|
-
// Mark the request as complete.
|
|
238
|
-
_this.setReadyState(_this.DONE);
|
|
239
|
-
// No way to propagate the actual error message.
|
|
240
|
-
_this.trigger('error');
|
|
241
|
-
// Emit the "loadend" event to notify that the request has settled.
|
|
242
|
-
// In this case, there's been an error with the request so
|
|
243
|
-
// we must not emit the "load" event.
|
|
244
|
-
_this.trigger('loadend');
|
|
245
|
-
// Abort must not be called when request fails!
|
|
246
|
-
// this.abort()
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
// Forward request headers modified in the "request" listener.
|
|
250
|
-
_this._requestHeaders = new headers_polyfill_1.Headers(capturedRequest.headers);
|
|
251
|
-
// Return a mocked response, if provided in the middleware.
|
|
252
|
-
if (mockedResponse) {
|
|
253
|
-
var responseClone_1 = mockedResponse.clone();
|
|
254
|
-
_this.log('received mocked response', mockedResponse);
|
|
255
|
-
_this.status = (_b = mockedResponse.status) !== null && _b !== void 0 ? _b : 200;
|
|
256
|
-
_this.statusText = mockedResponse.statusText || 'OK';
|
|
257
|
-
_this.log('set response status', _this.status, _this.statusText);
|
|
258
|
-
_this._responseHeaders = new headers_polyfill_1.Headers(mockedResponse.headers || {});
|
|
259
|
-
_this.log('set response headers', _this._responseHeaders);
|
|
260
|
-
_this.log('response type', _this.responseType);
|
|
261
|
-
_this.responseURL = _this.url;
|
|
262
|
-
var totalLength_1 = _this._responseHeaders.has('Content-Length')
|
|
263
|
-
? Number(_this._responseHeaders.get('Content-Length'))
|
|
264
|
-
: undefined;
|
|
265
|
-
// Trigger a loadstart event to indicate the initialization of the fetch.
|
|
266
|
-
_this.trigger('loadstart', { loaded: 0, total: totalLength_1 });
|
|
267
|
-
// Mark that response headers has been received
|
|
268
|
-
// and trigger a ready state event to reflect received headers
|
|
269
|
-
// in a custom "onreadystatechange" callback.
|
|
270
|
-
_this.setReadyState(_this.HEADERS_RECEIVED);
|
|
271
|
-
_this.setReadyState(_this.LOADING);
|
|
272
|
-
var closeResponseStream_1 = function () {
|
|
273
|
-
/**
|
|
274
|
-
* Explicitly mark the request as done so its response never hangs.
|
|
275
|
-
* @see https://github.com/mswjs/interceptors/issues/13
|
|
276
|
-
*/
|
|
277
|
-
_this.setReadyState(_this.DONE);
|
|
278
|
-
// Always trigger the "load" event because at this point
|
|
279
|
-
// the request has been performed successfully.
|
|
280
|
-
_this.trigger('load', {
|
|
281
|
-
loaded: _this._responseBuffer.byteLength,
|
|
282
|
-
total: totalLength_1,
|
|
283
|
-
});
|
|
284
|
-
// Trigger a loadend event to indicate the fetch has completed.
|
|
285
|
-
_this.trigger('loadend', {
|
|
286
|
-
loaded: _this._responseBuffer.byteLength,
|
|
287
|
-
total: totalLength_1,
|
|
288
|
-
});
|
|
289
|
-
emitter.emit('response', responseClone_1, capturedRequest, requestId);
|
|
290
|
-
};
|
|
291
|
-
if (mockedResponse.body) {
|
|
292
|
-
var reader_1 = mockedResponse.body.getReader();
|
|
293
|
-
var readNextChunk_1 = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
294
|
-
var _a, value, done;
|
|
295
|
-
return __generator(this, function (_b) {
|
|
296
|
-
switch (_b.label) {
|
|
297
|
-
case 0: return [4 /*yield*/, reader_1.read()];
|
|
298
|
-
case 1:
|
|
299
|
-
_a = _b.sent(), value = _a.value, done = _a.done;
|
|
300
|
-
if (done) {
|
|
301
|
-
closeResponseStream_1();
|
|
302
|
-
return [2 /*return*/];
|
|
303
|
-
}
|
|
304
|
-
if (value) {
|
|
305
|
-
this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(this._responseBuffer, value);
|
|
306
|
-
this.trigger('progress', {
|
|
307
|
-
loaded: this._responseBuffer.byteLength,
|
|
308
|
-
total: totalLength_1,
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
readNextChunk_1();
|
|
312
|
-
return [2 /*return*/];
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
}); };
|
|
316
|
-
readNextChunk_1();
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
closeResponseStream_1();
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
else {
|
|
323
|
-
_this.log('no mocked response received!');
|
|
324
|
-
// Perform an original request, when the request middleware returned no mocked response.
|
|
325
|
-
var originalRequest_1 = new XMLHttpRequest();
|
|
326
|
-
_this.log('opening an original request %s %s', _this.method, _this.url);
|
|
327
|
-
originalRequest_1.open(_this.method, _this.url, (_c = _this.async) !== null && _c !== void 0 ? _c : true, _this.user, _this.password);
|
|
328
|
-
originalRequest_1.addEventListener('readystatechange', function () {
|
|
329
|
-
// Forward the original response headers to the patched instance
|
|
330
|
-
// immediately as they are received.
|
|
331
|
-
if (originalRequest_1.readyState === XMLHttpRequest.HEADERS_RECEIVED) {
|
|
332
|
-
var responseHeaders = originalRequest_1.getAllResponseHeaders();
|
|
333
|
-
_this.log('original response headers:\n', responseHeaders);
|
|
334
|
-
_this._responseHeaders = (0, headers_polyfill_1.stringToHeaders)(responseHeaders);
|
|
335
|
-
_this.log('original response headers (normalized)', _this._responseHeaders);
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
originalRequest_1.addEventListener('loadstart', function () {
|
|
339
|
-
// Forward the response type to the patched instance immediately.
|
|
340
|
-
// Response type affects how response reading properties are resolved.
|
|
341
|
-
_this.responseType = originalRequest_1.responseType;
|
|
342
|
-
});
|
|
343
|
-
originalRequest_1.addEventListener('progress', function () {
|
|
344
|
-
_this._responseBuffer = (0, concatArrayBuffer_1.concatArrayBuffer)(_this._responseBuffer, (0, bufferUtils_1.encodeBuffer)(originalRequest_1.responseText));
|
|
345
|
-
});
|
|
346
|
-
originalRequest_1.addEventListener('load', function () {
|
|
347
|
-
_this.status = originalRequest_1.status;
|
|
348
|
-
_this.statusText = originalRequest_1.statusText;
|
|
349
|
-
_this.responseURL = originalRequest_1.responseURL;
|
|
350
|
-
_this.log('received original response', _this.status, _this.statusText);
|
|
351
|
-
// Explicitly mark the mocked request instance as done
|
|
352
|
-
// so the response never hangs.
|
|
353
|
-
_this.setReadyState(_this.DONE);
|
|
354
|
-
_this.log('set mock request readyState to DONE');
|
|
355
|
-
_this.log('original response body:', _this.response);
|
|
356
|
-
_this.log('original response finished!');
|
|
357
|
-
});
|
|
358
|
-
// Update the patched instance on the "loadend" event
|
|
359
|
-
// because it fires when the request settles (succeeds/errors).
|
|
360
|
-
originalRequest_1.addEventListener('loadend', function () {
|
|
361
|
-
_this.log('original "loadend"');
|
|
362
|
-
emitter.emit('response', (0, createResponse_1.createResponse)(originalRequest_1, _this._responseBuffer), capturedRequest, requestId);
|
|
363
|
-
});
|
|
364
|
-
_this.propagateHeaders(originalRequest_1, _this._requestHeaders);
|
|
365
|
-
// Assign callbacks and event listeners from the intercepted XHR instance
|
|
366
|
-
// to the original XHR instance.
|
|
367
|
-
_this.propagateCallbacks(originalRequest_1);
|
|
368
|
-
_this.propagateListeners(originalRequest_1);
|
|
369
|
-
if (_this.async) {
|
|
370
|
-
originalRequest_1.timeout = _this.timeout;
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* @note Set the intercepted request ID on the original request
|
|
374
|
-
* so that if it triggers any other interceptors, they don't attempt
|
|
375
|
-
* to process it once again. This happens when bypassing XMLHttpRequest
|
|
376
|
-
* because it's polyfilled with "http.ClientRequest" in JSDOM.
|
|
377
|
-
*/
|
|
378
|
-
originalRequest_1.setRequestHeader('X-Request-Id', requestId);
|
|
379
|
-
_this.log('send', data);
|
|
380
|
-
originalRequest_1.send(data);
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
};
|
|
384
|
-
Object.defineProperty(XMLHttpRequestOverride.prototype, "responseText", {
|
|
385
|
-
get: function () {
|
|
386
|
-
this.log('responseText()');
|
|
387
|
-
return (0, bufferUtils_1.decodeBuffer)(this._responseBuffer);
|
|
388
|
-
},
|
|
389
|
-
enumerable: false,
|
|
390
|
-
configurable: true
|
|
391
|
-
});
|
|
392
|
-
Object.defineProperty(XMLHttpRequestOverride.prototype, "response", {
|
|
393
|
-
get: function () {
|
|
394
|
-
switch (this.responseType) {
|
|
395
|
-
case 'json': {
|
|
396
|
-
this.log('resolving response body as JSON');
|
|
397
|
-
return (0, parseJson_1.parseJson)(this.responseText);
|
|
398
|
-
}
|
|
399
|
-
case 'arraybuffer': {
|
|
400
|
-
this.log('resolving response body as ArrayBuffer');
|
|
401
|
-
return (0, bufferUtils_1.toArrayBuffer)(this._responseBuffer);
|
|
402
|
-
}
|
|
403
|
-
case 'blob': {
|
|
404
|
-
var mimeType = this.getResponseHeader('content-type') || 'text/plain';
|
|
405
|
-
this.log('resolving response body as blog (%s)', mimeType);
|
|
406
|
-
return new Blob([this.responseText], { type: mimeType });
|
|
407
|
-
}
|
|
408
|
-
case 'document': {
|
|
409
|
-
this.log('resolving response body as XML');
|
|
410
|
-
return this.responseXML;
|
|
411
|
-
}
|
|
412
|
-
default: {
|
|
413
|
-
return this.responseText;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
},
|
|
417
|
-
enumerable: false,
|
|
418
|
-
configurable: true
|
|
419
|
-
});
|
|
420
|
-
Object.defineProperty(XMLHttpRequestOverride.prototype, "responseXML", {
|
|
421
|
-
get: function () {
|
|
422
|
-
var contentType = this.getResponseHeader('content-type') || '';
|
|
423
|
-
this.log('responseXML() %s', contentType);
|
|
424
|
-
if (typeof DOMParser === 'undefined') {
|
|
425
|
-
console.warn('Cannot retrieve XMLHttpRequest response body as XML: DOMParser is not defined. You are likely using an environment that is not browser or does not polyfill browser globals correctly.');
|
|
426
|
-
return null;
|
|
427
|
-
}
|
|
428
|
-
if ((0, isDomParserSupportedType_1.isDomParserSupportedType)(contentType)) {
|
|
429
|
-
this.log('response content-type is XML, parsing...');
|
|
430
|
-
return new DOMParser().parseFromString(this.responseText, contentType);
|
|
431
|
-
}
|
|
432
|
-
this.log('response content type is not XML, returning null...');
|
|
433
|
-
return null;
|
|
434
|
-
},
|
|
435
|
-
enumerable: false,
|
|
436
|
-
configurable: true
|
|
437
|
-
});
|
|
438
|
-
XMLHttpRequestOverride.prototype.abort = function () {
|
|
439
|
-
this.log('abort()');
|
|
440
|
-
if (this.readyState > this.UNSENT && this.readyState < this.DONE) {
|
|
441
|
-
this.reset();
|
|
442
|
-
this.trigger('abort');
|
|
443
|
-
}
|
|
444
|
-
};
|
|
445
|
-
XMLHttpRequestOverride.prototype.dispatchEvent = function () {
|
|
446
|
-
return false;
|
|
447
|
-
};
|
|
448
|
-
XMLHttpRequestOverride.prototype.setRequestHeader = function (name, value) {
|
|
449
|
-
this.log('setRequestHeader() "%s" to "%s"', name, value);
|
|
450
|
-
this._requestHeaders.append(name, value);
|
|
451
|
-
};
|
|
452
|
-
XMLHttpRequestOverride.prototype.getResponseHeader = function (name) {
|
|
453
|
-
this.log('getResponseHeader() "%s"', name);
|
|
454
|
-
if (this.readyState < this.HEADERS_RECEIVED) {
|
|
455
|
-
this.log('cannot return a header: headers not received (state: %s)', this.readyState);
|
|
456
|
-
return null;
|
|
457
|
-
}
|
|
458
|
-
var headerValue = this._responseHeaders.get(name);
|
|
459
|
-
this.log('resolved response header "%s" to "%s"', name, headerValue, this._responseHeaders);
|
|
460
|
-
return headerValue;
|
|
461
|
-
};
|
|
462
|
-
XMLHttpRequestOverride.prototype.getAllResponseHeaders = function () {
|
|
463
|
-
this.log('getAllResponseHeaders()');
|
|
464
|
-
if (this.readyState < this.HEADERS_RECEIVED) {
|
|
465
|
-
this.log('cannot return headers: headers not received (state: %s)', this.readyState);
|
|
466
|
-
return '';
|
|
467
|
-
}
|
|
468
|
-
return (0, headers_polyfill_1.headersToString)(this._responseHeaders);
|
|
469
|
-
};
|
|
470
|
-
XMLHttpRequestOverride.prototype.addEventListener = function (event, listener) {
|
|
471
|
-
this.log('addEventListener', event, listener);
|
|
472
|
-
this._events.push({
|
|
473
|
-
name: event,
|
|
474
|
-
listener: listener,
|
|
475
|
-
});
|
|
476
|
-
};
|
|
477
|
-
XMLHttpRequestOverride.prototype.removeEventListener = function (event, listener) {
|
|
478
|
-
this.log('removeEventListener', name, listener);
|
|
479
|
-
this._events = this._events.filter(function (storedEvent) {
|
|
480
|
-
return storedEvent.name !== event && storedEvent.listener !== listener;
|
|
481
|
-
});
|
|
482
|
-
};
|
|
483
|
-
XMLHttpRequestOverride.prototype.overrideMimeType = function () { };
|
|
484
|
-
/**
|
|
485
|
-
* Propagates mock XMLHttpRequest instance callbacks
|
|
486
|
-
* to the given XMLHttpRequest instance.
|
|
487
|
-
*/
|
|
488
|
-
XMLHttpRequestOverride.prototype.propagateCallbacks = function (request) {
|
|
489
|
-
var e_2, _a;
|
|
490
|
-
this.log('propagating request callbacks to the original request');
|
|
491
|
-
var callbackNames = [
|
|
492
|
-
'abort',
|
|
493
|
-
'onerror',
|
|
494
|
-
'ontimeout',
|
|
495
|
-
'onload',
|
|
496
|
-
'onloadstart',
|
|
497
|
-
'onloadend',
|
|
498
|
-
'onprogress',
|
|
499
|
-
'onreadystatechange',
|
|
500
|
-
];
|
|
501
|
-
try {
|
|
502
|
-
for (var callbackNames_1 = __values(callbackNames), callbackNames_1_1 = callbackNames_1.next(); !callbackNames_1_1.done; callbackNames_1_1 = callbackNames_1.next()) {
|
|
503
|
-
var callbackName = callbackNames_1_1.value;
|
|
504
|
-
var callback = this[callbackName];
|
|
505
|
-
if (callback) {
|
|
506
|
-
request[callbackName] = this[callbackName];
|
|
507
|
-
this.log('propagated the "%s" callback', callbackName, callback);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
512
|
-
finally {
|
|
513
|
-
try {
|
|
514
|
-
if (callbackNames_1_1 && !callbackNames_1_1.done && (_a = callbackNames_1.return)) _a.call(callbackNames_1);
|
|
515
|
-
}
|
|
516
|
-
finally { if (e_2) throw e_2.error; }
|
|
517
|
-
}
|
|
518
|
-
request.onabort = this.abort;
|
|
519
|
-
request.onerror = this.onerror;
|
|
520
|
-
request.ontimeout = this.ontimeout;
|
|
521
|
-
request.onload = this.onload;
|
|
522
|
-
request.onloadstart = this.onloadstart;
|
|
523
|
-
request.onloadend = this.onloadend;
|
|
524
|
-
request.onprogress = this.onprogress;
|
|
525
|
-
request.onreadystatechange = this.onreadystatechange;
|
|
526
|
-
};
|
|
527
|
-
/**
|
|
528
|
-
* Propagates the mock XMLHttpRequest instance listeners
|
|
529
|
-
* to the given XMLHttpRequest instance.
|
|
530
|
-
*/
|
|
531
|
-
XMLHttpRequestOverride.prototype.propagateListeners = function (request) {
|
|
532
|
-
this.log('propagating request listeners (%d) to the original request', this._events.length, this._events);
|
|
533
|
-
this._events.forEach(function (_a) {
|
|
534
|
-
var name = _a.name, listener = _a.listener;
|
|
535
|
-
request.addEventListener(name, listener);
|
|
536
|
-
});
|
|
537
|
-
};
|
|
538
|
-
XMLHttpRequestOverride.prototype.propagateHeaders = function (request, headers) {
|
|
539
|
-
var e_3, _a;
|
|
540
|
-
this.log('propagating request headers to the original request', headers);
|
|
541
|
-
try {
|
|
542
|
-
for (var headers_1 = __values(headers), headers_1_1 = headers_1.next(); !headers_1_1.done; headers_1_1 = headers_1.next()) {
|
|
543
|
-
var _b = __read(headers_1_1.value, 2), headerName = _b[0], headerValue = _b[1];
|
|
544
|
-
this.log('setting "%s" (%s) header on the original request', headerName, headerValue);
|
|
545
|
-
request.setRequestHeader(headerName, headerValue);
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
549
|
-
finally {
|
|
550
|
-
try {
|
|
551
|
-
if (headers_1_1 && !headers_1_1.done && (_a = headers_1.return)) _a.call(headers_1);
|
|
552
|
-
}
|
|
553
|
-
finally { if (e_3) throw e_3.error; }
|
|
554
|
-
}
|
|
555
|
-
};
|
|
556
|
-
return XMLHttpRequestOverride;
|
|
557
|
-
}()),
|
|
558
|
-
/* Request state */
|
|
559
|
-
_a.UNSENT = 0,
|
|
560
|
-
_a.OPENED = 1,
|
|
561
|
-
_a.HEADERS_RECEIVED = 2,
|
|
562
|
-
_a.LOADING = 3,
|
|
563
|
-
_a.DONE = 4,
|
|
564
|
-
_a;
|
|
565
|
-
};
|
|
566
|
-
exports.createXMLHttpRequestOverride = createXMLHttpRequestOverride;
|
|
567
|
-
//# sourceMappingURL=XMLHttpRequestOverride.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XMLHttpRequestOverride.js","sourceRoot":"","sources":["../../../src/interceptors/XMLHttpRequest/XMLHttpRequestOverride.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,2CAAyC;AACzC,kDAA8C;AAC9C,qDAA4E;AAC5E,mDAAiD;AACjD,mDAAiD;AAEjD,uDAIgC;AAChC,yDAAuD;AACvD,+DAA6D;AAC7D,yEAAuE;AACvE,yCAAyC;AACzC,6EAA2E;AA6BpE,IAAM,4BAA4B,GAAG,UAC1C,OAA4C;;IAEpC,IAAA,cAAc,GAAmB,OAAO,eAA1B,EAAE,OAAO,GAAU,OAAO,QAAjB,EAAE,GAAG,GAAK,OAAO,IAAZ,CAAY;IAEhD;YAsEE;gBAjEA,mFAAmF;gBACnF,YAAO,GACL,EAAE,CAAA;gBAEJ,QAAG,GAAa,GAAG,CAAA;gBAQH,WAAM,GAAG,CAAC,CAAA;gBACV,WAAM,GAAG,CAAC,CAAA;gBACV,qBAAgB,GAAG,CAAC,CAAA;gBACpB,YAAO,GAAG,CAAC,CAAA;gBACX,SAAI,GAAG,CAAC,CAAA;gBAiBjB,uBAAkB,GACvB,IAAW,CAAA;gBAGb,YAAY;gBACL,YAAO,GAGH,IAAW,CAAA;gBACf,YAAO,GACZ,IAAW,CAAA;gBACN,WAAM,GAGF,IAAW,CAAA;gBACf,cAAS,GAGL,IAAW,CAAA;gBACf,gBAAW,GAGP,IAAW,CAAA;gBACf,eAAU,GAGN,IAAW,CAAA;gBACf,cAAS,GAGL,IAAW,CAAA;gBAGpB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;gBACb,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;gBACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC7B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;gBAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;gBACf,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;gBACpB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;gBAC1B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;gBACrB,IAAI,CAAC,MAAM,GAAG,EAAS,CAAA;gBACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;gBAEhB,IAAI,CAAC,eAAe,GAAG,IAAI,0BAAO,EAAE,CAAA;gBACpC,IAAI,CAAC,eAAe,GAAG,IAAI,UAAU,EAAE,CAAA;gBACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAO,EAAE,CAAA;YACvC,CAAC;YAED,8CAAa,GAAb,UAAc,SAAiB;gBAC7B,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;oBACjC,OAAM;iBACP;gBAED,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;gBAClE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;gBAE3B,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE;oBAC7B,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;oBAC3C,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;iBACjC;YACH,CAAC;YAED;;;eAGG;YACH,wCAAO,GAAP,UAIE,SAAY,EAAE,OAA2B;;gBACzC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;gBACzD,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAA;gBAEtD,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAK,SAAW,CAA+B,CAAA;gBACrE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,EAAE,IAAA,yBAAW,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;;oBAE3D,KAAoB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;wBAA7B,IAAM,OAAK,WAAA;wBACd,IAAI,OAAK,CAAC,IAAI,KAAK,SAAS,EAAE;4BAC5B,GAAG,CACD,uCAAuC,EACvC,SAAS,EACT,IAAI,CAAC,UAAU,CAChB,CAAA;4BACD,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,yBAAW,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;yBACjE;qBACF;;;;;;;;;gBAED,OAAO,IAAI,CAAA;YACb,CAAC;YAED,sCAAK,GAAL;gBACE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAEjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;gBACf,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;gBAEpB,IAAI,CAAC,eAAe,GAAG,IAAI,UAAU,EAAE,CAAA;gBACvC,IAAI,CAAC,eAAe,GAAG,IAAI,0BAAO,EAAE,CAAA;gBACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAO,EAAE,CAAA;YACvC,CAAC;YAEY,qCAAI,GAAjB,UACE,MAAc,EACd,GAAW,EACX,KAAqB,EACrB,IAAa,EACb,QAAiB;gBAFjB,sBAAA,EAAA,YAAqB;;;wBAIrB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAW,MAAM,SAAI,GAAK,CAAC,CAAA;wBACtD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,QAAA,EAAE,GAAG,KAAA,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAA;wBAExD,IAAI,CAAC,KAAK,EAAE,CAAA;wBACZ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBAE/B,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;4BAC9B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAA;4BACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;yBACpB;6BAAM;4BACL,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;4BACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;4BACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;4BAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;4BAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;yBACzB;;;;aACF;YAEM,qCAAI,GAAX,UAAY,IAA2B;gBAAvC,iBAqQC;gBApQC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBAE7C,IAAM,aAAa,GACjB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,0BAAY,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gBAEtD,IAAI,GAAQ,CAAA;gBAEZ,IAAI;oBACF,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;iBACxB;gBAAC,OAAO,KAAK,EAAE;oBACd,wEAAwE;oBACxE,oEAAoE;oBACpE,wEAAwE;oBACxE,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;iBAC9C;gBAED,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;gBAEjD,yFAAyF;gBACzF,IAAM,SAAS,GAAG,IAAA,aAAM,GAAE,CAAA;gBAC1B,IAAM,eAAe,GAAG,IAAI,mBAAO,CAAC,GAAG,EAAE;oBACvC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,IAAI,CAAC,eAAe;oBAC7B,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;oBACtD,IAAI,EAAE,aAAa;iBACpB,CAAC,CAAA;gBAEF,IAAM,kBAAkB,GAAG,IAAA,2CAAoB,EAAC,eAAe,CAAC,CAAA;gBAEhE,IAAI,CAAC,GAAG,CACN,oDAAoD,EACpD,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CACjC,CAAA;gBACD,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAA;gBAEtD,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;gBAEvC,OAAO,CAAC,OAAO,CACb,IAAA,aAAK,EAAC;;;;oCACJ,qBAAM,OAAO,CAAC,SAAS,CACrB,SAAS,EACT,UAAC,EAA8B;wCAA5B,KAAA,kBAA0B,EAAjB,gBAAgB,QAAA;oCAC1B,OAAO,gBAAgB,KAAK,SAAS,CAAA;gCACvC,CAAC,CACF,EAAA;;gCALD,SAKC,CAAA;gCACD,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;gCAGnD,qBAAM,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,EAAA;;gCAD1C,KAAA,sBACJ,SAA8C,KAAA,EADzC,cAAc,QAAA;gCAErB,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,cAAc,CAAC,CAAA;gCAE1D,sBAAO,cAAc,EAAA;;;qBACtB,CAAC,CACH,CAAC,IAAI,CAAC,UAAC,EAAqC;;wBAArC,KAAA,aAAqC,EAApC,mBAAmB,QAAA,EAAE,cAAc,QAAA;oBAC1C,sEAAsE;oBACtE,8DAA8D;oBAC9D,IAAI,mBAAmB,EAAE;wBACvB,KAAI,CAAC,GAAG,CACN,yCAAyC,EACzC,mBAAmB,CACpB,CAAA;wBAED,gCAAgC;wBAChC,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,IAAI,CAAC,CAAA;wBAE7B,gDAAgD;wBAChD,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;wBAErB,mEAAmE;wBACnE,0DAA0D;wBAC1D,qCAAqC;wBACrC,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;wBAEvB,+CAA+C;wBAC/C,eAAe;wBAEf,OAAM;qBACP;oBAED,8DAA8D;oBAC9D,KAAI,CAAC,eAAe,GAAG,IAAI,0BAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;oBAE3D,2DAA2D;oBAC3D,IAAI,cAAc,EAAE;wBAClB,IAAM,eAAa,GAAG,cAAc,CAAC,KAAK,EAAE,CAAA;wBAC5C,KAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAA;wBAEpD,KAAI,CAAC,MAAM,GAAG,MAAA,cAAc,CAAC,MAAM,mCAAI,GAAG,CAAA;wBAC1C,KAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,IAAI,IAAI,CAAA;wBACnD,KAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAI,CAAC,MAAM,EAAE,KAAI,CAAC,UAAU,CAAC,CAAA;wBAE7D,KAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAO,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;wBACjE,KAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAI,CAAC,gBAAgB,CAAC,CAAA;wBAEvD,KAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAI,CAAC,YAAY,CAAC,CAAA;wBAC5C,KAAI,CAAC,WAAW,GAAG,KAAI,CAAC,GAAG,CAAA;wBAE3B,IAAM,aAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC;4BAC7D,CAAC,CAAC,MAAM,CAAC,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;4BACrD,CAAC,CAAC,SAAS,CAAA;wBAEb,yEAAyE;wBACzE,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,aAAW,EAAE,CAAC,CAAA;wBAE5D,+CAA+C;wBAC/C,8DAA8D;wBAC9D,6CAA6C;wBAC7C,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,gBAAgB,CAAC,CAAA;wBAEzC,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,CAAA;wBAEhC,IAAM,qBAAmB,GAAG;4BAC1B;;;+BAGG;4BACH,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,IAAI,CAAC,CAAA;4BAE7B,wDAAwD;4BACxD,+CAA+C;4BAC/C,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gCACnB,MAAM,EAAE,KAAI,CAAC,eAAe,CAAC,UAAU;gCACvC,KAAK,EAAE,aAAW;6BACnB,CAAC,CAAA;4BAEF,+DAA+D;4BAC/D,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gCACtB,MAAM,EAAE,KAAI,CAAC,eAAe,CAAC,UAAU;gCACvC,KAAK,EAAE,aAAW;6BACnB,CAAC,CAAA;4BAEF,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,eAAa,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;wBACrE,CAAC,CAAA;wBAED,IAAI,cAAc,CAAC,IAAI,EAAE;4BACvB,IAAM,QAAM,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;4BAE9C,IAAM,eAAa,GAAG;;;;gDACI,qBAAM,QAAM,CAAC,IAAI,EAAE,EAAA;;4CAArC,KAAkB,SAAmB,EAAnC,KAAK,WAAA,EAAE,IAAI,UAAA;4CAEnB,IAAI,IAAI,EAAE;gDACR,qBAAmB,EAAE,CAAA;gDACrB,sBAAM;6CACP;4CAED,IAAI,KAAK,EAAE;gDACT,IAAI,CAAC,eAAe,GAAG,IAAA,qCAAiB,EACtC,IAAI,CAAC,eAAe,EACpB,KAAK,CACN,CAAA;gDAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;oDACvB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU;oDACvC,KAAK,EAAE,aAAW;iDACnB,CAAC,CAAA;6CACH;4CAED,eAAa,EAAE,CAAA;;;;iCAChB,CAAA;4BAED,eAAa,EAAE,CAAA;yBAChB;6BAAM;4BACL,qBAAmB,EAAE,CAAA;yBACtB;qBACF;yBAAM;wBACL,KAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;wBAExC,wFAAwF;wBACxF,IAAM,iBAAe,GAAG,IAAI,cAAc,EAAE,CAAA;wBAE5C,KAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAI,CAAC,MAAM,EAAE,KAAI,CAAC,GAAG,CAAC,CAAA;wBACpE,iBAAe,CAAC,IAAI,CAClB,KAAI,CAAC,MAAM,EACX,KAAI,CAAC,GAAG,EACR,MAAA,KAAI,CAAC,KAAK,mCAAI,IAAI,EAClB,KAAI,CAAC,IAAI,EACT,KAAI,CAAC,QAAQ,CACd,CAAA;wBAED,iBAAe,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;4BACnD,gEAAgE;4BAChE,oCAAoC;4BACpC,IACE,iBAAe,CAAC,UAAU,KAAK,cAAc,CAAC,gBAAgB,EAC9D;gCACA,IAAM,eAAe,GAAG,iBAAe,CAAC,qBAAqB,EAAE,CAAA;gCAC/D,KAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,eAAe,CAAC,CAAA;gCAEzD,KAAI,CAAC,gBAAgB,GAAG,IAAA,kCAAe,EAAC,eAAe,CAAC,CAAA;gCACxD,KAAI,CAAC,GAAG,CACN,wCAAwC,EACxC,KAAI,CAAC,gBAAgB,CACtB,CAAA;6BACF;wBACH,CAAC,CAAC,CAAA;wBAEF,iBAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE;4BAC5C,iEAAiE;4BACjE,sEAAsE;4BACtE,KAAI,CAAC,YAAY,GAAG,iBAAe,CAAC,YAAY,CAAA;wBAClD,CAAC,CAAC,CAAA;wBAEF,iBAAe,CAAC,gBAAgB,CAAC,UAAU,EAAE;4BAC3C,KAAI,CAAC,eAAe,GAAG,IAAA,qCAAiB,EACtC,KAAI,CAAC,eAAe,EACpB,IAAA,0BAAY,EAAC,iBAAe,CAAC,YAAY,CAAC,CAC3C,CAAA;wBACH,CAAC,CAAC,CAAA;wBAEF,iBAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE;4BACvC,KAAI,CAAC,MAAM,GAAG,iBAAe,CAAC,MAAM,CAAA;4BACpC,KAAI,CAAC,UAAU,GAAG,iBAAe,CAAC,UAAU,CAAA;4BAC5C,KAAI,CAAC,WAAW,GAAG,iBAAe,CAAC,WAAW,CAAA;4BAC9C,KAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAI,CAAC,MAAM,EAAE,KAAI,CAAC,UAAU,CAAC,CAAA;4BAEpE,sDAAsD;4BACtD,+BAA+B;4BAC/B,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,IAAI,CAAC,CAAA;4BAC7B,KAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;4BAE/C,KAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAI,CAAC,QAAQ,CAAC,CAAA;4BAClD,KAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;wBACzC,CAAC,CAAC,CAAC;wBAEH,qDAAqD;wBACrD,+DAA+D;wBAC/D,iBAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE;4BAC1C,KAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;4BAE9B,OAAO,CAAC,IAAI,CACV,UAAU,EACV,IAAA,+BAAc,EAAC,iBAAe,EAAE,KAAI,CAAC,eAAe,CAAC,EACrD,eAAe,EACf,SAAS,CACV,CAAA;wBACH,CAAC,CAAC,CAAA;wBAEF,KAAI,CAAC,gBAAgB,CAAC,iBAAe,EAAE,KAAI,CAAC,eAAe,CAAC,CAAA;wBAE5D,yEAAyE;wBACzE,gCAAgC;wBAChC,KAAI,CAAC,kBAAkB,CAAC,iBAAe,CAAC,CAAA;wBACxC,KAAI,CAAC,kBAAkB,CAAC,iBAAe,CAAC,CAAA;wBAExC,IAAI,KAAI,CAAC,KAAK,EAAE;4BACd,iBAAe,CAAC,OAAO,GAAG,KAAI,CAAC,OAAO,CAAA;yBACvC;wBAED;;;;;2BAKG;wBACH,iBAAe,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAA;wBAE3D,KAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;wBACtB,iBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;qBAC3B;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,sBAAW,gDAAY;qBAAvB;oBACE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;oBAE1B,OAAO,IAAA,0BAAY,EAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC3C,CAAC;;;eAAA;YAED,sBAAW,4CAAQ;qBAAnB;oBACE,QAAQ,IAAI,CAAC,YAAY,EAAE;wBACzB,KAAK,MAAM,CAAC,CAAC;4BACX,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;4BAC3C,OAAO,IAAA,qBAAS,EAAC,IAAI,CAAC,YAAY,CAAC,CAAA;yBACpC;wBAED,KAAK,aAAa,CAAC,CAAC;4BAClB,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;4BAClD,OAAO,IAAA,2BAAa,EAAC,IAAI,CAAC,eAAe,CAAC,CAAA;yBAC3C;wBAED,KAAK,MAAM,CAAC,CAAC;4BACX,IAAM,QAAQ,GACZ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,YAAY,CAAA;4BACxD,IAAI,CAAC,GAAG,CAAC,sCAAsC,EAAE,QAAQ,CAAC,CAAA;4BAC1D,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;yBACzD;wBAED,KAAK,UAAU,CAAC,CAAC;4BACf,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;4BAC1C,OAAO,IAAI,CAAC,WAAW,CAAA;yBACxB;wBAED,OAAO,CAAC,CAAC;4BACP,OAAO,IAAI,CAAC,YAAY,CAAA;yBACzB;qBACF;gBACH,CAAC;;;eAAA;YAED,sBAAW,+CAAW;qBAAtB;oBACE,IAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;oBAChE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;oBAEzC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;wBACpC,OAAO,CAAC,IAAI,CACV,wLAAwL,CACzL,CAAA;wBACD,OAAO,IAAI,CAAA;qBACZ;oBAED,IAAI,IAAA,mDAAwB,EAAC,WAAW,CAAC,EAAE;wBACzC,IAAI,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;wBACpD,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;qBACvE;oBAED,IAAI,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;oBAC/D,OAAO,IAAI,CAAA;gBACb,CAAC;;;eAAA;YAEM,sCAAK,GAAZ;gBACE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAEnB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;oBAChE,IAAI,CAAC,KAAK,EAAE,CAAA;oBACZ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;iBACtB;YACH,CAAC;YAEM,8CAAa,GAApB;gBACE,OAAO,KAAK,CAAA;YACd,CAAC;YAEM,iDAAgB,GAAvB,UAAwB,IAAY,EAAE,KAAa;gBACjD,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;gBACxD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC1C,CAAC;YAEM,kDAAiB,GAAxB,UAAyB,IAAY;gBACnC,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAA;gBAE1C,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;oBAC3C,IAAI,CAAC,GAAG,CACN,0DAA0D,EAC1D,IAAI,CAAC,UAAU,CAChB,CAAA;oBACD,OAAO,IAAI,CAAA;iBACZ;gBAED,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAEnD,IAAI,CAAC,GAAG,CACN,uCAAuC,EACvC,IAAI,EACJ,WAAW,EACX,IAAI,CAAC,gBAAgB,CACtB,CAAA;gBAED,OAAO,WAAW,CAAA;YACpB,CAAC;YAEM,sDAAqB,GAA5B;gBACE,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;gBAEnC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;oBAC3C,IAAI,CAAC,GAAG,CACN,yDAAyD,EACzD,IAAI,CAAC,UAAU,CAChB,CAAA;oBACD,OAAO,EAAE,CAAA;iBACV;gBAED,OAAO,IAAA,kCAAe,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/C,CAAC;YAEM,iDAAgB,GAAvB,UAEE,KAAY,EAAE,QAAoC;gBAClD,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,KAAK;oBACX,QAAQ,UAAA;iBACT,CAAC,CAAA;YACJ,CAAC;YAEM,oDAAmB,GAA1B,UACE,KAAY,EACZ,QAAyD;gBAEzD,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;gBAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,WAAW;oBAC7C,OAAO,WAAW,CAAC,IAAI,KAAK,KAAK,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAA;gBACxE,CAAC,CAAC,CAAA;YACJ,CAAC;YAEM,iDAAgB,GAAvB,cAA2B,CAAC;YAE5B;;;eAGG;YACH,mDAAkB,GAAlB,UAAmB,OAAuB;;gBACxC,IAAI,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;gBACjE,IAAM,aAAa,GAAkD;oBACnE,OAAO;oBACP,SAAS;oBACT,WAAW;oBACX,QAAQ;oBACR,aAAa;oBACb,WAAW;oBACX,YAAY;oBACZ,oBAAoB;iBACrB,CAAA;;oBAED,KAA2B,IAAA,kBAAA,SAAA,aAAa,CAAA,4CAAA,uEAAE;wBAArC,IAAM,YAAY,0BAAA;wBACrB,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;wBAEnC,IAAI,QAAQ,EAAE;4BACZ,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,YAAY,CAAQ,CAAA;4BAEjD,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;yBACjE;qBACF;;;;;;;;;gBAED,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;gBAC9B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;gBAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC5B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;gBACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;gBAClC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;gBACpC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAA;YACtD,CAAC;YAED;;;eAGG;YACH,mDAAkB,GAAlB,UAAmB,OAAuB;gBACxC,IAAI,CAAC,GAAG,CACN,4DAA4D,EAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,EACnB,IAAI,CAAC,OAAO,CACb,CAAA;gBAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,EAAkB;wBAAhB,IAAI,UAAA,EAAE,QAAQ,cAAA;oBACpC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;gBAC1C,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,iDAAgB,GAAhB,UAAiB,OAAuB,EAAE,OAAgB;;gBACxD,IAAI,CAAC,GAAG,CAAC,qDAAqD,EAAE,OAAO,CAAC,CAAA;;oBAExE,KAAwC,IAAA,YAAA,SAAA,OAAO,CAAA,gCAAA,qDAAE;wBAAtC,IAAA,KAAA,4BAAyB,EAAxB,UAAU,QAAA,EAAE,WAAW,QAAA;wBACjC,IAAI,CAAC,GAAG,CACN,kDAAkD,EAClD,UAAU,EACV,WAAW,CACZ,CAAA;wBACD,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;qBAClD;;;;;;;;;YACH,CAAC;YACH,6BAAC;QAAD,CAAC,AApnBM;QAWL,mBAAmB;QACI,SAAM,GAAG,CAAC;QACV,SAAM,GAAG,CAAC;QACV,mBAAgB,GAAG,CAAC;QACpB,UAAO,GAAG,CAAC;QACX,OAAI,GAAG,CAAC;WAomBhC;AACH,CAAC,CAAA;AA1nBY,QAAA,4BAA4B,gCA0nBxC"}
|