automation_model 1.0.678-dev → 1.0.678-stage
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/README.md +4 -1
- package/lib/analyze_helper.js.map +1 -1
- package/lib/api.d.ts +0 -1
- package/lib/api.js.map +1 -1
- package/lib/auto_page.d.ts +4 -2
- package/lib/auto_page.js +181 -59
- package/lib/auto_page.js.map +1 -1
- package/lib/browser_manager.js +31 -8
- package/lib/browser_manager.js.map +1 -1
- package/lib/bruno.d.ts +1 -0
- package/lib/bruno.js +120 -21
- package/lib/bruno.js.map +1 -1
- package/lib/command_common.js +9 -1
- package/lib/command_common.js.map +1 -1
- package/lib/date_time.js.map +1 -1
- package/lib/drawRect.js.map +1 -1
- package/lib/environment.d.ts +1 -0
- package/lib/environment.js +1 -0
- package/lib/environment.js.map +1 -1
- package/lib/error-messages.js.map +1 -1
- package/lib/file_checker.d.ts +1 -0
- package/lib/file_checker.js +61 -0
- package/lib/file_checker.js.map +1 -0
- package/lib/find_function.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/init_browser.js +4 -4
- package/lib/init_browser.js.map +1 -1
- package/lib/locate_element.js.map +1 -1
- package/lib/locator.d.ts +1 -0
- package/lib/locator.js +10 -3
- package/lib/locator.js.map +1 -1
- package/lib/locator_log.js.map +1 -1
- package/lib/network.d.ts +2 -0
- package/lib/network.js +148 -0
- package/lib/network.js.map +1 -1
- package/lib/route.d.ts +21 -0
- package/lib/route.js +408 -0
- package/lib/route.js.map +1 -0
- package/lib/scripts/axe.mini.js +3 -3
- package/lib/snapshot_validation.d.ts +37 -0
- package/lib/snapshot_validation.js +357 -0
- package/lib/snapshot_validation.js.map +1 -0
- package/lib/stable_browser.d.ts +63 -25
- package/lib/stable_browser.js +1105 -254
- package/lib/stable_browser.js.map +1 -1
- package/lib/table.d.ts +9 -7
- package/lib/table.js +82 -12
- package/lib/table.js.map +1 -1
- package/lib/table_analyze.js.map +1 -1
- package/lib/table_helper.js.map +1 -1
- package/lib/test_context.d.ts +1 -0
- package/lib/test_context.js +1 -0
- package/lib/test_context.js.map +1 -1
- package/lib/utils.d.ts +3 -2
- package/lib/utils.js +83 -57
- package/lib/utils.js.map +1 -1
- package/package.json +14 -8
package/lib/route.js
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import fs from "fs/promises";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import objectPath from "object-path";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
async function loadRoutes(context) {
|
|
6
|
+
if (context.loadedRoutes !== null)
|
|
7
|
+
return context.loadedRoutes;
|
|
8
|
+
try {
|
|
9
|
+
let dir = path.join(process.cwd(), "data", "routes");
|
|
10
|
+
if (process.env.TEMP_RUN === "true") {
|
|
11
|
+
dir = path.join(tmpdir(), "blinq_temp_routes");
|
|
12
|
+
}
|
|
13
|
+
if (!(await folderExists(dir))) {
|
|
14
|
+
context.loadedRoutes = [];
|
|
15
|
+
return context.loadedRoutes;
|
|
16
|
+
}
|
|
17
|
+
const files = await fs.readdir(dir);
|
|
18
|
+
const jsonFiles = files.filter((f) => f.endsWith(".json"));
|
|
19
|
+
const allRoutes = [];
|
|
20
|
+
for (const file of jsonFiles) {
|
|
21
|
+
const content = await fs.readFile(path.join(dir, file), "utf-8");
|
|
22
|
+
const routeObj = JSON.parse(content);
|
|
23
|
+
allRoutes.push(routeObj);
|
|
24
|
+
}
|
|
25
|
+
context.loadedRoutes = allRoutes;
|
|
26
|
+
console.log(`Loaded ${allRoutes.length} route definitions from ${dir}`);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error("Error loading routes:", error);
|
|
30
|
+
context.loadedRoutes = [];
|
|
31
|
+
}
|
|
32
|
+
return context.loadedRoutes;
|
|
33
|
+
}
|
|
34
|
+
function matchRoute(routeItem, req) {
|
|
35
|
+
const url = new URL(req.request().url());
|
|
36
|
+
const methodMatch = !routeItem.filters.method || routeItem.filters.method === req.request().method();
|
|
37
|
+
const pathMatch = routeItem.filters.path === url.pathname;
|
|
38
|
+
const queryParams = routeItem.filters.queryParams;
|
|
39
|
+
const queryMatch = !queryParams || Object.entries(queryParams).every(([key, value]) => url.searchParams.get(key) === value);
|
|
40
|
+
return methodMatch && pathMatch && queryMatch;
|
|
41
|
+
}
|
|
42
|
+
let debug = false;
|
|
43
|
+
export async function registerBeforeStepRoutes(context, stepName, world) {
|
|
44
|
+
const page = context.web.page;
|
|
45
|
+
if (!page)
|
|
46
|
+
throw new Error("context.web.page is missing");
|
|
47
|
+
const stepTemplate = _stepNameToTemplate(stepName);
|
|
48
|
+
const routes = await loadRoutes(context);
|
|
49
|
+
const matchedRouteDefs = routes.filter((r) => r.template === stepTemplate);
|
|
50
|
+
const allRouteItems = matchedRouteDefs.flatMap((r) => r.routes);
|
|
51
|
+
if (!context.__routeState) {
|
|
52
|
+
context.__routeState = { matched: [] };
|
|
53
|
+
}
|
|
54
|
+
// Pre-register all mandatory routes
|
|
55
|
+
for (const item of allRouteItems) {
|
|
56
|
+
if (item.mandatory) {
|
|
57
|
+
const tracking = {
|
|
58
|
+
routeItem: item,
|
|
59
|
+
url: "",
|
|
60
|
+
completed: false,
|
|
61
|
+
startedAt: Date.now(),
|
|
62
|
+
actionResults: [],
|
|
63
|
+
};
|
|
64
|
+
// tracking.timer = setTimeout(() => {
|
|
65
|
+
// if (!tracking.completed) {
|
|
66
|
+
// console.error(`[MANDATORY] Request to ${item.filters.path} did not complete within ${item.timeout}ms`);
|
|
67
|
+
// }
|
|
68
|
+
// }, item.timeout);
|
|
69
|
+
context.__routeState.matched.push(tracking);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
let errorEncountered = null;
|
|
73
|
+
page.route("**/*", async (route) => {
|
|
74
|
+
const request = route.request();
|
|
75
|
+
// print the url if debug is enabled
|
|
76
|
+
if (debug) {
|
|
77
|
+
console.log(`Intercepting request: ${request.method()} ${request.url()}`);
|
|
78
|
+
}
|
|
79
|
+
const matchedItem = allRouteItems.find((item) => matchRoute(item, route));
|
|
80
|
+
if (debug) {
|
|
81
|
+
console.log("Matched route item:", matchedItem);
|
|
82
|
+
}
|
|
83
|
+
if (!matchedItem)
|
|
84
|
+
return route.continue();
|
|
85
|
+
if (debug) {
|
|
86
|
+
console.log(`Matched route item: ${JSON.stringify(matchedItem)}`);
|
|
87
|
+
}
|
|
88
|
+
// Find pre-registered tracker
|
|
89
|
+
let tracking = context.__routeState.matched.find((t) => t.routeItem === matchedItem && !t.completed);
|
|
90
|
+
// If not mandatory, register dynamically
|
|
91
|
+
if (!tracking) {
|
|
92
|
+
tracking = {
|
|
93
|
+
routeItem: matchedItem,
|
|
94
|
+
url: request.url(),
|
|
95
|
+
completed: false,
|
|
96
|
+
startedAt: Date.now(),
|
|
97
|
+
actionResults: [],
|
|
98
|
+
};
|
|
99
|
+
context.__routeState.matched.push(tracking);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
tracking.url = request.url();
|
|
103
|
+
}
|
|
104
|
+
let response;
|
|
105
|
+
try {
|
|
106
|
+
response = await route.fetch();
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
console.error("Fetch failed for", request.url(), e);
|
|
110
|
+
if (tracking?.timer)
|
|
111
|
+
clearTimeout(tracking.timer);
|
|
112
|
+
return route.abort();
|
|
113
|
+
}
|
|
114
|
+
let status = response.status();
|
|
115
|
+
let headers = response.headers();
|
|
116
|
+
const isBinary = !headers["content-type"]?.includes("application/json") && !headers["content-type"]?.includes("text");
|
|
117
|
+
let body;
|
|
118
|
+
if (isBinary) {
|
|
119
|
+
body = await response.body(); // returns a Buffer
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
body = await response.text();
|
|
123
|
+
}
|
|
124
|
+
let json;
|
|
125
|
+
try {
|
|
126
|
+
// check if the body is string
|
|
127
|
+
if (typeof body === "string") {
|
|
128
|
+
json = JSON.parse(body);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (_) { }
|
|
132
|
+
const actionResults = [];
|
|
133
|
+
let abortActionPerformed = false;
|
|
134
|
+
for (const action of matchedItem.actions) {
|
|
135
|
+
let actionStatus = "success";
|
|
136
|
+
const description = JSON.stringify(action.config);
|
|
137
|
+
switch (action.type) {
|
|
138
|
+
case "abort_request":
|
|
139
|
+
if (tracking?.timer)
|
|
140
|
+
clearTimeout(tracking.timer);
|
|
141
|
+
const errorCode = action.config?.errorCode ?? "failed";
|
|
142
|
+
console.log(`[abort_request] Aborting with error code: ${errorCode}`);
|
|
143
|
+
await route.abort(errorCode);
|
|
144
|
+
abortActionPerformed = true;
|
|
145
|
+
tracking.completed = true;
|
|
146
|
+
break;
|
|
147
|
+
case "status_code_verification":
|
|
148
|
+
if (String(status) !== String(action.config)) {
|
|
149
|
+
// console.error(`[status_code_verification] Expected ${action.config}, got ${status}`);
|
|
150
|
+
actionStatus = "fail";
|
|
151
|
+
tracking.actionResults = actionResults;
|
|
152
|
+
if (errorEncountered === null) {
|
|
153
|
+
errorEncountered = `Status code verification failed. Expected ${action.config}, got ${status}`;
|
|
154
|
+
}
|
|
155
|
+
// throw new Error("Status code verification failed");
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.log(`[status_code_verification] Passed`);
|
|
159
|
+
}
|
|
160
|
+
break;
|
|
161
|
+
case "json_modify":
|
|
162
|
+
if (!json) {
|
|
163
|
+
// console.error(`[json_modify] Response is not JSON`);
|
|
164
|
+
actionStatus = "fail";
|
|
165
|
+
tracking.actionResults = actionResults;
|
|
166
|
+
if (errorEncountered === null) {
|
|
167
|
+
errorEncountered = "JSON modification failed. Response is not JSON";
|
|
168
|
+
}
|
|
169
|
+
// throw new Error("JSON modification failed. Response is not JSON");
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
for (const mod of action.config) {
|
|
173
|
+
objectPath.set(json, mod.path, mod.value);
|
|
174
|
+
console.log(`[json_modify] Modified path ${mod.path} to ${mod.value}`);
|
|
175
|
+
}
|
|
176
|
+
console.log(`[json_modify] Modified JSON`);
|
|
177
|
+
}
|
|
178
|
+
break;
|
|
179
|
+
case "status_code_change":
|
|
180
|
+
status = action.config;
|
|
181
|
+
console.log(`[status_code_change] Status changed to ${status}`);
|
|
182
|
+
break;
|
|
183
|
+
case "change_text":
|
|
184
|
+
if (!headers["content-type"]?.includes("text/html")) {
|
|
185
|
+
// console.error(`[change_text] Content-Type is not text/html`);
|
|
186
|
+
actionStatus = "fail";
|
|
187
|
+
tracking.actionResults = actionResults;
|
|
188
|
+
if (errorEncountered === null) {
|
|
189
|
+
errorEncountered = "Change text action failed. Content-Type is not text/html";
|
|
190
|
+
}
|
|
191
|
+
// throw new Error("Change text action failed. Content-Type is not text/html");
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
body = action.config;
|
|
195
|
+
console.log(`[change_text] HTML body replaced`);
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case "assert_json":
|
|
199
|
+
if (!json) {
|
|
200
|
+
// console.error(`[assert_json] Response is not JSON`);
|
|
201
|
+
actionStatus = "fail";
|
|
202
|
+
tracking.actionResults = actionResults;
|
|
203
|
+
if (errorEncountered === null) {
|
|
204
|
+
errorEncountered = "JSON assertion failed. Response is not JSON";
|
|
205
|
+
}
|
|
206
|
+
// throw new Error("JSON assertion failed. Response is not JSON");
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
for (const check of action.config) {
|
|
210
|
+
const actual = getValue(json, check.path);
|
|
211
|
+
const expected = check.expected;
|
|
212
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
213
|
+
// console.error(`[assert_json] Path ${check.path}: expected ${expected}, got ${actual}`);
|
|
214
|
+
actionStatus = "fail";
|
|
215
|
+
tracking.actionResults = actionResults;
|
|
216
|
+
if (errorEncountered === null) {
|
|
217
|
+
errorEncountered = `JSON assertion failed for path ${check.path}: expected ${expected}, got ${actual}`;
|
|
218
|
+
}
|
|
219
|
+
// throw new Error(`JSON assertion failed for path ${check.path}: expected ${expected}, got ${actual}`);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
console.log(`[assert_json] Assertion passed for path ${check.path}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
case "assert_text":
|
|
228
|
+
if (typeof body !== "string") {
|
|
229
|
+
console.error(`[assert_text] Body is not text`);
|
|
230
|
+
actionStatus = "fail";
|
|
231
|
+
tracking.actionResults = actionResults;
|
|
232
|
+
if (errorEncountered === null) {
|
|
233
|
+
errorEncountered = "Text assertion failed. Body is not text";
|
|
234
|
+
}
|
|
235
|
+
// throw new Error("Text assertion failed. Body is not text");
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
if (action.config.contains && !body.includes(action.config.contains)) {
|
|
239
|
+
// console.error(`[assert_text] Expected to contain: "${action.config.contains}"`);
|
|
240
|
+
actionStatus = "fail";
|
|
241
|
+
tracking.actionResults = actionResults;
|
|
242
|
+
if (errorEncountered === null) {
|
|
243
|
+
errorEncountered = `Text assertion failed. Expected to contain: "${action.config.contains}", actual: "${body}"`;
|
|
244
|
+
}
|
|
245
|
+
// throw new Error( `Text assertion failed. Expected to contain: "${action.config.contains}", actual: "${body}"`);
|
|
246
|
+
}
|
|
247
|
+
else if (action.config.equals && body !== action.config.equals) {
|
|
248
|
+
// console.error(`[assert_text] Expected exact match`);
|
|
249
|
+
actionStatus = "fail";
|
|
250
|
+
tracking.actionResults = actionResults;
|
|
251
|
+
if (errorEncountered === null) {
|
|
252
|
+
errorEncountered = `Text assertion failed. Expected exact match: "${action.config.equals}", actual: "${body}"`;
|
|
253
|
+
}
|
|
254
|
+
// throw new Error(`Text assertion failed. Expected exact match: "${action.config.equals}", actual: "${body}"`);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
console.log(`[assert_text] Assertion passed`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
console.warn(`Unknown action type: ${action.type}`);
|
|
263
|
+
}
|
|
264
|
+
actionResults.push({ type: action.type, description, status: actionStatus });
|
|
265
|
+
}
|
|
266
|
+
tracking.completed = true;
|
|
267
|
+
tracking.actionResults = actionResults;
|
|
268
|
+
if (tracking.timer)
|
|
269
|
+
clearTimeout(tracking.timer);
|
|
270
|
+
const responseBody = isBinary ? body : json ? JSON.stringify(json) : body;
|
|
271
|
+
if (!abortActionPerformed) {
|
|
272
|
+
await route.fulfill({ status, body: responseBody, headers });
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
if (errorEncountered !== null) {
|
|
276
|
+
await registerAfterStepRoutes(context, world);
|
|
277
|
+
throw new Error(errorEncountered);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
export async function registerAfterStepRoutes(context, world) {
|
|
281
|
+
const state = context.__routeState;
|
|
282
|
+
if (!state)
|
|
283
|
+
return [];
|
|
284
|
+
const mandatoryRoutes = state.matched.filter((tracked) => tracked.routeItem.mandatory);
|
|
285
|
+
if (mandatoryRoutes.length === 0) {
|
|
286
|
+
context.__routeState = null;
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
const maxTimeout = Math.max(...mandatoryRoutes.map((r) => r.routeItem.timeout));
|
|
290
|
+
const startTime = Date.now();
|
|
291
|
+
let errorEncountered = false;
|
|
292
|
+
await new Promise((resolve) => {
|
|
293
|
+
const interval = setInterval(() => {
|
|
294
|
+
const now = Date.now();
|
|
295
|
+
const allCompleted = mandatoryRoutes.every((r) => r.completed);
|
|
296
|
+
const allTimedOut = mandatoryRoutes.every((r) => r.completed || now - startTime >= r.routeItem.timeout);
|
|
297
|
+
for (const r of mandatoryRoutes) {
|
|
298
|
+
const elapsed = now - startTime;
|
|
299
|
+
if (!r.completed && elapsed >= r.routeItem.timeout) {
|
|
300
|
+
console.error(`[MANDATORY] Request to ${r.routeItem.filters.path} did not complete within ${r.routeItem.timeout}ms (elapsed: ${elapsed})`);
|
|
301
|
+
// throw new Error(`Mandatory route ${r.routeItem.filters.path} timed out after ${r.routeItem.timeout}ms`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (allCompleted || allTimedOut) {
|
|
305
|
+
clearInterval(interval);
|
|
306
|
+
resolve();
|
|
307
|
+
}
|
|
308
|
+
}, 100);
|
|
309
|
+
});
|
|
310
|
+
context.results = mandatoryRoutes.map((tracked) => {
|
|
311
|
+
const { routeItem, url, completed, actionResults = [] } = tracked;
|
|
312
|
+
const actions = actionResults.map((ar) => {
|
|
313
|
+
let status = ar.status;
|
|
314
|
+
if (!completed)
|
|
315
|
+
status = "timeout";
|
|
316
|
+
return {
|
|
317
|
+
type: ar.type,
|
|
318
|
+
description: ar.description,
|
|
319
|
+
status,
|
|
320
|
+
};
|
|
321
|
+
});
|
|
322
|
+
let overallStatus;
|
|
323
|
+
if (!completed) {
|
|
324
|
+
overallStatus = "timeout";
|
|
325
|
+
}
|
|
326
|
+
else if (actions.some((a) => a.status === "fail")) {
|
|
327
|
+
overallStatus = "fail";
|
|
328
|
+
errorEncountered = true;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
overallStatus = "success";
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
url,
|
|
335
|
+
filters: routeItem.filters,
|
|
336
|
+
actions,
|
|
337
|
+
overallStatus,
|
|
338
|
+
};
|
|
339
|
+
});
|
|
340
|
+
try {
|
|
341
|
+
await context.web.page.unroute("**/*");
|
|
342
|
+
}
|
|
343
|
+
catch (e) {
|
|
344
|
+
console.error("Failed to unroute:", e);
|
|
345
|
+
}
|
|
346
|
+
context.__routeState = null;
|
|
347
|
+
if (context.results && context.results.length > 0) {
|
|
348
|
+
if (world && world.attach) {
|
|
349
|
+
await world.attach(JSON.stringify(context.results), "application/json+intercept-results");
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return context.results;
|
|
353
|
+
}
|
|
354
|
+
// Helper functions
|
|
355
|
+
const toCucumberExpression = (text) => text.replaceAll("/", "\\\\/").replaceAll("(", "\\\\(").replaceAll("{", "\\\\{");
|
|
356
|
+
function extractQuotedText(inputString) {
|
|
357
|
+
const regex = /("[^"]*")/g;
|
|
358
|
+
let matches = [];
|
|
359
|
+
let match;
|
|
360
|
+
const regexInside = /"\/(.*?)\/"/g;
|
|
361
|
+
while ((match = regexInside.exec(inputString)) !== null) {
|
|
362
|
+
matches.push(match[0]);
|
|
363
|
+
}
|
|
364
|
+
while ((match = regex.exec(inputString)) !== null) {
|
|
365
|
+
matches.push(match[1]);
|
|
366
|
+
}
|
|
367
|
+
return matches;
|
|
368
|
+
}
|
|
369
|
+
export function _stepNameToTemplate(stepName) {
|
|
370
|
+
if (stepName.includes("{string}")) {
|
|
371
|
+
return stepName;
|
|
372
|
+
}
|
|
373
|
+
let result = toCucumberExpression(stepName);
|
|
374
|
+
const texts = extractQuotedText(result);
|
|
375
|
+
texts.forEach((t) => {
|
|
376
|
+
result = result.replace(t, "{string}");
|
|
377
|
+
});
|
|
378
|
+
return result;
|
|
379
|
+
}
|
|
380
|
+
async function folderExists(path) {
|
|
381
|
+
try {
|
|
382
|
+
const stat = await fs.stat(path);
|
|
383
|
+
return stat.isDirectory();
|
|
384
|
+
}
|
|
385
|
+
catch (err) {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
const getValue = (data, pattern) => {
|
|
390
|
+
const path = pattern.split(".");
|
|
391
|
+
let lengthExists = false;
|
|
392
|
+
if (path[path.length - 1] === "length") {
|
|
393
|
+
path.pop();
|
|
394
|
+
lengthExists = true;
|
|
395
|
+
}
|
|
396
|
+
const value = objectPath.get(data, pattern);
|
|
397
|
+
if (lengthExists && Array.isArray(value)) {
|
|
398
|
+
return value?.length;
|
|
399
|
+
}
|
|
400
|
+
else if (hasValue(value)) {
|
|
401
|
+
return value;
|
|
402
|
+
}
|
|
403
|
+
return undefined;
|
|
404
|
+
};
|
|
405
|
+
const hasValue = (value) => {
|
|
406
|
+
return value !== undefined;
|
|
407
|
+
};
|
|
408
|
+
//# sourceMappingURL=route.js.map
|
package/lib/route.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAyC5B,KAAK,UAAU,UAAU,CAAC,OAAY;IACpC,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC,YAAY,CAAC;IAE/D,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,YAAY,CAAC;QAC9B,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3D,MAAM,SAAS,GAAY,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,SAAoB,EAAE,GAAY;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;IACrG,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC;IAE1D,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC;IAClD,MAAM,UAAU,GACd,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;IAE3G,OAAO,WAAW,IAAI,SAAS,IAAI,UAAU,CAAC;AAChD,CAAC;AACD,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAY,EAAE,QAAgB,EAAE,KAAU;IACvF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAgB,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7E,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,EAAE,EAAuB,CAAC;IAC9D,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAqB;gBACjC,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,EAAE;gBACP,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,aAAa,EAAE,EAAE;aAClB,CAAC;YACF,sCAAsC;YACtC,+BAA+B;YAC/B,8GAA8G;YAC9G,MAAM;YACN,oBAAoB;YAEpB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAE3C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAU,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,oCAAoC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,8BAA8B;QAC9B,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAC9C,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,CACrE,CAAC;QAEF,yCAAyC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG;gBACT,SAAS,EAAE,WAAW;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,aAAa,EAAE,EAAE;aAClB,CAAC;YACF,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,QAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,QAAQ,EAAE,KAAK;gBAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GACZ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEvG,IAAI,IAAI,CAAC;QACT,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,IAAS,CAAC;QACd,IAAI,CAAC;YACH,8BAA8B;YAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAEd,MAAM,aAAa,GAAsC,EAAE,CAAC;QAE5D,IAAI,oBAAoB,GAAG,KAAK,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,YAAY,GAAuB,SAAS,CAAC;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAElD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,eAAe;oBAClB,IAAI,QAAQ,EAAE,KAAK;wBAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,QAAQ,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;oBACvE,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC7B,oBAAoB,GAAG,IAAI,CAAC;oBAC5B,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;oBAC1B,MAAM;gBAER,KAAK,0BAA0B;oBAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7C,wFAAwF;wBACxF,YAAY,GAAG,MAAM,CAAC;wBACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;wBACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;4BAC9B,gBAAgB,GAAG,6CAA6C,MAAM,CAAC,MAAM,SAAS,MAAM,EAAE,CAAC;wBACjG,CAAC;wBACD,sDAAsD;oBACxD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM;gBAER,KAAK,aAAa;oBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,uDAAuD;wBACvD,YAAY,GAAG,MAAM,CAAC;wBACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;wBACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;4BAC9B,gBAAgB,GAAG,gDAAgD,CAAC;wBACtE,CAAC;wBACD,qEAAqE;oBACvE,CAAC;yBAAM,CAAC;wBACN,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;4BAChC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;4BAC1C,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;wBACzE,CAAC;wBACD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;oBAC7C,CAAC;oBACD,MAAM;gBAER,KAAK,oBAAoB;oBACvB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;oBAChE,MAAM;gBAER,KAAK,aAAa;oBAChB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBACpD,gEAAgE;wBAChE,YAAY,GAAG,MAAM,CAAC;wBACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;wBACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;4BAC9B,gBAAgB,GAAG,0DAA0D,CAAC;wBAChF,CAAC;wBACD,+EAA+E;oBACjF,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;wBACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;oBAClD,CAAC;oBACD,MAAM;gBACR,KAAK,aAAa;oBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,uDAAuD;wBACvD,YAAY,GAAG,MAAM,CAAC;wBACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;wBACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;4BAC9B,gBAAgB,GAAG,6CAA6C,CAAC;wBACnE,CAAC;wBACD,kEAAkE;oBACpE,CAAC;yBAAM,CAAC;wBACN,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;4BAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;4BAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACxD,0FAA0F;gCAC1F,YAAY,GAAG,MAAM,CAAC;gCACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;gCACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;oCAC9B,gBAAgB,GAAG,kCAAkC,KAAK,CAAC,IAAI,cAAc,QAAQ,SAAS,MAAM,EAAE,CAAC;gCACzG,CAAC;gCACD,wGAAwG;4BAC1G,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,GAAG,CAAC,2CAA2C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BACvE,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,KAAK,aAAa;oBAChB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBAChD,YAAY,GAAG,MAAM,CAAC;wBACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;wBACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;4BAC9B,gBAAgB,GAAG,yCAAyC,CAAC;wBAC/D,CAAC;wBACD,8DAA8D;oBAChE,CAAC;yBAAM,CAAC;wBACN,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACrE,mFAAmF;4BACnF,YAAY,GAAG,MAAM,CAAC;4BACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;4BACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;gCAC9B,gBAAgB,GAAG,gDAAgD,MAAM,CAAC,MAAM,CAAC,QAAQ,eAAe,IAAI,GAAG,CAAC;4BAClH,CAAC;4BACD,kHAAkH;wBACpH,CAAC;6BAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;4BACjE,uDAAuD;4BACvD,YAAY,GAAG,MAAM,CAAC;4BACtB,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;4BACvC,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;gCAC9B,gBAAgB,GAAG,iDAAiD,MAAM,CAAC,MAAM,CAAC,MAAM,eAAe,IAAI,GAAG,CAAC;4BACjH,CAAC;4BACD,gHAAgH;wBAClH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;wBAChD,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR;oBACE,OAAO,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;QAEvC,IAAI,QAAQ,CAAC,KAAK;YAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAY,EAAE,KAAU;IACpE,MAAM,KAAK,GAAsB,OAAO,CAAC,YAAY,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACvF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,gBAAgB,GAAY,KAAK,CAAC;IAEtC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/D,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,GAAG,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAExG,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACnD,OAAO,CAAC,KAAK,CACX,0BAA0B,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,4BAA4B,CAAC,CAAC,SAAS,CAAC,OAAO,gBAAgB,OAAO,GAAG,CAC5H,CAAC;oBACF,2GAA2G;gBAC7G,CAAC;YACH,CAAC;YAED,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;gBAChC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAElE,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACvC,IAAI,MAAM,GAAmC,EAAE,CAAC,MAAM,CAAC;YACvD,IAAI,CAAC,SAAS;gBAAE,MAAM,GAAG,SAAS,CAAC;YACnC,OAAO;gBACL,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,aAA6C,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;YACpD,aAAa,GAAG,MAAM,CAAC;YACvB,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,OAAO;YACL,GAAG;YACH,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,OAAO;YACP,aAAa;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC5B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,mBAAmB;AAEnB,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAElF,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,MAAM,KAAK,GAAG,YAAY,CAAC;IAC3B,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC;IAEV,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAClB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,IAAS,EAAE,OAAe,EAAO,EAAE;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,EAAE,MAAM,CAAC;IACvB,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AACF,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE;IAC9B,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC,CAAC"}
|