@zauto/api-connector 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +208 -0
- package/dist/dto/api-config.dto.d.ts +24 -0
- package/dist/dto/api-config.dto.js +94 -0
- package/dist/dto/api-config.dto.js.map +1 -0
- package/dist/dto/endpoint-config.dto.d.ts +7 -0
- package/dist/dto/endpoint-config.dto.js +39 -0
- package/dist/dto/endpoint-config.dto.js.map +1 -0
- package/dist/dto/field-mapping.dto.d.ts +7 -0
- package/dist/dto/field-mapping.dto.js +34 -0
- package/dist/dto/field-mapping.dto.js.map +1 -0
- package/dist/enums/resources.enum.d.ts +8 -0
- package/dist/enums/resources.enum.js +13 -0
- package/dist/enums/resources.enum.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +611 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +86 -0
- package/src/dto/api-config.dto.ts +115 -0
- package/src/dto/endpoint-config.dto.ts +23 -0
- package/src/dto/field-mapping.dto.ts +19 -0
- package/src/enums/resources.enum.ts +9 -0
- package/src/index.ts +850 -0
package/dist/index.js
ADDED
@@ -0,0 +1,611 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.AuthType = exports.ApiConfigDto = void 0;
|
4
|
+
exports.saveApiConfig = saveApiConfig;
|
5
|
+
exports.updateApiConfig = updateApiConfig;
|
6
|
+
exports.saveEndpointConfig = saveEndpointConfig;
|
7
|
+
exports.updateEndpointConfig = updateEndpointConfig;
|
8
|
+
exports.saveFieldMapping = saveFieldMapping;
|
9
|
+
exports.updateFieldMapping = updateFieldMapping;
|
10
|
+
exports.callApiWithMapping = callApiWithMapping;
|
11
|
+
exports.executeDynamicFunction = executeDynamicFunction;
|
12
|
+
const api_config_dto_1 = require("./dto/api-config.dto");
|
13
|
+
const axios_1 = require("axios");
|
14
|
+
async function saveApiConfig(prisma, apiConfig, additionalParams = {}, searchCriteria = {}) {
|
15
|
+
try {
|
16
|
+
const existingConfig = await prisma.apiConfig.findFirst({
|
17
|
+
where: searchCriteria,
|
18
|
+
});
|
19
|
+
if (existingConfig) {
|
20
|
+
const updatedConfig = await prisma.apiConfig.update({
|
21
|
+
where: { id: existingConfig.id },
|
22
|
+
data: {
|
23
|
+
baseUrl: apiConfig.baseUrl,
|
24
|
+
authType: apiConfig.authType,
|
25
|
+
infoForAuthType: apiConfig.infoForAuthType
|
26
|
+
? JSON.stringify(apiConfig.infoForAuthType)
|
27
|
+
: '{}',
|
28
|
+
timeout: apiConfig.timeout || null,
|
29
|
+
retryPolicy: apiConfig.retryPolicy
|
30
|
+
? JSON.stringify(apiConfig.retryPolicy)
|
31
|
+
: '{}',
|
32
|
+
...additionalParams,
|
33
|
+
},
|
34
|
+
});
|
35
|
+
return {
|
36
|
+
operation: 'updated',
|
37
|
+
config: updatedConfig,
|
38
|
+
};
|
39
|
+
}
|
40
|
+
else {
|
41
|
+
const createdConfig = await prisma.apiConfig.create({
|
42
|
+
data: {
|
43
|
+
baseUrl: apiConfig.baseUrl,
|
44
|
+
authType: apiConfig.authType,
|
45
|
+
infoForAuthType: typeof apiConfig.infoForAuthType === 'string'
|
46
|
+
? apiConfig.infoForAuthType
|
47
|
+
: JSON.stringify(apiConfig.infoForAuthType || '{}'),
|
48
|
+
timeout: apiConfig.timeout || null,
|
49
|
+
retryPolicy: apiConfig.retryPolicy
|
50
|
+
? JSON.stringify(apiConfig.retryPolicy)
|
51
|
+
: '{}',
|
52
|
+
...additionalParams,
|
53
|
+
},
|
54
|
+
});
|
55
|
+
return {
|
56
|
+
operation: 'created',
|
57
|
+
config: createdConfig,
|
58
|
+
};
|
59
|
+
}
|
60
|
+
}
|
61
|
+
catch (error) {
|
62
|
+
console.error('Error saving or updating API configuration:', error);
|
63
|
+
throw new Error('Failed to save or update API configuration');
|
64
|
+
}
|
65
|
+
}
|
66
|
+
async function updateApiConfig(prisma, updateData, searchCriteria) {
|
67
|
+
try {
|
68
|
+
const existingConfig = await prisma.apiConfig.findFirst({
|
69
|
+
where: searchCriteria,
|
70
|
+
});
|
71
|
+
if (!existingConfig) {
|
72
|
+
throw new Error('API configuration not found for the given criteria.');
|
73
|
+
}
|
74
|
+
const updatedConfig = await prisma.apiConfig.update({
|
75
|
+
where: { id: existingConfig.id },
|
76
|
+
data: {
|
77
|
+
...updateData,
|
78
|
+
infoForAuthType: typeof updateData.infoForAuthType === 'string' ? updateData.infoForAuthType : updateData.infoForAuthType
|
79
|
+
? JSON.stringify(updateData.infoForAuthType)
|
80
|
+
: undefined,
|
81
|
+
retryPolicy: updateData.retryPolicy
|
82
|
+
? JSON.stringify(updateData.retryPolicy)
|
83
|
+
: undefined,
|
84
|
+
},
|
85
|
+
});
|
86
|
+
return updatedConfig;
|
87
|
+
}
|
88
|
+
catch (error) {
|
89
|
+
console.error('Error updating API configuration:', error);
|
90
|
+
throw new Error('Failed to update API configuration');
|
91
|
+
}
|
92
|
+
}
|
93
|
+
async function saveEndpointConfig(prisma, endpointConfig) {
|
94
|
+
try {
|
95
|
+
const apiConfig = await prisma.apiConfig.findFirst({
|
96
|
+
where: { id: endpointConfig.apiConfigId },
|
97
|
+
});
|
98
|
+
if (!apiConfig) {
|
99
|
+
throw new Error(`API Configuration with ID ${endpointConfig.apiConfigId} not found.`);
|
100
|
+
}
|
101
|
+
const existingConfig = await prisma.endpointConfig.findFirst({
|
102
|
+
where: { name: endpointConfig.name, apiConfigId: apiConfig.id },
|
103
|
+
});
|
104
|
+
if (existingConfig) {
|
105
|
+
return {
|
106
|
+
message: "An endpoint with the same name already exists for this API configuration",
|
107
|
+
config: existingConfig
|
108
|
+
};
|
109
|
+
}
|
110
|
+
else {
|
111
|
+
const createdConfig = await prisma.endpointConfig.create({
|
112
|
+
data: {
|
113
|
+
name: endpointConfig.name,
|
114
|
+
method: endpointConfig.method,
|
115
|
+
suburl: endpointConfig.suburl,
|
116
|
+
headers: endpointConfig.headers || {},
|
117
|
+
apiConfigId: endpointConfig.apiConfigId,
|
118
|
+
},
|
119
|
+
});
|
120
|
+
return {
|
121
|
+
operation: 'created',
|
122
|
+
config: createdConfig,
|
123
|
+
};
|
124
|
+
}
|
125
|
+
}
|
126
|
+
catch (error) {
|
127
|
+
console.error('Error saving endpoint configuration:', error);
|
128
|
+
throw new Error('Failed to save endpoint configuration');
|
129
|
+
}
|
130
|
+
}
|
131
|
+
async function updateEndpointConfig(prisma, endpointId, updateData) {
|
132
|
+
try {
|
133
|
+
const existingEndpoint = await prisma.endpointConfig.findUnique({
|
134
|
+
where: { id: endpointId },
|
135
|
+
});
|
136
|
+
if (!existingEndpoint) {
|
137
|
+
throw new Error('Endpoint configuration not found for the given ID.');
|
138
|
+
}
|
139
|
+
if (updateData.name && updateData.name !== existingEndpoint.name) {
|
140
|
+
const conflict = await prisma.endpointConfig.findFirst({
|
141
|
+
where: {
|
142
|
+
name: updateData.name,
|
143
|
+
apiConfigId: existingEndpoint.apiConfigId,
|
144
|
+
},
|
145
|
+
});
|
146
|
+
if (conflict) {
|
147
|
+
throw new Error(`Endpoint with the name "${updateData.name}" already exists for this API configuration.`);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
const updatedEndpoint = await prisma.endpointConfig.update({
|
151
|
+
where: { id: endpointId },
|
152
|
+
data: {
|
153
|
+
name: updateData.name ?? existingEndpoint.name,
|
154
|
+
method: updateData.method ?? existingEndpoint.method,
|
155
|
+
suburl: updateData.suburl ?? existingEndpoint.suburl,
|
156
|
+
headers: updateData.headers ?? existingEndpoint.headers,
|
157
|
+
},
|
158
|
+
});
|
159
|
+
return {
|
160
|
+
operation: 'updated',
|
161
|
+
config: updatedEndpoint,
|
162
|
+
};
|
163
|
+
}
|
164
|
+
catch (error) {
|
165
|
+
console.error('Error updating endpoint configuration:', error);
|
166
|
+
throw new Error('Failed to update endpoint configuration');
|
167
|
+
}
|
168
|
+
}
|
169
|
+
async function saveFieldMapping(prisma, fieldMapping) {
|
170
|
+
try {
|
171
|
+
const endpoint = await prisma.endpointConfig.findFirst({
|
172
|
+
where: { id: fieldMapping.endpointId },
|
173
|
+
});
|
174
|
+
if (!endpoint) {
|
175
|
+
throw new Error(`Endpoint with ID ${fieldMapping.endpointId} not found.`);
|
176
|
+
}
|
177
|
+
const existingMapping = await prisma.fieldMapping.findFirst({
|
178
|
+
where: {
|
179
|
+
resourceType: fieldMapping.resourceType,
|
180
|
+
endpointId: fieldMapping.endpointId,
|
181
|
+
},
|
182
|
+
});
|
183
|
+
if (existingMapping) {
|
184
|
+
return {
|
185
|
+
message: "Field mapping already exists for this resource and endpoint"
|
186
|
+
};
|
187
|
+
}
|
188
|
+
else {
|
189
|
+
const createdMapping = await prisma.fieldMapping.create({
|
190
|
+
data: {
|
191
|
+
resourceType: fieldMapping.resourceType,
|
192
|
+
requestMapping: fieldMapping.requestMapping,
|
193
|
+
responseMapping: fieldMapping.responseMapping,
|
194
|
+
endpointId: fieldMapping.endpointId,
|
195
|
+
},
|
196
|
+
});
|
197
|
+
return {
|
198
|
+
operation: 'created',
|
199
|
+
mapping: createdMapping,
|
200
|
+
};
|
201
|
+
}
|
202
|
+
}
|
203
|
+
catch (error) {
|
204
|
+
console.error('Error saving field mapping:', error);
|
205
|
+
throw new Error('Failed to save field mapping');
|
206
|
+
}
|
207
|
+
}
|
208
|
+
async function updateFieldMapping(prisma, fieldMappingId, updateData) {
|
209
|
+
try {
|
210
|
+
const existingMapping = await prisma.fieldMapping.findUnique({
|
211
|
+
where: { id: fieldMappingId },
|
212
|
+
});
|
213
|
+
if (!existingMapping) {
|
214
|
+
throw new Error(`Field mapping not found for the given ID: ${fieldMappingId}`);
|
215
|
+
}
|
216
|
+
if (updateData.endpointId && updateData.endpointId !== existingMapping.endpointId) {
|
217
|
+
const endpoint = await prisma.endpointConfig.findUnique({
|
218
|
+
where: { id: updateData.endpointId },
|
219
|
+
});
|
220
|
+
if (!endpoint) {
|
221
|
+
throw new Error(`Endpoint with ID ${updateData.endpointId} not found.`);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
if (updateData.resourceType &&
|
225
|
+
updateData.resourceType !== existingMapping.resourceType &&
|
226
|
+
(updateData.endpointId ?? existingMapping.endpointId)) {
|
227
|
+
const conflict = await prisma.fieldMapping.findFirst({
|
228
|
+
where: {
|
229
|
+
resourceType: updateData.resourceType,
|
230
|
+
endpointId: updateData.endpointId ?? existingMapping.endpointId,
|
231
|
+
},
|
232
|
+
});
|
233
|
+
if (conflict) {
|
234
|
+
throw new Error(`Field mapping already exists for resource "${updateData.resourceType}" on endpoint ID ${updateData.endpointId ?? existingMapping.endpointId}.`);
|
235
|
+
}
|
236
|
+
}
|
237
|
+
const updatedMapping = await prisma.fieldMapping.update({
|
238
|
+
where: { id: fieldMappingId },
|
239
|
+
data: {
|
240
|
+
resourceType: updateData.resourceType ?? existingMapping.resourceType,
|
241
|
+
requestMapping: updateData.requestMapping ?? existingMapping.requestMapping,
|
242
|
+
responseMapping: updateData.responseMapping ?? existingMapping.responseMapping,
|
243
|
+
endpointId: updateData.endpointId ?? existingMapping.endpointId,
|
244
|
+
},
|
245
|
+
});
|
246
|
+
return {
|
247
|
+
operation: 'updated',
|
248
|
+
mapping: updatedMapping,
|
249
|
+
};
|
250
|
+
}
|
251
|
+
catch (error) {
|
252
|
+
console.error('Error updating field mapping:', error);
|
253
|
+
throw new Error('Failed to update field mapping');
|
254
|
+
}
|
255
|
+
}
|
256
|
+
async function callApiWithMapping(prisma, endpointId, data, queryParams, pathParams, subUrl) {
|
257
|
+
try {
|
258
|
+
const endpoint = await prisma.endpointConfig.findFirst({
|
259
|
+
where: { id: endpointId },
|
260
|
+
include: { apiConfig: true },
|
261
|
+
});
|
262
|
+
if (!endpoint) {
|
263
|
+
throw new Error(`Endpoint with ID ${endpointId} not found.`);
|
264
|
+
}
|
265
|
+
const { apiConfig } = endpoint;
|
266
|
+
if (!apiConfig) {
|
267
|
+
throw new Error(`Top-level API configuration not found for endpoint ID ${endpointId}.`);
|
268
|
+
}
|
269
|
+
const fieldMapping = await prisma.fieldMapping.findFirst({
|
270
|
+
where: { endpointId },
|
271
|
+
});
|
272
|
+
const mappedRequestData = fieldMapping?.requestMapping
|
273
|
+
? Object.entries(fieldMapping.requestMapping).reduce((acc, [localField, apiField]) => {
|
274
|
+
if (data[localField] !== undefined) {
|
275
|
+
acc[apiField] = data[localField];
|
276
|
+
}
|
277
|
+
return acc;
|
278
|
+
}, {})
|
279
|
+
: data;
|
280
|
+
const mappedQueryParams = fieldMapping?.requestMapping
|
281
|
+
? Object.entries(fieldMapping.requestMapping).reduce((acc, [localField, apiField]) => {
|
282
|
+
if (queryParams[localField] !== undefined) {
|
283
|
+
acc[apiField] = queryParams[localField];
|
284
|
+
}
|
285
|
+
return acc;
|
286
|
+
}, {})
|
287
|
+
: queryParams;
|
288
|
+
const authHeaders = getAuthHeaders(apiConfig);
|
289
|
+
let url = apiConfig.baseUrl;
|
290
|
+
if (subUrl) {
|
291
|
+
url = url + subUrl;
|
292
|
+
}
|
293
|
+
else {
|
294
|
+
url = url + endpoint.suburl;
|
295
|
+
}
|
296
|
+
let config = {
|
297
|
+
method: endpoint.method,
|
298
|
+
url,
|
299
|
+
headers: {
|
300
|
+
...endpoint.headers,
|
301
|
+
...authHeaders,
|
302
|
+
},
|
303
|
+
params: mappedQueryParams,
|
304
|
+
data: mappedRequestData,
|
305
|
+
};
|
306
|
+
if (pathParams) {
|
307
|
+
config.url = config.url + "/" + pathParams;
|
308
|
+
}
|
309
|
+
if (apiConfig.timeout) {
|
310
|
+
config.timeout = apiConfig.timeout;
|
311
|
+
}
|
312
|
+
const maxRetries = apiConfig.retryPolicy?.maxRetries || 0;
|
313
|
+
const retryDelayMs = apiConfig.retryPolicy?.retryDelayMs || 1000;
|
314
|
+
let attempt = 0;
|
315
|
+
console.log(config);
|
316
|
+
while (attempt <= maxRetries) {
|
317
|
+
try {
|
318
|
+
const response = await (0, axios_1.default)(config);
|
319
|
+
const mappedResponseData = fieldMapping?.responseMapping
|
320
|
+
? applyResponseMapping(response.data, fieldMapping.responseMapping)
|
321
|
+
: response.data;
|
322
|
+
return mappedResponseData;
|
323
|
+
}
|
324
|
+
catch (error) {
|
325
|
+
attempt++;
|
326
|
+
const retryOnStatusCodes = apiConfig.retryPolicy?.retryOnStatusCodes || [];
|
327
|
+
const shouldRetry = retryOnStatusCodes.length === 0 ||
|
328
|
+
retryOnStatusCodes.includes(String(error.response?.status)) ||
|
329
|
+
!error.response;
|
330
|
+
if (attempt <= maxRetries && shouldRetry) {
|
331
|
+
console.warn(`Retrying request... Attempt ${attempt} of ${maxRetries}. Waiting ${retryDelayMs}ms.`);
|
332
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
333
|
+
}
|
334
|
+
else {
|
335
|
+
console.error('Error calling API:', error);
|
336
|
+
throw new Error('Failed to call API with mapping');
|
337
|
+
}
|
338
|
+
}
|
339
|
+
}
|
340
|
+
}
|
341
|
+
catch (error) {
|
342
|
+
console.error('Error calling API:', error);
|
343
|
+
throw new Error('Failed to call API with mapping');
|
344
|
+
}
|
345
|
+
}
|
346
|
+
async function executeDynamicFunction(prisma, orgId, functionName, input) {
|
347
|
+
try {
|
348
|
+
const functionConfig = await prisma.functionConfig.findFirst({
|
349
|
+
where: { name: functionName, orgId },
|
350
|
+
});
|
351
|
+
if (!functionConfig) {
|
352
|
+
throw new Error(`Function with name "${functionName}" not found.`);
|
353
|
+
}
|
354
|
+
const { logic } = functionConfig;
|
355
|
+
let currentData = input;
|
356
|
+
for (const step of Object.values(logic)) {
|
357
|
+
const { apiId, requestMapping, responseMapping, queryParamsMapping, pathParamsMapping } = step;
|
358
|
+
console.log(`currentData: ${JSON.stringify(currentData)}`);
|
359
|
+
console.log(`Request Mapping: ${JSON.stringify(requestMapping)}`);
|
360
|
+
console.log(`Response Mapping: ${JSON.stringify(responseMapping)}`);
|
361
|
+
console.log(`Query Params Mapping: ${JSON.stringify(queryParamsMapping)}`);
|
362
|
+
console.log(`Path Params Mapping: ${JSON.stringify(pathParamsMapping)}`);
|
363
|
+
const requestData = mapData(currentData, requestMapping);
|
364
|
+
console.log(`Request Data: ${JSON.stringify(requestData)}`);
|
365
|
+
const endpoint = await prisma.endpointConfig.findUnique({
|
366
|
+
where: { id: apiId },
|
367
|
+
});
|
368
|
+
if (!endpoint) {
|
369
|
+
throw new Error(`Endpoint with ID ${apiId} not found.`);
|
370
|
+
}
|
371
|
+
const suburl = substitutePathParams(endpoint.suburl, currentData, pathParamsMapping);
|
372
|
+
console.log(`Substituted URL: ${suburl}`);
|
373
|
+
const mappedQueryParams = mapData(currentData, queryParamsMapping, true);
|
374
|
+
console.log(`Mapped Query Params: ${JSON.stringify(mappedQueryParams)}`);
|
375
|
+
const apiResponse = await callApiWithMapping(prisma, apiId, requestData, mappedQueryParams, null, suburl);
|
376
|
+
console.log(`API Response: ${JSON.stringify(apiResponse)}`);
|
377
|
+
const newData = mapData(apiResponse, responseMapping);
|
378
|
+
currentData = { ...currentData, ...newData };
|
379
|
+
}
|
380
|
+
return currentData;
|
381
|
+
}
|
382
|
+
catch (error) {
|
383
|
+
console.error('Error executing dynamic function:', error);
|
384
|
+
throw new Error(`Failed to execute function "${functionName}".`);
|
385
|
+
}
|
386
|
+
}
|
387
|
+
function substitutePathParams(url, data, pathParamsMapping) {
|
388
|
+
if (!pathParamsMapping)
|
389
|
+
return url;
|
390
|
+
return Object.entries(pathParamsMapping).reduce((updatedUrl, [placeholder, field]) => {
|
391
|
+
const value = data[field];
|
392
|
+
if (!value) {
|
393
|
+
throw new Error(`Missing value for path parameter "${placeholder}"`);
|
394
|
+
}
|
395
|
+
return updatedUrl.replace(`:${placeholder}`, value);
|
396
|
+
}, url);
|
397
|
+
}
|
398
|
+
function mapData(data, mapping, isQueryParams = false) {
|
399
|
+
if (!mapping || typeof data !== 'object' || data === null) {
|
400
|
+
if (isQueryParams) {
|
401
|
+
return {};
|
402
|
+
}
|
403
|
+
return data;
|
404
|
+
}
|
405
|
+
if (Array.isArray(data)) {
|
406
|
+
return data.map((item) => mapObject(item, mapping));
|
407
|
+
}
|
408
|
+
return mapObject(data, mapping);
|
409
|
+
}
|
410
|
+
function evaluateExpression(template, data) {
|
411
|
+
const expressionRegex = /\{([^}]+)\}((?:\.[a-zA-Z]+\([^)]*\))*)/;
|
412
|
+
const match = template.match(expressionRegex);
|
413
|
+
if (!match) {
|
414
|
+
return template.replace(/\{([^}]+)\}/g, (_, path) => {
|
415
|
+
return getNestedValue(data, path) ?? '';
|
416
|
+
});
|
417
|
+
}
|
418
|
+
const fieldPath = match[1];
|
419
|
+
const functionChain = match[2];
|
420
|
+
let value = getNestedValue(data, fieldPath);
|
421
|
+
if (!functionChain)
|
422
|
+
return value;
|
423
|
+
const functionCallRegex = /\.([a-zA-Z]+)\(([^)]*)\)/g;
|
424
|
+
let fnMatch;
|
425
|
+
while ((fnMatch = functionCallRegex.exec(functionChain)) !== null) {
|
426
|
+
const fnName = fnMatch[1];
|
427
|
+
const fnArgs = fnMatch[2];
|
428
|
+
const args = parseFunctionArgs(fnArgs);
|
429
|
+
switch (fnName.toLowerCase()) {
|
430
|
+
case 'tolowercase':
|
431
|
+
if (typeof value === 'string') {
|
432
|
+
value = value.toLowerCase();
|
433
|
+
}
|
434
|
+
break;
|
435
|
+
case 'touppercase':
|
436
|
+
if (typeof value === 'string') {
|
437
|
+
value = value.toUpperCase();
|
438
|
+
}
|
439
|
+
break;
|
440
|
+
case 'split':
|
441
|
+
if (typeof value === 'string') {
|
442
|
+
const delimiter = args[0] ?? '';
|
443
|
+
value = value.split(delimiter);
|
444
|
+
}
|
445
|
+
break;
|
446
|
+
case 'slice':
|
447
|
+
if (typeof value === 'string' || Array.isArray(value)) {
|
448
|
+
const start = args[0] !== undefined ? args[0] : 0;
|
449
|
+
const end = args[1] !== undefined ? args[1] : undefined;
|
450
|
+
value = value.slice(start, end);
|
451
|
+
}
|
452
|
+
break;
|
453
|
+
case 'join':
|
454
|
+
if (Array.isArray(value)) {
|
455
|
+
const delimiter = args[0] || '';
|
456
|
+
value = value.join(delimiter);
|
457
|
+
}
|
458
|
+
break;
|
459
|
+
default:
|
460
|
+
console.warn(`Unrecognized function: ${fnName}`);
|
461
|
+
break;
|
462
|
+
}
|
463
|
+
}
|
464
|
+
return value;
|
465
|
+
}
|
466
|
+
function parseFunctionArgs(argString) {
|
467
|
+
if (!argString.trim())
|
468
|
+
return [];
|
469
|
+
return argString.split(',').map((arg) => {
|
470
|
+
arg = arg.trim();
|
471
|
+
if ((arg.startsWith("'") && arg.endsWith("'")) ||
|
472
|
+
(arg.startsWith('"') && arg.endsWith('"'))) {
|
473
|
+
return arg.slice(1, -1);
|
474
|
+
}
|
475
|
+
const num = Number(arg);
|
476
|
+
if (!isNaN(num)) {
|
477
|
+
return num;
|
478
|
+
}
|
479
|
+
return arg;
|
480
|
+
});
|
481
|
+
}
|
482
|
+
function replaceValue(template, data) {
|
483
|
+
if (!template.includes('{')) {
|
484
|
+
return template;
|
485
|
+
}
|
486
|
+
return template.replace(/\{([^}]+)\}/g, (match, field) => {
|
487
|
+
const value = data[field];
|
488
|
+
return value !== undefined ? value : '';
|
489
|
+
});
|
490
|
+
}
|
491
|
+
function mapObject(obj, mapping) {
|
492
|
+
const result = {};
|
493
|
+
if (mapping.resourceType) {
|
494
|
+
result.resourceType = mapping.resourceType;
|
495
|
+
}
|
496
|
+
for (const [mappingKey, mappingValue] of Object.entries(mapping)) {
|
497
|
+
if (mappingKey === 'resourceType')
|
498
|
+
continue;
|
499
|
+
if (typeof mappingValue === 'string') {
|
500
|
+
if (mappingValue.includes('[?]')) {
|
501
|
+
handleArrayShortcut(result, obj, mappingValue, mappingKey);
|
502
|
+
}
|
503
|
+
else {
|
504
|
+
result[mappingKey] = replaceValue(mappingValue, obj);
|
505
|
+
}
|
506
|
+
}
|
507
|
+
else if (Array.isArray(mappingValue)) {
|
508
|
+
result[mappingKey] = mappingValue.map((element) => {
|
509
|
+
if (typeof element === 'string') {
|
510
|
+
return replaceValue(element, obj);
|
511
|
+
}
|
512
|
+
else if (Array.isArray(element)) {
|
513
|
+
return element.map((sub) => typeof sub === 'string' ? replaceValue(sub, obj) : sub);
|
514
|
+
}
|
515
|
+
else if (typeof element === 'object' && element !== null) {
|
516
|
+
return mapObject(obj, element);
|
517
|
+
}
|
518
|
+
else {
|
519
|
+
return element;
|
520
|
+
}
|
521
|
+
});
|
522
|
+
}
|
523
|
+
else if (typeof mappingValue === 'object' && mappingValue !== null) {
|
524
|
+
const nestedResult = {};
|
525
|
+
for (const [nestedKey, nestedValue] of Object.entries(mappingValue)) {
|
526
|
+
if (typeof nestedValue === 'string') {
|
527
|
+
nestedResult[nestedKey] = replaceValue(nestedValue, obj);
|
528
|
+
}
|
529
|
+
else {
|
530
|
+
nestedResult[nestedKey] = mapObject(obj, nestedValue);
|
531
|
+
}
|
532
|
+
}
|
533
|
+
result[mappingKey] = nestedResult;
|
534
|
+
}
|
535
|
+
else {
|
536
|
+
result[mappingKey] = obj[mappingKey];
|
537
|
+
}
|
538
|
+
}
|
539
|
+
return result;
|
540
|
+
}
|
541
|
+
function handleArrayShortcut(resultObj, sourceObj, mappingValue, mappingKey) {
|
542
|
+
const [arrayField, entryTemplate] = mappingValue.split('[?].');
|
543
|
+
if (!resultObj[arrayField]) {
|
544
|
+
resultObj[arrayField] = [];
|
545
|
+
}
|
546
|
+
const templateParts = entryTemplate.split(',');
|
547
|
+
const entry = {};
|
548
|
+
templateParts.forEach(part => {
|
549
|
+
const [field, valueTemplate] = part.split('=');
|
550
|
+
const fieldValue = replaceValue(valueTemplate, sourceObj);
|
551
|
+
entry[field] = fieldValue;
|
552
|
+
});
|
553
|
+
const existingIndex = resultObj[arrayField].findIndex((e) => e.system === entry.system);
|
554
|
+
if (existingIndex === -1) {
|
555
|
+
resultObj[arrayField].push(entry);
|
556
|
+
}
|
557
|
+
}
|
558
|
+
function getNestedValue(obj, path) {
|
559
|
+
return path.split('.').reduce((current, part) => {
|
560
|
+
return current?.[part];
|
561
|
+
}, obj);
|
562
|
+
}
|
563
|
+
function getAuthHeaders(apiConfig) {
|
564
|
+
switch (apiConfig.authType) {
|
565
|
+
case api_config_dto_1.AuthType.BASIC:
|
566
|
+
if (!apiConfig.infoForAuthType?.username || !apiConfig.infoForAuthType?.password) {
|
567
|
+
throw new Error('Missing credentials for BASIC auth.');
|
568
|
+
}
|
569
|
+
const credentials = Buffer.from(`${apiConfig.infoForAuthType.username}:${apiConfig.infoForAuthType.password}`).toString('base64');
|
570
|
+
return { Authorization: `Basic ${credentials}` };
|
571
|
+
case api_config_dto_1.AuthType.BEARER:
|
572
|
+
if (!apiConfig.infoForAuthType?.token) {
|
573
|
+
throw new Error('Missing token for BEARER auth.');
|
574
|
+
}
|
575
|
+
return { Authorization: `Bearer ${apiConfig.infoForAuthType.token}` };
|
576
|
+
case api_config_dto_1.AuthType.API_KEY:
|
577
|
+
if (!apiConfig.infoForAuthType?.apiKeyHeader || !apiConfig.infoForAuthType?.apiKey) {
|
578
|
+
throw new Error('Missing API key information.');
|
579
|
+
}
|
580
|
+
return { [apiConfig.infoForAuthType.apiKeyHeader]: apiConfig.infoForAuthType.apiKey };
|
581
|
+
case api_config_dto_1.AuthType.NONE:
|
582
|
+
default:
|
583
|
+
return {};
|
584
|
+
}
|
585
|
+
}
|
586
|
+
function applyResponseMapping(response, responseMapping) {
|
587
|
+
if (Array.isArray(response)) {
|
588
|
+
return response.map((item) => applyResponseMapping(item, responseMapping));
|
589
|
+
}
|
590
|
+
else if (typeof response === 'object' && response !== null) {
|
591
|
+
return Object.entries(responseMapping).reduce((mappedObject, [apiField, localField]) => {
|
592
|
+
if (response[apiField] !== undefined) {
|
593
|
+
if (typeof localField === 'string') {
|
594
|
+
mappedObject[localField] = response[apiField];
|
595
|
+
}
|
596
|
+
else if (typeof localField === 'object') {
|
597
|
+
mappedObject[localField] = applyResponseMapping(response[apiField], localField);
|
598
|
+
}
|
599
|
+
}
|
600
|
+
return mappedObject;
|
601
|
+
}, {});
|
602
|
+
}
|
603
|
+
else {
|
604
|
+
return response;
|
605
|
+
}
|
606
|
+
}
|
607
|
+
var api_config_dto_2 = require("./dto/api-config.dto");
|
608
|
+
Object.defineProperty(exports, "ApiConfigDto", { enumerable: true, get: function () { return api_config_dto_2.ApiConfigDto; } });
|
609
|
+
var api_config_dto_3 = require("./dto/api-config.dto");
|
610
|
+
Object.defineProperty(exports, "AuthType", { enumerable: true, get: function () { return api_config_dto_3.AuthType; } });
|
611
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAeA,sCA4DC;AAUD,0CAiCC;AASD,gDA4CC;AAUD,oDA+CC;AASD,4CA6CC;AAUD,gDA6DC;AAUD,gDAuHC;AASD,wDAuDC;AAjiBD,yDAA8D;AAG9D,iCAAkD;AAW3C,KAAK,UAAU,aAAa,CACjC,MAAoB,EACpB,SAAuB,EACvB,mBAAwC,EAAE,EAC1C,iBAAsC,EAAE;IAExC,IAAI,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;YACtD,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YAEnB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBAClD,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;gBAChC,IAAI,EAAE;oBACJ,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,eAAe,EAAE,SAAS,CAAC,eAAe;wBACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC;wBAC3C,CAAC,CAAC,IAAI;oBACR,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI;oBAClC,WAAW,EAAE,SAAS,CAAC,WAAW;wBAChC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;wBACvC,CAAC,CAAC,IAAI;oBACR,GAAG,gBAAgB;iBACpB;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBAClD,IAAI,EAAE;oBACJ,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,eAAe,EAAE,OAAO,SAAS,CAAC,eAAe,KAAK,QAAQ;wBAC5D,CAAC,CAAC,SAAS,CAAC,eAAe;wBAC3B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC;oBACrD,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI;oBAClC,WAAW,EAAE,SAAS,CAAC,WAAW;wBAChC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC;wBACvC,CAAC,CAAC,IAAI;oBACR,GAAG,gBAAgB;iBACpB;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,UAAuD,EACvD,cAAmC;IAEnC,IAAI,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;YACtD,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;YAChC,IAAI,EAAE;gBACJ,GAAG,UAAU;gBACb,eAAe,EAAE,OAAO,UAAU,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe;oBACvH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC;oBAC5C,CAAC,CAAC,SAAS;gBACb,WAAW,EAAE,UAAU,CAAC,WAAW;oBACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;oBACxC,CAAC,CAAC,SAAS;aACd;SACF,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AASM,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,cAAiC;IAEjC,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;YACjD,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,WAAW,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,cAAc,CAAC,WAAW,aAAa,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YAC3D,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE;SAChE,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YAEnB,OAAO;gBACL,OAAO,EAAE,0EAA0E;gBACnF,MAAM,EAAE,cAAc;aACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;gBACvD,IAAI,EAAE;oBACJ,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,MAAM,EAAE,cAAc,CAAC,MAAM;oBAC7B,OAAO,EAAE,cAAc,CAAC,OAAO,IAAI,EAAE;oBACrC,WAAW,EAAE,cAAc,CAAC,WAAW;iBACxC;aACF,CAAC,CAAC;YACH,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,oBAAoB,CACxC,MAAoB,EACpB,UAAkB,EAClB,UAAsC;IAEtC,IAAI,CAAC;QAEH,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;YAC9D,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;gBACrD,KAAK,EAAE;oBACL,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,WAAW,EAAE,gBAAgB,CAAC,WAAW;iBAC1C;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,2BAA2B,UAAU,CAAC,IAAI,8CAA8C,CACzF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;YACzB,IAAI,EAAE;gBACJ,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI;gBAC9C,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM;gBACpD,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM;gBACpD,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO;aACxD;SACF,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AASM,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,YAA6B;IAE7B,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACrD,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,UAAU,EAAE;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,CAAC,UAAU,aAAa,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YAC1D,KAAK,EAAE;gBACL,YAAY,EAAE,YAAY,CAAC,YAAY;gBACvC,UAAU,EAAE,YAAY,CAAC,UAAU;aACpC;SACF,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE,CAAC;YAEpB,OAAO;gBACL,OAAO,EAAE,6DAA6D;aACvE,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBACtD,IAAI,EAAE;oBACJ,YAAY,EAAE,YAAY,CAAC,YAAY;oBACvC,cAAc,EAAE,YAAY,CAAC,cAAc;oBAC3C,eAAe,EAAE,YAAY,CAAC,eAAe;oBAC7C,UAAU,EAAE,YAAY,CAAC,UAAU;iBACpC;aACF,CAAC,CAAC;YACH,OAAO;gBACL,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,cAAc;aACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,cAAsB,EACtB,UAAoC;IAEpC,IAAI,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;YAC3D,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,6CAA6C,cAAc,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE,CAAC;YAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;gBACtD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE;aACrC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,CAAC,UAAU,aAAa,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,IACE,UAAU,CAAC,YAAY;YACvB,UAAU,CAAC,YAAY,KAAK,eAAe,CAAC,YAAY;YACxD,CAAC,UAAU,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU,CAAC,EACrD,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;gBACnD,KAAK,EAAE;oBACL,YAAY,EAAE,UAAU,CAAC,YAAY;oBACrC,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU;iBAChE;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8CAA8C,UAAU,CAAC,YAAY,oBAAoB,UAAU,CAAC,UAAU,IAAI,eAAe,CAAC,UAClI,GAAG,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACtD,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;YAC7B,IAAI,EAAE;gBACJ,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,eAAe,CAAC,YAAY;gBACrE,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI,eAAe,CAAC,cAAc;gBAC3E,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,eAAe,CAAC,eAAe;gBAC9E,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU;aAChE;SACF,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,cAAc;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,UAAkB,EAClB,IAA0B,EAC1B,WAAiC,EACjC,UAAmB,EACnB,MAAe;IAEf,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YACrD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;YACzB,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,aAAa,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,GAAG,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YACvD,KAAK,EAAE,EAAE,UAAU,EAAE;SACtB,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,YAAY,EAAE,cAAc;YACpD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAwC,CAAC,CAAC,MAAM,CAC5E,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE;gBAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;oBACnC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAyB,CAC1B;YACD,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,iBAAiB,GAAG,YAAY,EAAE,cAAc;YACpD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAwC,CAAC,CAAC,MAAM,CAC5E,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE;gBAC9B,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC1C,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAyB,CAC1B;YACD,CAAC,CAAC,WAAW,CAAC;QAEhB,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,GAAG,GAAG,SAAS,CAAC,OAAO,CAAA;QAC3B,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,GAAG,GAAG,GAAG,MAAM,CAAA;QACpB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC7B,CAAC;QAED,IAAI,MAAM,GAAuB;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAsC;YACvD,GAAG;YACH,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,OAAO;gBACnB,GAAG,WAAW;aACf;YACD,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,iBAAiB;SACxB,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC;QAC7C,CAAC;QAED,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,UAAU,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC;QAEjE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAEH,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,CAAC,CAAC;gBAErC,MAAM,kBAAkB,GAAG,YAAY,EAAE,eAAe;oBACtD,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC;oBACnE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAElB,OAAO,kBAAkB,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;gBAEV,MAAM,kBAAkB,GAAG,SAAS,CAAC,WAAW,EAAE,kBAAkB,IAAI,EAAE,CAAC;gBAC3E,MAAM,WAAW,GACf,kBAAkB,CAAC,MAAM,KAAK,CAAC;oBAC/B,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC3D,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAElB,IAAI,OAAO,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CACV,+BAA+B,OAAO,OAAO,UAAU,aAAa,YAAY,KAAK,CACtF,CAAC;oBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;oBAC3C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AASM,KAAK,UAAU,sBAAsB,CAAC,MAAoB,EAAE,KAAa,EAAE,YAAoB,EAAE,KAA0B;IAChI,IAAI,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC;YAC3D,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,cAAc,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;QAEjC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAU,EAAE,CAAC;YACjD,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;YAE/F,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAEzE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAE5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;gBACtD,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,aAAa,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;YAErF,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;YAE1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAEzE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAEzE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1G,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAE5D,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACtD,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,EAAE,CAAA;QAC9C,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,IAAI,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAUD,SAAS,oBAAoB,CAC3B,GAAW,EACX,IAAyB,EACzB,iBAAyC;IAEzC,IAAI,CAAC,iBAAiB;QAAE,OAAO,GAAG,CAAA;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,GAAG,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AASD,SAAS,OAAO,CAAC,IAAS,EAAE,OAA4B,EAAE,gBAAyB,KAAK;IACtF,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AACD,SAAS,kBAAkB,CAAC,QAAgB,EAAE,IAAyB;IACrE,MAAM,eAAe,GAAG,wCAAwC,CAAC;IACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YAElD,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAEjC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;IACtD,IAAI,OAAO,CAAC;IAEZ,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEvC,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,KAAK,aAAa;gBAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACxD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM;YACR;gBAEE,OAAO,CAAC,IAAI,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;gBACjD,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAEjC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,IACE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC1C,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAGD,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAS;IAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AASD,SAAS,SAAS,CAAC,GAAwB,EAAE,OAA4B;IACvE,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,IAAI,UAAU,KAAK,cAAc;YAAE,SAAS;QAE5C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,OAAO,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACpC,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACzB,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CACvD,CAAC;gBACJ,CAAC;qBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC3D,OAAO,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAErE,MAAM,YAAY,GAAwB,EAAE,CAAC;YAC7C,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACpC,YAAY,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YACD,MAAM,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAA8B,EAC9B,SAA8B,EAC9B,YAAoB,EACpB,UAAkB;IAElB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC1D,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7F,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AACD,SAAS,cAAc,CAAC,GAAwB,EAAE,IAAY;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9C,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAOD,SAAS,cAAc,CAAC,SAAc;IACpC,QAAQ,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,KAAK,yBAAQ,CAAC,KAAK;YACjB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC;gBACjF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,IAAI,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,CAC9E,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrB,OAAO,EAAE,aAAa,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC;QAEnD,KAAK,yBAAQ,CAAC,MAAM;YAClB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,EAAE,aAAa,EAAE,UAAU,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;QAExE,KAAK,yBAAQ,CAAC,OAAO;YACnB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAExF,KAAK,yBAAQ,CAAC,IAAI,CAAC;QACnB;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AASD,SAAS,oBAAoB,CAC3B,QAAa,EACb,eAAoC;IAEpC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAE5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAE7D,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;YACrF,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAEnC,YAAY,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAChD,CAAC;qBAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAE1C,YAAY,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC,EAAE,EAAyB,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QAEN,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,uDAAoD;AAA3C,8GAAA,YAAY,OAAA;AACrB,uDAAgD;AAAvC,0GAAA,QAAQ,OAAA"}
|