wrangler 0.0.0-e1d50407 → 0.0.0-e1e76ce2
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/config-schema.json +2915 -0
- package/package.json +30 -19
- package/templates/facade.d.ts +7 -5
- package/templates/gitignore +0 -5
- package/templates/init-tests/test-vitest-new-worker.js +1 -1
- package/templates/init-tests/test-vitest-new-worker.ts +1 -1
- package/templates/middleware/loader-modules.ts +93 -97
- package/templates/middleware/loader-sw.ts +4 -3
- package/templates/middleware/middleware-dispatchee.ts +53 -0
- package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +0 -1
- package/templates/middleware/middleware-outbound.ts +35 -0
- package/templates/middleware/middleware-serve-static-assets.ts +5 -5
- package/templates/pages-dev-pipeline.ts +2 -1
- package/templates/startDevWorker/InspectorProxyWorker.ts +13 -4
- package/templates/startDevWorker/ProxyWorker.ts +118 -39
- package/wrangler-dist/InspectorProxyWorker.js +4 -0
- package/wrangler-dist/InspectorProxyWorker.js.map +1 -1
- package/wrangler-dist/ProxyWorker.js +78 -24
- package/wrangler-dist/ProxyWorker.js.map +1 -1
- package/wrangler-dist/cli.d.ts +709 -215
- package/wrangler-dist/cli.js +34557 -21949
- package/templates/middleware/middleware-d1-beta.d.ts +0 -3
- package/templates/middleware/middleware-multiworker-dev.d.ts +0 -4
- package/templates/middleware/middleware-multiworker-dev.ts +0 -68
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
createDeferred,
|
|
3
|
+
DeferredPromise,
|
|
4
|
+
urlFromParts,
|
|
5
|
+
} from "../../src/api/startDevWorker/utils";
|
|
2
6
|
import type {
|
|
7
|
+
ProxyData,
|
|
3
8
|
ProxyWorkerIncomingRequestBody,
|
|
4
9
|
ProxyWorkerOutgoingRequestBody,
|
|
5
|
-
ProxyData,
|
|
6
10
|
} from "../../src/api/startDevWorker/events";
|
|
7
|
-
import {
|
|
8
|
-
DeferredPromise,
|
|
9
|
-
createDeferred,
|
|
10
|
-
} from "../../src/api/startDevWorker/utils";
|
|
11
11
|
|
|
12
12
|
interface Env {
|
|
13
13
|
PROXY_CONTROLLER: Fetcher;
|
|
@@ -37,6 +37,7 @@ export class ProxyWorker implements DurableObject {
|
|
|
37
37
|
|
|
38
38
|
proxyData?: ProxyData;
|
|
39
39
|
requestQueue = new Map<Request, DeferredPromise<Response>>();
|
|
40
|
+
requestRetryQueue = new Map<Request, DeferredPromise<Response>>();
|
|
40
41
|
|
|
41
42
|
fetch(request: Request) {
|
|
42
43
|
if (isRequestForLiveReloadWebsocket(request)) {
|
|
@@ -94,17 +95,29 @@ export class ProxyWorker implements DurableObject {
|
|
|
94
95
|
return new Response(null, { status: 204 });
|
|
95
96
|
}
|
|
96
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Process requests that are being retried first, then process newer requests.
|
|
100
|
+
* Requests that are being retried are, by definition, older than requests which haven't been processed yet.
|
|
101
|
+
* We don't need to be more accurate than this re ordering, since the requests are being fired off synchronously.
|
|
102
|
+
*/
|
|
103
|
+
*getOrderedQueue() {
|
|
104
|
+
yield* this.requestRetryQueue;
|
|
105
|
+
yield* this.requestQueue;
|
|
106
|
+
}
|
|
107
|
+
|
|
97
108
|
processQueue() {
|
|
98
|
-
const { proxyData } = this; //
|
|
109
|
+
const { proxyData } = this; // store proxyData at the moment this function was called
|
|
99
110
|
if (proxyData === undefined) return;
|
|
100
111
|
|
|
101
|
-
for (const [request, deferredResponse] of this.
|
|
112
|
+
for (const [request, deferredResponse] of this.getOrderedQueue()) {
|
|
113
|
+
this.requestRetryQueue.delete(request);
|
|
102
114
|
this.requestQueue.delete(request);
|
|
103
115
|
|
|
104
|
-
const
|
|
116
|
+
const outerUrl = new URL(request.url);
|
|
105
117
|
const headers = new Headers(request.headers);
|
|
106
118
|
|
|
107
119
|
// override url parts for proxying
|
|
120
|
+
const userWorkerUrl = new URL(request.url);
|
|
108
121
|
Object.assign(userWorkerUrl, proxyData.userWorkerUrl);
|
|
109
122
|
|
|
110
123
|
// set request.url in the UserWorker
|
|
@@ -113,8 +126,17 @@ export class ProxyWorker implements DurableObject {
|
|
|
113
126
|
headers.set("MF-Original-URL", innerUrl.href);
|
|
114
127
|
headers.set("MF-Disable-Pretty-Error", "true"); // disables the UserWorker miniflare instance from rendering the pretty error -- instead the ProxyWorker miniflare instance will intercept the json error response and render the pretty error page
|
|
115
128
|
|
|
129
|
+
// Preserve client `Accept-Encoding`, rather than using Worker's default
|
|
130
|
+
// of `Accept-Encoding: br, gzip`
|
|
131
|
+
const encoding = request.cf?.clientAcceptEncoding;
|
|
132
|
+
if (encoding !== undefined) headers.set("Accept-Encoding", encoding);
|
|
133
|
+
|
|
134
|
+
rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);
|
|
135
|
+
|
|
116
136
|
// merge proxyData headers with the request headers
|
|
117
137
|
for (const [key, value] of Object.entries(proxyData.headers ?? {})) {
|
|
138
|
+
if (value === undefined) continue;
|
|
139
|
+
|
|
118
140
|
if (key.toLowerCase() === "cookie") {
|
|
119
141
|
const existing = request.headers.get("cookie") ?? "";
|
|
120
142
|
headers.set("cookie", `${existing};${value}`);
|
|
@@ -123,10 +145,12 @@ export class ProxyWorker implements DurableObject {
|
|
|
123
145
|
}
|
|
124
146
|
}
|
|
125
147
|
|
|
126
|
-
// explicitly NOT await-ing this promise, we are in a loop and want to process the whole queue quickly
|
|
127
|
-
// if we decide to await, we should include a timeout (~100ms) in case the user worker has long-running/parellel requests
|
|
148
|
+
// explicitly NOT await-ing this promise, we are in a loop and want to process the whole queue quickly + synchronously
|
|
128
149
|
void fetch(userWorkerUrl, new Request(request, { headers }))
|
|
129
150
|
.then((res) => {
|
|
151
|
+
res = new Response(res.body, res);
|
|
152
|
+
rewriteUrlRelatedHeaders(res.headers, innerUrl, outerUrl);
|
|
153
|
+
|
|
130
154
|
if (isHtmlResponse(res)) {
|
|
131
155
|
res = insertLiveReloadScript(request, res, this.env, proxyData);
|
|
132
156
|
}
|
|
@@ -137,17 +161,55 @@ export class ProxyWorker implements DurableObject {
|
|
|
137
161
|
// errors here are network errors or from response post-processing
|
|
138
162
|
// to catch only network errors, use the 2nd param of the fetch.then()
|
|
139
163
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
164
|
+
// we have crossed an async boundary, so proxyData may have changed
|
|
165
|
+
// if proxyData.userWorkerUrl has changed, it means there is a new downstream UserWorker
|
|
166
|
+
// and that this error is stale since it was for a request to the old UserWorker
|
|
167
|
+
// so here we construct a newUserWorkerUrl so we can compare it to the (old) userWorkerUrl
|
|
168
|
+
const newUserWorkerUrl =
|
|
169
|
+
this.proxyData && urlFromParts(this.proxyData.userWorkerUrl);
|
|
170
|
+
|
|
171
|
+
// only report errors if the downstream proxy has NOT changed
|
|
172
|
+
if (userWorkerUrl.href === newUserWorkerUrl?.href) {
|
|
173
|
+
void sendMessageToProxyController(this.env, {
|
|
174
|
+
type: "error",
|
|
175
|
+
error: {
|
|
176
|
+
name: error.name,
|
|
177
|
+
message: error.message,
|
|
178
|
+
stack: error.stack,
|
|
179
|
+
cause: error.cause,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
deferredResponse.reject(error);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// if the request can be retried (subset of idempotent requests which have no body), requeue it
|
|
187
|
+
else if (request.method === "GET" || request.method === "HEAD") {
|
|
188
|
+
this.requestRetryQueue.set(request, deferredResponse);
|
|
189
|
+
// we would only end up here if the downstream UserWorker is chang*ing*
|
|
190
|
+
// i.e. we are in a `pause`d state and expecting a `play` message soon
|
|
191
|
+
// this request will be processed (retried) when the `play` message arrives
|
|
192
|
+
// for that reason, we do not need to call `this.processQueue` here
|
|
193
|
+
// (but, also, it can't hurt to call it since it bails when
|
|
194
|
+
// in a `pause`d state i.e. `this.proxyData` is undefined)
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// if the request cannot be retried, respond with 503 Service Unavailable
|
|
198
|
+
// important to note, this is not an (unexpected) error -- it is an acceptable flow of local development
|
|
199
|
+
// it would be incorrect to retry non-idempotent requests
|
|
200
|
+
// and would require cloning all body streams to avoid stream reuse (which is inefficient but not out of the question in the future)
|
|
201
|
+
// this is a good enough UX for now since it solves the most common GET use-case
|
|
202
|
+
else {
|
|
203
|
+
deferredResponse.resolve(
|
|
204
|
+
new Response(
|
|
205
|
+
"Your worker restarted mid-request. Please try sending the request again. Only GET or HEAD requests are retried automatically.",
|
|
206
|
+
{
|
|
207
|
+
status: 503,
|
|
208
|
+
headers: { "Retry-After": "0" },
|
|
209
|
+
}
|
|
210
|
+
)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
151
213
|
});
|
|
152
214
|
}
|
|
153
215
|
}
|
|
@@ -166,25 +228,14 @@ function isRequestForLiveReloadWebsocket(req: Request): boolean {
|
|
|
166
228
|
return isWebSocketUpgrade && websocketProtocol === LIVE_RELOAD_PROTOCOL;
|
|
167
229
|
}
|
|
168
230
|
|
|
169
|
-
|
|
231
|
+
function sendMessageToProxyController(
|
|
170
232
|
env: Env,
|
|
171
|
-
message: ProxyWorkerOutgoingRequestBody
|
|
172
|
-
retries = 3
|
|
233
|
+
message: ProxyWorkerOutgoingRequestBody
|
|
173
234
|
) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
179
|
-
} catch (cause) {
|
|
180
|
-
if (retries > 0) {
|
|
181
|
-
return sendMessageToProxyController(env, message, retries - 1);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// no point sending an error message if we can't send this message
|
|
185
|
-
|
|
186
|
-
throw cause;
|
|
187
|
-
}
|
|
235
|
+
return env.PROXY_CONTROLLER.fetch("http://dummy", {
|
|
236
|
+
method: "POST",
|
|
237
|
+
body: JSON.stringify(message),
|
|
238
|
+
});
|
|
188
239
|
}
|
|
189
240
|
|
|
190
241
|
function insertLiveReloadScript(
|
|
@@ -250,3 +301,31 @@ function insertLiveReloadScript(
|
|
|
250
301
|
|
|
251
302
|
return htmlRewriter.transform(response);
|
|
252
303
|
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Rewrite references to URLs in request/response headers.
|
|
307
|
+
*
|
|
308
|
+
* This function is used to map the URLs in headers like Origin and Access-Control-Allow-Origin
|
|
309
|
+
* so that this proxy is transparent to the Client Browser and User Worker.
|
|
310
|
+
*/
|
|
311
|
+
function rewriteUrlRelatedHeaders(headers: Headers, from: URL, to: URL) {
|
|
312
|
+
const setCookie = headers.getAll("Set-Cookie");
|
|
313
|
+
headers.delete("Set-Cookie");
|
|
314
|
+
headers.forEach((value, key) => {
|
|
315
|
+
if (typeof value === "string" && value.includes(from.host)) {
|
|
316
|
+
headers.set(
|
|
317
|
+
key,
|
|
318
|
+
value.replaceAll(from.origin, to.origin).replaceAll(from.host, to.host)
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
for (const cookie of setCookie) {
|
|
323
|
+
headers.append(
|
|
324
|
+
"Set-Cookie",
|
|
325
|
+
cookie.replace(
|
|
326
|
+
new RegExp(`Domain=${from.hostname}($|;|,)`),
|
|
327
|
+
`Domain=${to.hostname}$1`
|
|
328
|
+
)
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
@@ -216,6 +216,10 @@ var InspectorProxyWorker = class {
|
|
|
216
216
|
);
|
|
217
217
|
runtimeWebSocketUrl.protocol = this.proxyData.userWorkerUrl.protocol;
|
|
218
218
|
this.sendDebugLog("NEW RUNTIME WEBSOCKET", runtimeWebSocketUrl);
|
|
219
|
+
this.sendDevToolsMessage({
|
|
220
|
+
method: "Runtime.executionContextsCleared",
|
|
221
|
+
params: void 0
|
|
222
|
+
});
|
|
219
223
|
const upgrade = await fetch(runtimeWebSocketUrl, {
|
|
220
224
|
headers: {
|
|
221
225
|
...this.proxyData.headers,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../templates/startDevWorker/InspectorProxyWorker.ts", "../src/api/startDevWorker/events.ts", "../src/api/startDevWorker/utils.ts"],
|
|
4
|
-
"mappings": ";AAAA,OAAOA,aAAY;;;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["assert", "assert"]
|
|
6
6
|
}
|
|
@@ -15,6 +15,11 @@ function createDeferred(previousDeferred) {
|
|
|
15
15
|
reject
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
+
function urlFromParts(parts, base = "http://localhost") {
|
|
19
|
+
const url = new URL(base);
|
|
20
|
+
Object.assign(url, parts);
|
|
21
|
+
return url;
|
|
22
|
+
}
|
|
18
23
|
|
|
19
24
|
// templates/startDevWorker/ProxyWorker.ts
|
|
20
25
|
var LIVE_RELOAD_PROTOCOL = "WRANGLER_PROXYWORKER_LIVE_RELOAD_PROTOCOL";
|
|
@@ -32,6 +37,7 @@ var ProxyWorker = class {
|
|
|
32
37
|
}
|
|
33
38
|
proxyData;
|
|
34
39
|
requestQueue = /* @__PURE__ */ new Map();
|
|
40
|
+
requestRetryQueue = /* @__PURE__ */ new Map();
|
|
35
41
|
fetch(request) {
|
|
36
42
|
if (isRequestForLiveReloadWebsocket(request)) {
|
|
37
43
|
return this.handleLiveReloadWebSocket(request);
|
|
@@ -68,20 +74,37 @@ var ProxyWorker = class {
|
|
|
68
74
|
}
|
|
69
75
|
return new Response(null, { status: 204 });
|
|
70
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Process requests that are being retried first, then process newer requests.
|
|
79
|
+
* Requests that are being retried are, by definition, older than requests which haven't been processed yet.
|
|
80
|
+
* We don't need to be more accurate than this re ordering, since the requests are being fired off synchronously.
|
|
81
|
+
*/
|
|
82
|
+
*getOrderedQueue() {
|
|
83
|
+
yield* this.requestRetryQueue;
|
|
84
|
+
yield* this.requestQueue;
|
|
85
|
+
}
|
|
71
86
|
processQueue() {
|
|
72
87
|
const { proxyData } = this;
|
|
73
88
|
if (proxyData === void 0)
|
|
74
89
|
return;
|
|
75
|
-
for (const [request, deferredResponse] of this.
|
|
90
|
+
for (const [request, deferredResponse] of this.getOrderedQueue()) {
|
|
91
|
+
this.requestRetryQueue.delete(request);
|
|
76
92
|
this.requestQueue.delete(request);
|
|
77
|
-
const
|
|
93
|
+
const outerUrl = new URL(request.url);
|
|
78
94
|
const headers = new Headers(request.headers);
|
|
95
|
+
const userWorkerUrl = new URL(request.url);
|
|
79
96
|
Object.assign(userWorkerUrl, proxyData.userWorkerUrl);
|
|
80
97
|
const innerUrl = new URL(request.url);
|
|
81
98
|
Object.assign(innerUrl, proxyData.userWorkerInnerUrlOverrides);
|
|
82
99
|
headers.set("MF-Original-URL", innerUrl.href);
|
|
83
100
|
headers.set("MF-Disable-Pretty-Error", "true");
|
|
101
|
+
const encoding = request.cf?.clientAcceptEncoding;
|
|
102
|
+
if (encoding !== void 0)
|
|
103
|
+
headers.set("Accept-Encoding", encoding);
|
|
104
|
+
rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);
|
|
84
105
|
for (const [key, value] of Object.entries(proxyData.headers ?? {})) {
|
|
106
|
+
if (value === void 0)
|
|
107
|
+
continue;
|
|
85
108
|
if (key.toLowerCase() === "cookie") {
|
|
86
109
|
const existing = request.headers.get("cookie") ?? "";
|
|
87
110
|
headers.set("cookie", `${existing};${value}`);
|
|
@@ -90,21 +113,38 @@ var ProxyWorker = class {
|
|
|
90
113
|
}
|
|
91
114
|
}
|
|
92
115
|
void fetch(userWorkerUrl, new Request(request, { headers })).then((res) => {
|
|
116
|
+
res = new Response(res.body, res);
|
|
117
|
+
rewriteUrlRelatedHeaders(res.headers, innerUrl, outerUrl);
|
|
93
118
|
if (isHtmlResponse(res)) {
|
|
94
119
|
res = insertLiveReloadScript(request, res, this.env, proxyData);
|
|
95
120
|
}
|
|
96
121
|
deferredResponse.resolve(res);
|
|
97
122
|
}).catch((error) => {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
123
|
+
const newUserWorkerUrl = this.proxyData && urlFromParts(this.proxyData.userWorkerUrl);
|
|
124
|
+
if (userWorkerUrl.href === newUserWorkerUrl?.href) {
|
|
125
|
+
void sendMessageToProxyController(this.env, {
|
|
126
|
+
type: "error",
|
|
127
|
+
error: {
|
|
128
|
+
name: error.name,
|
|
129
|
+
message: error.message,
|
|
130
|
+
stack: error.stack,
|
|
131
|
+
cause: error.cause
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
deferredResponse.reject(error);
|
|
135
|
+
} else if (request.method === "GET" || request.method === "HEAD") {
|
|
136
|
+
this.requestRetryQueue.set(request, deferredResponse);
|
|
137
|
+
} else {
|
|
138
|
+
deferredResponse.resolve(
|
|
139
|
+
new Response(
|
|
140
|
+
"Your worker restarted mid-request. Please try sending the request again. Only GET or HEAD requests are retried automatically.",
|
|
141
|
+
{
|
|
142
|
+
status: 503,
|
|
143
|
+
headers: { "Retry-After": "0" }
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
);
|
|
147
|
+
}
|
|
108
148
|
});
|
|
109
149
|
}
|
|
110
150
|
}
|
|
@@ -120,18 +160,11 @@ function isRequestForLiveReloadWebsocket(req) {
|
|
|
120
160
|
const isWebSocketUpgrade = req.headers.get("Upgrade") === "websocket";
|
|
121
161
|
return isWebSocketUpgrade && websocketProtocol === LIVE_RELOAD_PROTOCOL;
|
|
122
162
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
});
|
|
129
|
-
} catch (cause) {
|
|
130
|
-
if (retries > 0) {
|
|
131
|
-
return sendMessageToProxyController(env, message, retries - 1);
|
|
132
|
-
}
|
|
133
|
-
throw cause;
|
|
134
|
-
}
|
|
163
|
+
function sendMessageToProxyController(env, message) {
|
|
164
|
+
return env.PROXY_CONTROLLER.fetch("http://dummy", {
|
|
165
|
+
method: "POST",
|
|
166
|
+
body: JSON.stringify(message)
|
|
167
|
+
});
|
|
135
168
|
}
|
|
136
169
|
function insertLiveReloadScript(request, response, env, proxyData) {
|
|
137
170
|
const htmlRewriter = new HTMLRewriter();
|
|
@@ -179,6 +212,27 @@ function insertLiveReloadScript(request, response, env, proxyData) {
|
|
|
179
212
|
});
|
|
180
213
|
return htmlRewriter.transform(response);
|
|
181
214
|
}
|
|
215
|
+
function rewriteUrlRelatedHeaders(headers, from, to) {
|
|
216
|
+
const setCookie = headers.getAll("Set-Cookie");
|
|
217
|
+
headers.delete("Set-Cookie");
|
|
218
|
+
headers.forEach((value, key) => {
|
|
219
|
+
if (typeof value === "string" && value.includes(from.host)) {
|
|
220
|
+
headers.set(
|
|
221
|
+
key,
|
|
222
|
+
value.replaceAll(from.origin, to.origin).replaceAll(from.host, to.host)
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
for (const cookie of setCookie) {
|
|
227
|
+
headers.append(
|
|
228
|
+
"Set-Cookie",
|
|
229
|
+
cookie.replace(
|
|
230
|
+
new RegExp(`Domain=${from.hostname}($|;|,)`),
|
|
231
|
+
`Domain=${to.hostname}$1`
|
|
232
|
+
)
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
182
236
|
export {
|
|
183
237
|
ProxyWorker,
|
|
184
238
|
ProxyWorker_default as default
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/api/startDevWorker/utils.ts", "../templates/startDevWorker/ProxyWorker.ts"],
|
|
4
|
-
"mappings": ";AAAA,OAAO,YAAY;AASZ,SAAS,eACf,kBACqB;AACrB,MAAI,SAAS;AACb,QAAM,aAAa,IAAI,QAAW,CAAC,UAAU,YAAY;AACxD,cAAU;AACV,aAAS;AAAA,EACV,CAAC;AACD,SAAO,OAAO;AACd,SAAO,MAAM;AAIb,oBAAkB,QAAQ,UAAU;AAEpC,SAAO;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACD;AACD;;;
|
|
4
|
+
"mappings": ";AAAA,OAAO,YAAY;AASZ,SAAS,eACf,kBACqB;AACrB,MAAI,SAAS;AACb,QAAM,aAAa,IAAI,QAAW,CAAC,UAAU,YAAY;AACxD,cAAU;AACV,aAAS;AAAA,EACV,CAAC;AACD,SAAO,OAAO;AACd,SAAO,MAAM;AAIb,oBAAkB,QAAQ,UAAU;AAEpC,SAAO;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACD;AACD;AAIO,SAAS,aACf,OACA,OAAO,oBACD;AACN,QAAM,MAAM,IAAI,IAAI,IAAI;AAExB,SAAO,OAAO,KAAK,KAAK;AAExB,SAAO;AACR;;;AClBA,IAAM,uBAAuB;AAC7B,IAAO,sBAAQ;AAAA,EACd,MAAM,KAAK,KAAK;AACf,UAAM,YAAY,IAAI,eAAe,WAAW,EAAE;AAClD,UAAM,iBAAiB,IAAI,eAAe,IAAI,SAAS;AAEvD,WAAO,eAAe,MAAM,GAAG;AAAA,EAChC;AACD;AAEO,IAAM,cAAN,MAA2C;AAAA,EACjD,YAAqB,OAAoC,KAAU;AAA9C;AAAoC;AAAA,EAAW;AAAA,EAEpE;AAAA,EACA,eAAe,oBAAI,IAAwC;AAAA,EAC3D,oBAAoB,oBAAI,IAAwC;AAAA,EAEhE,MAAM,SAAkB;AACvB,QAAI,gCAAgC,OAAO,GAAG;AAG7C,aAAO,KAAK,0BAA0B,OAAO;AAAA,IAC9C;AAEA,QAAI,6BAA6B,SAAS,KAAK,GAAG,GAAG;AAGpD,aAAO,KAAK,8BAA8B,OAAO;AAAA,IAClD;AAGA,UAAM,WAAW,eAAyB;AAE1C,SAAK,aAAa,IAAI,SAAS,QAAQ;AACvC,SAAK,aAAa;AAElB,WAAO,SAAS;AAAA,EACjB;AAAA,EAEA,0BAA0B,SAAkB;AAC3C,UAAM,EAAE,GAAG,UAAU,GAAG,WAAW,IAAI,IAAI,cAAc;AACzD,UAAM,oBACL,QAAQ,QAAQ,IAAI,wBAAwB,KAAK;AAElD,SAAK,MAAM,gBAAgB,YAAY,CAAC,aAAa,CAAC;AAEtD,WAAO,IAAI,SAAS,MAAM;AAAA,MACzB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS,EAAE,0BAA0B,kBAAkB;AAAA,IACxD,CAAC;AAAA,EACF;AAAA,EAEA,8BAA8B,SAAkB;AAC/C,UAAM,QAAQ,QAAQ,IAAI;AAC1B,YAAQ,OAAO,MAAM;AAAA,MACpB,KAAK;AACJ,aAAK,YAAY;AACjB;AAAA,MAED,KAAK;AACJ,aAAK,YAAY,MAAM;AACvB,aAAK,aAAa;AAClB,aAAK,MACH,cAAc,aAAa,EAC3B,QAAQ,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;AAEnC;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,kBAAkB;AAClB,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,eAAe;AACd,UAAM,EAAE,UAAU,IAAI;AACtB,QAAI,cAAc;AAAW;AAE7B,eAAW,CAAC,SAAS,gBAAgB,KAAK,KAAK,gBAAgB,GAAG;AACjE,WAAK,kBAAkB,OAAO,OAAO;AACrC,WAAK,aAAa,OAAO,OAAO;AAEhC,YAAM,WAAW,IAAI,IAAI,QAAQ,GAAG;AACpC,YAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;AAG3C,YAAM,gBAAgB,IAAI,IAAI,QAAQ,GAAG;AACzC,aAAO,OAAO,eAAe,UAAU,aAAa;AAGpD,YAAM,WAAW,IAAI,IAAI,QAAQ,GAAG;AACpC,aAAO,OAAO,UAAU,UAAU,2BAA2B;AAC7D,cAAQ,IAAI,mBAAmB,SAAS,IAAI;AAC5C,cAAQ,IAAI,2BAA2B,MAAM;AAI7C,YAAM,WAAW,QAAQ,IAAI;AAC7B,UAAI,aAAa;AAAW,gBAAQ,IAAI,mBAAmB,QAAQ;AAEnE,+BAAyB,SAAS,UAAU,QAAQ;AAGpD,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,WAAW,CAAC,CAAC,GAAG;AACnE,YAAI,UAAU;AAAW;AAEzB,YAAI,IAAI,YAAY,MAAM,UAAU;AACnC,gBAAM,WAAW,QAAQ,QAAQ,IAAI,QAAQ,KAAK;AAClD,kBAAQ,IAAI,UAAU,GAAG,YAAY,OAAO;AAAA,QAC7C,OAAO;AACN,kBAAQ,IAAI,KAAK,KAAK;AAAA,QACvB;AAAA,MACD;AAGA,WAAK,MAAM,eAAe,IAAI,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC,EACzD,KAAK,CAAC,QAAQ;AACd,cAAM,IAAI,SAAS,IAAI,MAAM,GAAG;AAChC,iCAAyB,IAAI,SAAS,UAAU,QAAQ;AAExD,YAAI,eAAe,GAAG,GAAG;AACxB,gBAAM,uBAAuB,SAAS,KAAK,KAAK,KAAK,SAAS;AAAA,QAC/D;AAEA,yBAAiB,QAAQ,GAAG;AAAA,MAC7B,CAAC,EACA,MAAM,CAAC,UAAiB;AAQxB,cAAM,mBACL,KAAK,aAAa,aAAa,KAAK,UAAU,aAAa;AAG5D,YAAI,cAAc,SAAS,kBAAkB,MAAM;AAClD,eAAK,6BAA6B,KAAK,KAAK;AAAA,YAC3C,MAAM;AAAA,YACN,OAAO;AAAA,cACN,MAAM,MAAM;AAAA,cACZ,SAAS,MAAM;AAAA,cACf,OAAO,MAAM;AAAA,cACb,OAAO,MAAM;AAAA,YACd;AAAA,UACD,CAAC;AAED,2BAAiB,OAAO,KAAK;AAAA,QAC9B,WAGS,QAAQ,WAAW,SAAS,QAAQ,WAAW,QAAQ;AAC/D,eAAK,kBAAkB,IAAI,SAAS,gBAAgB;AAAA,QAOrD,OAOK;AACJ,2BAAiB;AAAA,YAChB,IAAI;AAAA,cACH;AAAA,cACA;AAAA,gBACC,QAAQ;AAAA,gBACR,SAAS,EAAE,eAAe,IAAI;AAAA,cAC/B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACH;AAAA,EACD;AACD;AAEA,SAAS,6BAA6B,KAAc,KAAmB;AACtE,SAAO,IAAI,QAAQ,IAAI,eAAe,MAAM,IAAI;AACjD;AACA,SAAS,eAAe,KAAwB;AAC/C,SAAO,IAAI,QAAQ,IAAI,cAAc,GAAG,WAAW,WAAW,KAAK;AACpE;AACA,SAAS,gCAAgC,KAAuB;AAC/D,QAAM,oBAAoB,IAAI,QAAQ,IAAI,wBAAwB;AAClE,QAAM,qBAAqB,IAAI,QAAQ,IAAI,SAAS,MAAM;AAE1D,SAAO,sBAAsB,sBAAsB;AACpD;AAEA,SAAS,6BACR,KACA,SACC;AACD,SAAO,IAAI,iBAAiB,MAAM,gBAAgB;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,OAAO;AAAA,EAC7B,CAAC;AACF;AAEA,SAAS,uBACR,SACA,UACA,KACA,WACC;AACD,QAAM,eAAe,IAAI,aAAa;AAGtC,MAAI,eAAe;AACnB,eAAa,GAAG,qBAAqB;AAAA,IACpC,KAAK,SAAS;AACb,sBAAgB,QAAQ;AAAA,IACzB;AAAA,EACD,CAAC;AAED,eAAa,WAAW;AAAA,IACvB,IAAI,KAAK;AACR,UACC,SAAS,WAAW,OACpB,aAAa,SAAS,uCAAuC,GAC5D;AACD,aAAK,6BAA6B,KAAK;AAAA,UACtC,MAAM;AAAA,UACN;AAAA,QACD,CAAC;AAAA,MACF;AAIA,UAAI,UAAU,YAAY;AACzB,cAAM,eAAe,IAAI,IAAI,QAAQ,GAAG;AACxC,qBAAa,WACZ,aAAa,aAAa,UAAU,QAAQ;AAE7C,YAAI;AAAA,UACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+DAW0D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQ1D,EAAE,MAAM,KAAK;AAAA,QACd;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AAED,SAAO,aAAa,UAAU,QAAQ;AACvC;AAQA,SAAS,yBAAyB,SAAkB,MAAW,IAAS;AACvE,QAAM,YAAY,QAAQ,OAAO,YAAY;AAC7C,UAAQ,OAAO,YAAY;AAC3B,UAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC/B,QAAI,OAAO,UAAU,YAAY,MAAM,SAAS,KAAK,IAAI,GAAG;AAC3D,cAAQ;AAAA,QACP;AAAA,QACA,MAAM,WAAW,KAAK,QAAQ,GAAG,MAAM,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI;AAAA,MACvE;AAAA,IACD;AAAA,EACD,CAAC;AACD,aAAW,UAAU,WAAW;AAC/B,YAAQ;AAAA,MACP;AAAA,MACA,OAAO;AAAA,QACN,IAAI,OAAO,UAAU,KAAK,iBAAiB;AAAA,QAC3C,UAAU,GAAG;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|