glasswork 0.12.2 → 0.13.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/dist/auth/abilities.d.ts +41 -0
- package/dist/auth/abilities.d.ts.map +1 -0
- package/dist/auth/abilities.js +62 -0
- package/dist/auth/abilities.js.map +1 -0
- package/dist/auth/assert.d.ts +20 -0
- package/dist/auth/assert.d.ts.map +1 -0
- package/dist/auth/assert.js +28 -0
- package/dist/auth/assert.js.map +1 -0
- package/dist/auth/better-auth-provider.d.ts +56 -0
- package/dist/auth/better-auth-provider.d.ts.map +1 -0
- package/dist/auth/better-auth-provider.js +62 -0
- package/dist/auth/better-auth-provider.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +31 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +92 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/types.d.ts +54 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +5 -2
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/types.d.ts +8 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/http/route-helpers.d.ts +52 -9
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +90 -40
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/define-job.d.ts +34 -2
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/define-job.js.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts +75 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js +135 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -0
- package/dist/jobs/drivers/mock-driver.d.ts +45 -10
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +36 -17
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts +26 -19
- package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/sqs-driver.js +54 -69
- package/dist/jobs/drivers/sqs-driver.js.map +1 -1
- package/dist/jobs/errors.d.ts +8 -4
- package/dist/jobs/errors.d.ts.map +1 -1
- package/dist/jobs/errors.js +13 -7
- package/dist/jobs/errors.js.map +1 -1
- package/dist/jobs/index.d.ts +4 -3
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +3 -2
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-registry.d.ts +4 -4
- package/dist/jobs/job-registry.d.ts.map +1 -1
- package/dist/jobs/job-registry.js.map +1 -1
- package/dist/jobs/job-service.js +1 -1
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/schedule-constants.d.ts +0 -4
- package/dist/jobs/schedule-constants.d.ts.map +1 -1
- package/dist/jobs/schedule-constants.js +0 -4
- package/dist/jobs/schedule-constants.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +46 -10
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/types.d.ts +59 -50
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/utils.d.ts +0 -9
- package/dist/jobs/utils.d.ts.map +1 -1
- package/dist/jobs/utils.js +3 -23
- package/dist/jobs/utils.js.map +1 -1
- package/dist/jobs/worker.d.ts +2 -3
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +183 -82
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/casl.d.ts +18 -19
- package/dist/list-query/casl.d.ts.map +1 -1
- package/dist/list-query/casl.js +40 -46
- package/dist/list-query/casl.js.map +1 -1
- package/dist/uploads/file-upload.d.ts +44 -0
- package/dist/uploads/file-upload.d.ts.map +1 -0
- package/dist/uploads/file-upload.js +145 -0
- package/dist/uploads/file-upload.js.map +1 -0
- package/dist/uploads/index.d.ts +6 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +7 -0
- package/dist/uploads/index.js.map +1 -0
- package/dist/uploads/uploads.service.d.ts +98 -0
- package/dist/uploads/uploads.service.d.ts.map +1 -0
- package/dist/uploads/uploads.service.js +134 -0
- package/dist/uploads/uploads.service.js.map +1 -0
- package/dist/uploads/validators.d.ts +41 -0
- package/dist/uploads/validators.d.ts.map +1 -0
- package/dist/uploads/validators.js +94 -0
- package/dist/uploads/validators.js.map +1 -0
- package/package.json +34 -3
- package/dist/email/compiler/code-generator.d.ts +0 -11
- package/dist/email/compiler/code-generator.d.ts.map +0 -1
- package/dist/email/compiler/code-generator.js +0 -319
- package/dist/email/compiler/code-generator.js.map +0 -1
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
import { generateInterface } from './type-extractor.js';
|
|
2
|
-
/**
|
|
3
|
-
* Generates TypeScript code from tokenized template.
|
|
4
|
-
* Converts control flow markers and variables to JS template literals.
|
|
5
|
-
*/
|
|
6
|
-
export function generateCode(name, tokens, types, html) {
|
|
7
|
-
const interfaceName = toPascalCase(name) + 'Context';
|
|
8
|
-
const interfaceCode = generateInterface(interfaceName, types);
|
|
9
|
-
// Transform the HTML with control flow markers into template literal
|
|
10
|
-
const transformedHtml = transformToTemplateLiteral(tokens);
|
|
11
|
-
const code = `// This file is auto-generated by @glasswork/email. Do not edit manually.
|
|
12
|
-
|
|
13
|
-
${interfaceCode}
|
|
14
|
-
|
|
15
|
-
export function render(ctx: ${interfaceName}): { html: string; text: string } {
|
|
16
|
-
const html = \`${escapeBackticks(transformedHtml)}\`;
|
|
17
|
-
|
|
18
|
-
// Auto-generated plain text version
|
|
19
|
-
const text = htmlToText(html);
|
|
20
|
-
|
|
21
|
-
return { html, text };
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function htmlToText(html: string): string {
|
|
25
|
-
return html
|
|
26
|
-
// Remove style and script tags with content
|
|
27
|
-
.replace(/<style[^>]*>[sS]*?</style>/gi, '')
|
|
28
|
-
.replace(/<script[^>]*>[sS]*?</script>/gi, '')
|
|
29
|
-
// Convert line breaks
|
|
30
|
-
.replace(/<br\\s*\\/?>/gi, '\\n')
|
|
31
|
-
// Convert block elements to newlines
|
|
32
|
-
.replace(/<\\/(p|div|tr|h[1-6])>/gi, '\\n')
|
|
33
|
-
// Convert list items
|
|
34
|
-
.replace(/<li[^>]*>/gi, '• ')
|
|
35
|
-
.replace(/<\\/li>/gi, '\\n')
|
|
36
|
-
// Remove remaining HTML tags
|
|
37
|
-
.replace(/<[^>]+>/g, '')
|
|
38
|
-
// Decode common HTML entities
|
|
39
|
-
.replace(/ /gi, ' ')
|
|
40
|
-
.replace(/&/gi, '&')
|
|
41
|
-
.replace(/</gi, '<')
|
|
42
|
-
.replace(/>/gi, '>')
|
|
43
|
-
.replace(/"/gi, '"')
|
|
44
|
-
.replace(/'/gi, "'")
|
|
45
|
-
// Clean up whitespace
|
|
46
|
-
.replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n')
|
|
47
|
-
.trim();
|
|
48
|
-
}
|
|
49
|
-
`;
|
|
50
|
-
return code;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Transforms tokens back into a string with JS template literal expressions.
|
|
54
|
-
*/
|
|
55
|
-
function transformToTemplateLiteral(tokens) {
|
|
56
|
-
const parts = [];
|
|
57
|
-
const blockStack = [];
|
|
58
|
-
for (const token of tokens) {
|
|
59
|
-
switch (token.type) {
|
|
60
|
-
case 'text':
|
|
61
|
-
parts.push(token.content);
|
|
62
|
-
break;
|
|
63
|
-
case 'variable':
|
|
64
|
-
parts.push(transformVariable(token));
|
|
65
|
-
break;
|
|
66
|
-
case 'if':
|
|
67
|
-
blockStack.push('if');
|
|
68
|
-
parts.push(`\${${transformCondition(token.condition)} ? \``);
|
|
69
|
-
break;
|
|
70
|
-
case 'elseif':
|
|
71
|
-
// Close previous if/elseif block and start new conditional
|
|
72
|
-
parts.push(`\` : ${transformCondition(token.condition)} ? \``);
|
|
73
|
-
break;
|
|
74
|
-
case 'else':
|
|
75
|
-
// Close previous if/elseif block and start else
|
|
76
|
-
parts.push('` : `');
|
|
77
|
-
break;
|
|
78
|
-
case 'each':
|
|
79
|
-
blockStack.push('each');
|
|
80
|
-
parts.push(transformEachStart(token));
|
|
81
|
-
break;
|
|
82
|
-
case 'end': {
|
|
83
|
-
const blockType = blockStack.pop();
|
|
84
|
-
if (blockType === 'if') {
|
|
85
|
-
// Close conditional - if no else was provided, use empty string
|
|
86
|
-
parts.push("` : ''}");
|
|
87
|
-
}
|
|
88
|
-
else if (blockType === 'each') {
|
|
89
|
-
parts.push("`).join('')}");
|
|
90
|
-
}
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return parts.join('');
|
|
96
|
-
}
|
|
97
|
-
function transformVariable(token) {
|
|
98
|
-
const path = token.path.join('.');
|
|
99
|
-
// Handle loop context variables
|
|
100
|
-
if (token.path[0].startsWith('@')) {
|
|
101
|
-
const loopVar = token.path[0].slice(1); // Remove @ prefix
|
|
102
|
-
switch (loopVar) {
|
|
103
|
-
case 'index':
|
|
104
|
-
return '${__index}';
|
|
105
|
-
case 'first':
|
|
106
|
-
return '${__index === 0}';
|
|
107
|
-
case 'last':
|
|
108
|
-
return '${__index === __array.length - 1}';
|
|
109
|
-
case 'length':
|
|
110
|
-
return '${__array.length}';
|
|
111
|
-
default:
|
|
112
|
-
return `\${${loopVar}}`;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// Handle expressions with operators (like @index + 1)
|
|
116
|
-
if (token.expression.includes('+') || token.expression.includes('-')) {
|
|
117
|
-
const transformed = token.expression
|
|
118
|
-
.replace(/@index/g, '__index')
|
|
119
|
-
.replace(/@first/g, '(__index === 0)')
|
|
120
|
-
.replace(/@last/g, '(__index === __array.length - 1)')
|
|
121
|
-
.replace(/@length/g, '__array.length');
|
|
122
|
-
return `\${${transformed}}`;
|
|
123
|
-
}
|
|
124
|
-
if (token.defaultValue !== undefined) {
|
|
125
|
-
return `\${${path} ?? '${token.defaultValue}'}`;
|
|
126
|
-
}
|
|
127
|
-
return `\${${path}}`;
|
|
128
|
-
}
|
|
129
|
-
function transformCondition(condition) {
|
|
130
|
-
// Transform loop context variables in conditions
|
|
131
|
-
return condition
|
|
132
|
-
.replace(/@index/g, '__index')
|
|
133
|
-
.replace(/@first/g, '(__index === 0)')
|
|
134
|
-
.replace(/@last/g, '(__index === __array.length - 1)')
|
|
135
|
-
.replace(/@length/g, '__array.length');
|
|
136
|
-
}
|
|
137
|
-
function transformEachStart(token) {
|
|
138
|
-
const { arrayPath, itemName, indexName } = token;
|
|
139
|
-
// Build the map function with proper destructuring
|
|
140
|
-
const mapParams = indexName ? `(${itemName}, ${indexName})` : `(${itemName}, __index)`;
|
|
141
|
-
// Store array reference for @last, @length access
|
|
142
|
-
return `\${(((__array) => __array.map(${mapParams} => \``;
|
|
143
|
-
}
|
|
144
|
-
function toPascalCase(str) {
|
|
145
|
-
return str
|
|
146
|
-
.split(/[-_\s]+/)
|
|
147
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
148
|
-
.join('');
|
|
149
|
-
}
|
|
150
|
-
function escapeBackticks(str) {
|
|
151
|
-
// Escape backticks that aren't part of our template expressions
|
|
152
|
-
// We need to be careful not to escape the ones we're inserting
|
|
153
|
-
return str.replace(/`/g, '\\`');
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Alternative code generator that produces cleaner output for simple templates
|
|
157
|
-
*/
|
|
158
|
-
export function generateCodeWithContext(name, compiledHtml, tokens, types) {
|
|
159
|
-
const interfaceName = toPascalCase(name) + 'Context';
|
|
160
|
-
const interfaceCode = generateInterface(interfaceName, types);
|
|
161
|
-
// Replace control flow markers and variables in the compiled HTML
|
|
162
|
-
const transformedHtml = transformCompiledHtml(compiledHtml, tokens);
|
|
163
|
-
const code = `// This file is auto-generated by @glasswork/email. Do not edit manually.
|
|
164
|
-
|
|
165
|
-
${interfaceCode}
|
|
166
|
-
|
|
167
|
-
export function render(ctx: ${interfaceName}): { html: string; text: string } {
|
|
168
|
-
const html = \`${escapeBackticks(transformedHtml)}\`;
|
|
169
|
-
|
|
170
|
-
// Auto-generated plain text version
|
|
171
|
-
const text = htmlToText(html);
|
|
172
|
-
|
|
173
|
-
return { html, text };
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function htmlToText(html: string): string {
|
|
177
|
-
return html
|
|
178
|
-
// Remove style and script tags with content
|
|
179
|
-
.replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, '')
|
|
180
|
-
.replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, '')
|
|
181
|
-
// Convert line breaks
|
|
182
|
-
.replace(/<br\\s*\\/?>/gi, '\\n')
|
|
183
|
-
// Convert block elements to newlines
|
|
184
|
-
.replace(/<\\/(p|div|tr|h[1-6])>/gi, '\\n')
|
|
185
|
-
// Convert list items
|
|
186
|
-
.replace(/<li[^>]*>/gi, '• ')
|
|
187
|
-
.replace(/<\\/li>/gi, '\\n')
|
|
188
|
-
// Remove remaining HTML tags
|
|
189
|
-
.replace(/<[^>]+>/g, '')
|
|
190
|
-
// Decode common HTML entities
|
|
191
|
-
.replace(/ /gi, ' ')
|
|
192
|
-
.replace(/&/gi, '&')
|
|
193
|
-
.replace(/</gi, '<')
|
|
194
|
-
.replace(/>/gi, '>')
|
|
195
|
-
.replace(/"/gi, '"')
|
|
196
|
-
.replace(/'/gi, "'")
|
|
197
|
-
// Clean up whitespace
|
|
198
|
-
.replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n')
|
|
199
|
-
.trim();
|
|
200
|
-
}
|
|
201
|
-
`;
|
|
202
|
-
return code;
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Transforms compiled HTML (from MJML) by replacing markers with template expressions.
|
|
206
|
-
* This is the second pass of the two-pass compilation.
|
|
207
|
-
*/
|
|
208
|
-
function transformCompiledHtml(html, tokens) {
|
|
209
|
-
// Build a map of original positions to replacements
|
|
210
|
-
// Since MJML compilation may have moved things around, we use regex to find markers
|
|
211
|
-
let result = html;
|
|
212
|
-
// Transform control flow markers (they're preserved in HTML comments)
|
|
213
|
-
result = result.replace(/<!--\s*@if\s+([^-]*?)\s*-->/g, (_match, condition) => {
|
|
214
|
-
return `\${${transformCondition(condition.trim())} ? \``;
|
|
215
|
-
});
|
|
216
|
-
result = result.replace(/<!--\s*@elseif\s+([^-]*?)\s*-->/g, (_match, condition) => {
|
|
217
|
-
return `\` : ${transformCondition(condition.trim())} ? \``;
|
|
218
|
-
});
|
|
219
|
-
result = result.replace(/<!--\s*@else\s*-->/g, '` : `');
|
|
220
|
-
// Handle @each - need to track which @end belongs to which @each/@if
|
|
221
|
-
const eachPattern = /<!--\s*@each\s+(\S+)\s+as\s+(\w+)(?:\s*,\s*(\w+))?\s*-->/g;
|
|
222
|
-
result = result.replace(eachPattern, (_match, arrayPath, itemName, indexName) => {
|
|
223
|
-
const mapParams = indexName ? `(${itemName}, ${indexName})` : `(${itemName}, __index)`;
|
|
224
|
-
return `\${(((__array) => __array.map(${mapParams} => \``;
|
|
225
|
-
});
|
|
226
|
-
// Handle @end markers - need context to know if it's if or each
|
|
227
|
-
// For simplicity in spike, we'll use a simple approach
|
|
228
|
-
result = transformEndMarkers(result);
|
|
229
|
-
// Transform variables
|
|
230
|
-
result = result.replace(/\{\{([^}]+)\}\}/g, (_match, expression) => {
|
|
231
|
-
const trimmed = expression.trim();
|
|
232
|
-
// Check for default value
|
|
233
|
-
const defaultMatch = trimmed.match(/^(.+?)\s*\?\?\s*['"]([^'"]*)['"]\s*$/);
|
|
234
|
-
if (defaultMatch) {
|
|
235
|
-
return `\${${defaultMatch[1].trim()} ?? '${defaultMatch[2]}'}`;
|
|
236
|
-
}
|
|
237
|
-
// Handle loop context variables
|
|
238
|
-
if (trimmed.startsWith('@')) {
|
|
239
|
-
const loopVar = trimmed.slice(1);
|
|
240
|
-
switch (loopVar) {
|
|
241
|
-
case 'index':
|
|
242
|
-
return '${__index}';
|
|
243
|
-
case 'first':
|
|
244
|
-
return '${__index === 0}';
|
|
245
|
-
case 'last':
|
|
246
|
-
return '${__index === __array.length - 1}';
|
|
247
|
-
case 'length':
|
|
248
|
-
return '${__array.length}';
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
// Handle expressions with loop context
|
|
252
|
-
if (trimmed.includes('@')) {
|
|
253
|
-
const transformed = trimmed
|
|
254
|
-
.replace(/@index/g, '__index')
|
|
255
|
-
.replace(/@first/g, '(__index === 0)')
|
|
256
|
-
.replace(/@last/g, '(__index === __array.length - 1)')
|
|
257
|
-
.replace(/@length/g, '__array.length');
|
|
258
|
-
return `\${${transformed}}`;
|
|
259
|
-
}
|
|
260
|
-
return `\${ctx.${trimmed}}`;
|
|
261
|
-
});
|
|
262
|
-
return result;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Transforms @end markers based on context.
|
|
266
|
-
* This is tricky because we need to know if it ends an @if or @each.
|
|
267
|
-
*/
|
|
268
|
-
function transformEndMarkers(html) {
|
|
269
|
-
// Track block types as we encounter them
|
|
270
|
-
const blockStack = [];
|
|
271
|
-
const markers = [];
|
|
272
|
-
// Find all markers
|
|
273
|
-
const markerPattern = /<!--\s*@(if|elseif|else|each|end)(?:\s+[^-]*?)?\s*-->/g;
|
|
274
|
-
let match;
|
|
275
|
-
while ((match = markerPattern.exec(html)) !== null) {
|
|
276
|
-
const type = match[1];
|
|
277
|
-
markers.push({ type, index: match.index, length: match[0].length });
|
|
278
|
-
}
|
|
279
|
-
// Process markers in order and build replacement map
|
|
280
|
-
const replacements = [];
|
|
281
|
-
for (const marker of markers) {
|
|
282
|
-
if (marker.type === 'if') {
|
|
283
|
-
blockStack.push('if');
|
|
284
|
-
}
|
|
285
|
-
else if (marker.type === 'each') {
|
|
286
|
-
blockStack.push('each');
|
|
287
|
-
}
|
|
288
|
-
else if (marker.type === 'end') {
|
|
289
|
-
const blockType = blockStack.pop();
|
|
290
|
-
if (blockType === 'if') {
|
|
291
|
-
replacements.push({
|
|
292
|
-
index: marker.index,
|
|
293
|
-
length: marker.length,
|
|
294
|
-
replacement: "` : ''}",
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
else if (blockType === 'each') {
|
|
298
|
-
replacements.push({
|
|
299
|
-
index: marker.index,
|
|
300
|
-
length: marker.length,
|
|
301
|
-
replacement: "`).join('')})(ctx." + findArrayPath(markers, replacements.length) + ')}', // This is simplified
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
// Apply replacements in reverse order to preserve indices
|
|
307
|
-
let result = html;
|
|
308
|
-
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
309
|
-
const { index, length, replacement } = replacements[i];
|
|
310
|
-
result = result.slice(0, index) + replacement + result.slice(index + length);
|
|
311
|
-
}
|
|
312
|
-
return result;
|
|
313
|
-
}
|
|
314
|
-
// Helper to find the array path for an @each block
|
|
315
|
-
function findArrayPath(markers, endIndex) {
|
|
316
|
-
// This is a simplified version - in a real implementation we'd track this properly
|
|
317
|
-
return 'items';
|
|
318
|
-
}
|
|
319
|
-
//# sourceMappingURL=code-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-generator.js","sourceRoot":"","sources":["../../../src/email/compiler/code-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,MAAe,EACf,KAAgC,EAChC,IAAY;IAEZ,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE9D,qEAAqE;IACrE,MAAM,eAAe,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG;;EAEb,aAAa;;8BAEe,aAAa;mBACxB,eAAe,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiClD,CAAC;IAEA,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,MAAe;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAyB,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM;YAER,KAAK,UAAU;gBACb,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrC,MAAM;YAER,KAAK,IAAI;gBACP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM;YAER,KAAK,QAAQ;gBACX,2DAA2D;gBAC3D,KAAK,CAAC,IAAI,CAAC,QAAQ,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM;YAER,KAAK,MAAM;gBACT,gDAAgD;gBAChD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,MAAM;YAER,KAAK,MAAM;gBACT,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC,MAAM;YAER,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,gEAAgE;oBAChE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBAChC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAI1B;IACC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,gCAAgC;IAChC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAC1D,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC;YACtB,KAAK,OAAO;gBACV,OAAO,kBAAkB,CAAC;YAC5B,KAAK,MAAM;gBACT,OAAO,mCAAmC,CAAC;YAC7C,KAAK,QAAQ;gBACX,OAAO,mBAAmB,CAAC;YAC7B;gBACE,OAAO,MAAM,OAAO,GAAG,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU;aACjC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;aAC7B,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;aACrC,OAAO,CAAC,QAAQ,EAAE,kCAAkC,CAAC;aACrD,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACzC,OAAO,MAAM,WAAW,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,MAAM,IAAI,QAAQ,KAAK,CAAC,YAAY,IAAI,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,IAAI,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,iDAAiD;IACjD,OAAO,SAAS;SACb,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;SACrC,OAAO,CAAC,QAAQ,EAAE,kCAAkC,CAAC;SACrD,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAI3B;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAEjD,mDAAmD;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,YAAY,CAAC;IAEvF,kDAAkD;IAClD,OAAO,iCAAiC,SAAS,QAAQ,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG;SACP,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACzE,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,gEAAgE;IAChE,+DAA+D;IAC/D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,YAAoB,EACpB,MAAe,EACf,KAAgC;IAEhC,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,MAAM,aAAa,GAAG,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAE9D,kEAAkE;IAClE,MAAM,eAAe,GAAG,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAG;;EAEb,aAAa;;8BAEe,aAAa;mBACxB,eAAe,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiClD,CAAC;IAEA,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAe;IAC1D,oDAAoD;IACpD,oFAAoF;IAEpF,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,sEAAsE;IACtE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAC5E,OAAO,MAAM,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAChF,OAAO,QAAQ,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAExD,qEAAqE;IACrE,MAAM,WAAW,GAAG,2DAA2D,CAAC;IAChF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;QAC9E,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,YAAY,CAAC;QACvF,OAAO,iCAAiC,SAAS,QAAQ,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,gEAAgE;IAChE,uDAAuD;IACvD,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAErC,sBAAsB;IACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAElC,0BAA0B;QAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3E,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,OAAO;oBACV,OAAO,YAAY,CAAC;gBACtB,KAAK,OAAO;oBACV,OAAO,kBAAkB,CAAC;gBAC5B,KAAK,MAAM;oBACT,OAAO,mCAAmC,CAAC;gBAC7C,KAAK,QAAQ;oBACX,OAAO,mBAAmB,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,OAAO;iBACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;iBAC7B,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;iBACrC,OAAO,CAAC,QAAQ,EAAE,kCAAkC,CAAC;iBACrD,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACzC,OAAO,MAAM,WAAW,GAAG,CAAC;QAC9B,CAAC;QAED,OAAO,UAAU,OAAO,GAAG,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,yCAAyC;IACzC,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,MAAM,OAAO,GAIR,EAAE,CAAC;IAER,mBAAmB;IACnB,MAAM,aAAa,GAAG,wDAAwD,CAAC;IAC/E,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAA8C,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,qDAAqD;IACrD,MAAM,YAAY,GAAkE,EAAE,CAAC;IAEvF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,SAAS;iBACvB,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAChC,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,oBAAoB,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,qBAAqB;iBAC9G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mDAAmD;AACnD,SAAS,aAAa,CAAC,OAAgC,EAAE,QAAgB;IACvE,mFAAmF;IACnF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|