accessibility-server-mcp 1.0.7 → 1.0.8
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 +147 -6
- package/config/wcag-rules.json +22 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +175 -31
- package/dist/index.js.map +1 -1
- package/dist/test-multi-standard.d.ts +6 -0
- package/dist/test-multi-standard.d.ts.map +1 -0
- package/dist/test-multi-standard.js +78 -0
- package/dist/test-multi-standard.js.map +1 -0
- package/dist/tools/accessibility-tester.d.ts +9 -1
- package/dist/tools/accessibility-tester.d.ts.map +1 -1
- package/dist/tools/accessibility-tester.js +75 -34
- package/dist/tools/accessibility-tester.js.map +1 -1
- package/dist/tools/wcag-validator.d.ts +19 -2
- package/dist/tools/wcag-validator.d.ts.map +1 -1
- package/dist/tools/wcag-validator.js +63 -1
- package/dist/tools/wcag-validator.js.map +1 -1
- package/dist/tools/website-accessibility-tester.d.ts +26 -4
- package/dist/tools/website-accessibility-tester.d.ts.map +1 -1
- package/dist/tools/website-accessibility-tester.js +122 -12
- package/dist/tools/website-accessibility-tester.js.map +1 -1
- package/dist/types/accessibility.d.ts +170 -5
- package/dist/types/accessibility.d.ts.map +1 -1
- package/dist/types/accessibility.js +67 -1
- package/dist/types/accessibility.js.map +1 -1
- package/dist/types/mcp.d.ts +13 -3
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/utils/ada-guidance.d.ts +22 -0
- package/dist/utils/ada-guidance.d.ts.map +1 -0
- package/dist/utils/ada-guidance.js +131 -0
- package/dist/utils/ada-guidance.js.map +1 -0
- package/dist/utils/browser-manager.d.ts +13 -0
- package/dist/utils/browser-manager.d.ts.map +1 -1
- package/dist/utils/browser-manager.js +67 -0
- package/dist/utils/browser-manager.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/report-generator.d.ts.map +1 -1
- package/dist/utils/report-generator.js +37 -2
- package/dist/utils/report-generator.js.map +1 -1
- package/dist/utils/standard-presets.d.ts +58 -0
- package/dist/utils/standard-presets.d.ts.map +1 -0
- package/dist/utils/standard-presets.js +188 -0
- package/dist/utils/standard-presets.js.map +1 -0
- package/dist/utils/standard-tag-metadata.d.ts +35 -0
- package/dist/utils/standard-tag-metadata.d.ts.map +1 -0
- package/dist/utils/standard-tag-metadata.js +416 -0
- package/dist/utils/standard-tag-metadata.js.map +1 -0
- package/dist/utils/website-crawler.d.ts +10 -0
- package/dist/utils/website-crawler.d.ts.map +1 -1
- package/dist/utils/website-crawler.js +40 -6
- package/dist/utils/website-crawler.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility for managing standard tag metadata
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Metadata map for common standard tags
|
|
6
|
+
*/
|
|
7
|
+
export const STANDARD_METADATA_MAP = {
|
|
8
|
+
// Category tags
|
|
9
|
+
'cat.text-alternatives': {
|
|
10
|
+
category: 'category',
|
|
11
|
+
displayName: 'Text Alternatives',
|
|
12
|
+
description: 'Rules related to providing text alternatives for non-text content',
|
|
13
|
+
},
|
|
14
|
+
'cat.aria': {
|
|
15
|
+
category: 'category',
|
|
16
|
+
displayName: 'ARIA',
|
|
17
|
+
description: 'Rules related to ARIA attributes, roles, and states',
|
|
18
|
+
},
|
|
19
|
+
'cat.name-role-value': {
|
|
20
|
+
category: 'category',
|
|
21
|
+
displayName: 'Name, Role, Value',
|
|
22
|
+
description: 'Rules ensuring elements have proper accessible names, roles, and values',
|
|
23
|
+
},
|
|
24
|
+
'cat.color': {
|
|
25
|
+
category: 'category',
|
|
26
|
+
displayName: 'Color',
|
|
27
|
+
description: 'Rules related to color contrast and color usage',
|
|
28
|
+
},
|
|
29
|
+
'cat.structure': {
|
|
30
|
+
category: 'category',
|
|
31
|
+
displayName: 'Structure',
|
|
32
|
+
description: 'Rules related to document structure and landmarks',
|
|
33
|
+
},
|
|
34
|
+
'cat.semantics': {
|
|
35
|
+
category: 'category',
|
|
36
|
+
displayName: 'Semantics',
|
|
37
|
+
description: 'Rules related to semantic HTML usage',
|
|
38
|
+
},
|
|
39
|
+
'cat.tables': {
|
|
40
|
+
category: 'category',
|
|
41
|
+
displayName: 'Tables',
|
|
42
|
+
description: 'Rules related to table structure and markup',
|
|
43
|
+
},
|
|
44
|
+
'cat.forms': {
|
|
45
|
+
category: 'category',
|
|
46
|
+
displayName: 'Forms',
|
|
47
|
+
description: 'Rules related to form controls and labels',
|
|
48
|
+
},
|
|
49
|
+
'cat.keyboard': {
|
|
50
|
+
category: 'category',
|
|
51
|
+
displayName: 'Keyboard',
|
|
52
|
+
description: 'Rules related to keyboard accessibility',
|
|
53
|
+
},
|
|
54
|
+
'cat.language': {
|
|
55
|
+
category: 'category',
|
|
56
|
+
displayName: 'Language',
|
|
57
|
+
description: 'Rules related to language attributes and identification',
|
|
58
|
+
},
|
|
59
|
+
'cat.time-and-media': {
|
|
60
|
+
category: 'category',
|
|
61
|
+
displayName: 'Time and Media',
|
|
62
|
+
description: 'Rules related to audio, video, and time-based media',
|
|
63
|
+
},
|
|
64
|
+
'cat.parsing': {
|
|
65
|
+
category: 'category',
|
|
66
|
+
displayName: 'Parsing',
|
|
67
|
+
description: 'Rules related to HTML parsing and validation',
|
|
68
|
+
},
|
|
69
|
+
'cat.sensory-and-visual-cues': {
|
|
70
|
+
category: 'category',
|
|
71
|
+
displayName: 'Sensory and Visual Cues',
|
|
72
|
+
description: 'Rules related to sensory characteristics and visual cues',
|
|
73
|
+
},
|
|
74
|
+
// WCAG level tags
|
|
75
|
+
'wcag2a': {
|
|
76
|
+
category: 'wcag',
|
|
77
|
+
displayName: 'WCAG 2.0 Level A',
|
|
78
|
+
description: 'Web Content Accessibility Guidelines 2.0 Level A conformance',
|
|
79
|
+
version: '2.0',
|
|
80
|
+
level: 'A',
|
|
81
|
+
},
|
|
82
|
+
'wcag2aa': {
|
|
83
|
+
category: 'wcag',
|
|
84
|
+
displayName: 'WCAG 2.0 Level AA',
|
|
85
|
+
description: 'Web Content Accessibility Guidelines 2.0 Level AA conformance',
|
|
86
|
+
version: '2.0',
|
|
87
|
+
level: 'AA',
|
|
88
|
+
},
|
|
89
|
+
'wcag2aaa': {
|
|
90
|
+
category: 'wcag',
|
|
91
|
+
displayName: 'WCAG 2.0 Level AAA',
|
|
92
|
+
description: 'Web Content Accessibility Guidelines 2.0 Level AAA conformance',
|
|
93
|
+
version: '2.0',
|
|
94
|
+
level: 'AAA',
|
|
95
|
+
},
|
|
96
|
+
'wcag21a': {
|
|
97
|
+
category: 'wcag',
|
|
98
|
+
displayName: 'WCAG 2.1 Level A',
|
|
99
|
+
description: 'Web Content Accessibility Guidelines 2.1 Level A conformance',
|
|
100
|
+
version: '2.1',
|
|
101
|
+
level: 'A',
|
|
102
|
+
},
|
|
103
|
+
'wcag21aa': {
|
|
104
|
+
category: 'wcag',
|
|
105
|
+
displayName: 'WCAG 2.1 Level AA',
|
|
106
|
+
description: 'Web Content Accessibility Guidelines 2.1 Level AA conformance',
|
|
107
|
+
version: '2.1',
|
|
108
|
+
level: 'AA',
|
|
109
|
+
},
|
|
110
|
+
'wcag22aa': {
|
|
111
|
+
category: 'wcag',
|
|
112
|
+
displayName: 'WCAG 2.2 Level AA',
|
|
113
|
+
description: 'Web Content Accessibility Guidelines 2.2 Level AA conformance',
|
|
114
|
+
version: '2.2',
|
|
115
|
+
level: 'AA',
|
|
116
|
+
},
|
|
117
|
+
// Section 508
|
|
118
|
+
'section508': {
|
|
119
|
+
category: 'section508',
|
|
120
|
+
displayName: 'Section 508',
|
|
121
|
+
description: 'US federal accessibility standard for electronic and information technology',
|
|
122
|
+
version: 'Revised 2017',
|
|
123
|
+
},
|
|
124
|
+
'section508.22.a': {
|
|
125
|
+
category: 'section508',
|
|
126
|
+
displayName: 'Section 508.22(a)',
|
|
127
|
+
description: 'Text equivalent for non-text elements',
|
|
128
|
+
version: 'Revised 2017',
|
|
129
|
+
},
|
|
130
|
+
'section508.22.f': {
|
|
131
|
+
category: 'section508',
|
|
132
|
+
displayName: 'Section 508.22(f)',
|
|
133
|
+
description: 'Client-side image maps',
|
|
134
|
+
version: 'Revised 2017',
|
|
135
|
+
},
|
|
136
|
+
'section508.22.g': {
|
|
137
|
+
category: 'section508',
|
|
138
|
+
displayName: 'Section 508.22(g)',
|
|
139
|
+
description: 'Row and column headers for data tables',
|
|
140
|
+
version: 'Revised 2017',
|
|
141
|
+
},
|
|
142
|
+
'section508.22.i': {
|
|
143
|
+
category: 'section508',
|
|
144
|
+
displayName: 'Section 508.22(i)',
|
|
145
|
+
description: 'Frames must be titled',
|
|
146
|
+
version: 'Revised 2017',
|
|
147
|
+
},
|
|
148
|
+
// EN 301 549
|
|
149
|
+
'EN-301-549': {
|
|
150
|
+
category: 'en301549',
|
|
151
|
+
displayName: 'EN 301 549',
|
|
152
|
+
description: 'European accessibility standard for ICT products and services',
|
|
153
|
+
version: 'V3.2.1',
|
|
154
|
+
},
|
|
155
|
+
// Trusted Tester
|
|
156
|
+
'TTv5': {
|
|
157
|
+
category: 'trustedtester',
|
|
158
|
+
displayName: 'Trusted Tester v5',
|
|
159
|
+
description: 'DHS Trusted Tester methodology for Section 508 conformance testing',
|
|
160
|
+
version: '5.0',
|
|
161
|
+
},
|
|
162
|
+
// RGAA
|
|
163
|
+
'RGAAv4': {
|
|
164
|
+
category: 'rgaa',
|
|
165
|
+
displayName: 'RGAA v4',
|
|
166
|
+
description: 'French accessibility standard (Référentiel Général d\'Amélioration de l\'Accessibilité)',
|
|
167
|
+
version: '4.0',
|
|
168
|
+
},
|
|
169
|
+
// Special tags
|
|
170
|
+
'ACT': {
|
|
171
|
+
category: 'special',
|
|
172
|
+
displayName: 'ACT Rules',
|
|
173
|
+
description: 'W3C Accessibility Conformance Testing rules',
|
|
174
|
+
},
|
|
175
|
+
'best-practice': {
|
|
176
|
+
category: 'special',
|
|
177
|
+
displayName: 'Best Practices',
|
|
178
|
+
description: 'Industry best practices for accessibility not covered by formal standards',
|
|
179
|
+
},
|
|
180
|
+
'experimental': {
|
|
181
|
+
category: 'special',
|
|
182
|
+
displayName: 'Experimental',
|
|
183
|
+
description: 'Experimental rules still in development',
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Parse WCAG criterion tag (e.g., "wcag244" -> "WCAG 2.4.4")
|
|
188
|
+
*/
|
|
189
|
+
function parseWcagCriterion(tag) {
|
|
190
|
+
const match = tag.match(/^wcag(\d)(\d)(\d+)$/);
|
|
191
|
+
if (!match || !match[1] || !match[2] || !match[3])
|
|
192
|
+
return null;
|
|
193
|
+
return {
|
|
194
|
+
principle: match[1],
|
|
195
|
+
guideline: match[2],
|
|
196
|
+
criterion: match[3],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get human-readable name for WCAG criterion
|
|
201
|
+
*/
|
|
202
|
+
function getWcagCriterionName(principle, guideline, criterion) {
|
|
203
|
+
// Map of known WCAG success criteria
|
|
204
|
+
const criteriaNames = {
|
|
205
|
+
'1.1.1': 'Non-text Content',
|
|
206
|
+
'1.2.1': 'Audio-only and Video-only (Prerecorded)',
|
|
207
|
+
'1.2.2': 'Captions (Prerecorded)',
|
|
208
|
+
'1.2.3': 'Audio Description or Media Alternative (Prerecorded)',
|
|
209
|
+
'1.3.1': 'Info and Relationships',
|
|
210
|
+
'1.3.2': 'Meaningful Sequence',
|
|
211
|
+
'1.3.3': 'Sensory Characteristics',
|
|
212
|
+
'1.3.4': 'Orientation',
|
|
213
|
+
'1.3.5': 'Identify Input Purpose',
|
|
214
|
+
'1.4.1': 'Use of Color',
|
|
215
|
+
'1.4.2': 'Audio Control',
|
|
216
|
+
'1.4.3': 'Contrast (Minimum)',
|
|
217
|
+
'1.4.4': 'Resize Text',
|
|
218
|
+
'1.4.5': 'Images of Text',
|
|
219
|
+
'1.4.10': 'Reflow',
|
|
220
|
+
'1.4.11': 'Non-text Contrast',
|
|
221
|
+
'1.4.12': 'Text Spacing',
|
|
222
|
+
'1.4.13': 'Content on Hover or Focus',
|
|
223
|
+
'2.1.1': 'Keyboard',
|
|
224
|
+
'2.1.2': 'No Keyboard Trap',
|
|
225
|
+
'2.1.4': 'Character Key Shortcuts',
|
|
226
|
+
'2.2.1': 'Timing Adjustable',
|
|
227
|
+
'2.2.2': 'Pause, Stop, Hide',
|
|
228
|
+
'2.4.1': 'Bypass Blocks',
|
|
229
|
+
'2.4.2': 'Page Titled',
|
|
230
|
+
'2.4.3': 'Focus Order',
|
|
231
|
+
'2.4.4': 'Link Purpose (In Context)',
|
|
232
|
+
'2.4.5': 'Multiple Ways',
|
|
233
|
+
'2.4.6': 'Headings and Labels',
|
|
234
|
+
'2.4.7': 'Focus Visible',
|
|
235
|
+
'2.5.1': 'Pointer Gestures',
|
|
236
|
+
'2.5.2': 'Pointer Cancellation',
|
|
237
|
+
'2.5.3': 'Label in Name',
|
|
238
|
+
'2.5.4': 'Motion Actuation',
|
|
239
|
+
'3.1.1': 'Language of Page',
|
|
240
|
+
'3.1.2': 'Language of Parts',
|
|
241
|
+
'3.2.1': 'On Focus',
|
|
242
|
+
'3.2.2': 'On Input',
|
|
243
|
+
'3.2.3': 'Consistent Navigation',
|
|
244
|
+
'3.2.4': 'Consistent Identification',
|
|
245
|
+
'3.3.1': 'Error Identification',
|
|
246
|
+
'3.3.2': 'Labels or Instructions',
|
|
247
|
+
'3.3.3': 'Error Suggestion',
|
|
248
|
+
'3.3.4': 'Error Prevention (Legal, Financial, Data)',
|
|
249
|
+
'4.1.1': 'Parsing',
|
|
250
|
+
'4.1.2': 'Name, Role, Value',
|
|
251
|
+
'4.1.3': 'Status Messages',
|
|
252
|
+
};
|
|
253
|
+
const key = `${principle}.${guideline}.${criterion}`;
|
|
254
|
+
return criteriaNames[key] || '';
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get metadata for a standard tag with pattern matching
|
|
258
|
+
*/
|
|
259
|
+
export function getStandardMetadata(tag) {
|
|
260
|
+
// Check if we have predefined metadata
|
|
261
|
+
if (STANDARD_METADATA_MAP[tag]) {
|
|
262
|
+
return {
|
|
263
|
+
tag,
|
|
264
|
+
...STANDARD_METADATA_MAP[tag],
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
// Pattern matching for dynamic tags
|
|
268
|
+
// WCAG criterion tags (e.g., wcag244)
|
|
269
|
+
if (tag.startsWith('wcag') && /^wcag\d\d\d+$/.test(tag)) {
|
|
270
|
+
const parsed = parseWcagCriterion(tag);
|
|
271
|
+
if (parsed) {
|
|
272
|
+
const { principle, guideline, criterion } = parsed;
|
|
273
|
+
const criterionName = getWcagCriterionName(principle, guideline, criterion);
|
|
274
|
+
return {
|
|
275
|
+
tag,
|
|
276
|
+
category: 'wcag',
|
|
277
|
+
displayName: `WCAG ${principle}.${guideline}.${criterion}${criterionName ? ` ${criterionName}` : ''}`,
|
|
278
|
+
description: `WCAG Success Criterion ${principle}.${guideline}.${criterion}${criterionName ? ` - ${criterionName}` : ''}`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Category tags
|
|
283
|
+
if (tag.startsWith('cat.')) {
|
|
284
|
+
const categoryName = tag.substring(4).split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
285
|
+
return {
|
|
286
|
+
tag,
|
|
287
|
+
category: 'category',
|
|
288
|
+
displayName: categoryName,
|
|
289
|
+
description: `Rules related to ${categoryName.toLowerCase()}`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
// Section 508 specific subsections
|
|
293
|
+
if (tag.startsWith('section508.')) {
|
|
294
|
+
return {
|
|
295
|
+
tag,
|
|
296
|
+
category: 'section508',
|
|
297
|
+
displayName: tag.replace('section508.', 'Section 508.'),
|
|
298
|
+
description: `Section 508 ${tag.replace('section508.', '')} requirement`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
// EN 301 549 specific criteria
|
|
302
|
+
if (tag.startsWith('EN-')) {
|
|
303
|
+
return {
|
|
304
|
+
tag,
|
|
305
|
+
category: 'en301549',
|
|
306
|
+
displayName: tag.replace('EN-', 'EN '),
|
|
307
|
+
description: `EN 301 549 requirement ${tag.replace('EN-', '')}`,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
// Trusted Tester test IDs
|
|
311
|
+
if (tag.startsWith('TT') && tag !== 'TTv5') {
|
|
312
|
+
return {
|
|
313
|
+
tag,
|
|
314
|
+
category: 'trustedtester',
|
|
315
|
+
displayName: `Trusted Tester ${tag.replace('TT', 'Test ')}`,
|
|
316
|
+
description: `Trusted Tester test ${tag.replace('TT', '')}`,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
// RGAA criteria
|
|
320
|
+
if (tag.startsWith('RGAA-')) {
|
|
321
|
+
return {
|
|
322
|
+
tag,
|
|
323
|
+
category: 'rgaa',
|
|
324
|
+
displayName: tag.replace('RGAA-', 'RGAA '),
|
|
325
|
+
description: `RGAA criterion ${tag.replace('RGAA-', '')}`,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
// Fallback for unknown tags
|
|
329
|
+
return {
|
|
330
|
+
tag,
|
|
331
|
+
category: 'special',
|
|
332
|
+
displayName: tag,
|
|
333
|
+
description: `Accessibility standard: ${tag}`,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Categorize standards by their family for reporting
|
|
338
|
+
*/
|
|
339
|
+
export function categorizeStandardsByFamily(standards) {
|
|
340
|
+
const categories = {
|
|
341
|
+
wcag: [],
|
|
342
|
+
section508: [],
|
|
343
|
+
en301549: [],
|
|
344
|
+
trustedtester: [],
|
|
345
|
+
rgaa: [],
|
|
346
|
+
category: [],
|
|
347
|
+
special: [],
|
|
348
|
+
};
|
|
349
|
+
for (const standard of standards) {
|
|
350
|
+
const metadata = getStandardMetadata(standard);
|
|
351
|
+
const category = metadata.category;
|
|
352
|
+
if (categories[category]) {
|
|
353
|
+
categories[category].push(standard);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return categories;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Get all unique standard categories from a list of tags
|
|
360
|
+
*/
|
|
361
|
+
export function getStandardCategories(standards) {
|
|
362
|
+
const categories = new Set();
|
|
363
|
+
for (const standard of standards) {
|
|
364
|
+
const metadata = getStandardMetadata(standard);
|
|
365
|
+
categories.add(metadata.category);
|
|
366
|
+
}
|
|
367
|
+
return Array.from(categories);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Format standard tags for display
|
|
371
|
+
*/
|
|
372
|
+
/**
|
|
373
|
+
* Format standards for display with detailed breakdown
|
|
374
|
+
*/
|
|
375
|
+
export function formatStandardsForDisplay(standards) {
|
|
376
|
+
const families = categorizeStandardsByFamily(standards);
|
|
377
|
+
const summary = formatStandardsSummary(standards);
|
|
378
|
+
return {
|
|
379
|
+
summary,
|
|
380
|
+
families
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Format standards as a simple summary string
|
|
385
|
+
*/
|
|
386
|
+
export function formatStandardsSummary(standards) {
|
|
387
|
+
if (standards.length === 0)
|
|
388
|
+
return 'None';
|
|
389
|
+
if (standards.length === 1 && standards[0])
|
|
390
|
+
return getStandardMetadata(standards[0]).displayName;
|
|
391
|
+
const categorized = categorizeStandardsByFamily(standards);
|
|
392
|
+
const parts = [];
|
|
393
|
+
if (categorized.wcag && categorized.wcag.length > 0) {
|
|
394
|
+
parts.push(`WCAG (${categorized.wcag.length} tags)`);
|
|
395
|
+
}
|
|
396
|
+
if (categorized.section508 && categorized.section508.length > 0) {
|
|
397
|
+
parts.push(`Section 508 (${categorized.section508.length} tags)`);
|
|
398
|
+
}
|
|
399
|
+
if (categorized.en301549 && categorized.en301549.length > 0) {
|
|
400
|
+
parts.push(`EN 301 549 (${categorized.en301549.length} tags)`);
|
|
401
|
+
}
|
|
402
|
+
if (categorized.trustedtester && categorized.trustedtester.length > 0) {
|
|
403
|
+
parts.push(`Trusted Tester (${categorized.trustedtester.length} tags)`);
|
|
404
|
+
}
|
|
405
|
+
if (categorized.rgaa && categorized.rgaa.length > 0) {
|
|
406
|
+
parts.push(`RGAA (${categorized.rgaa.length} tags)`);
|
|
407
|
+
}
|
|
408
|
+
if (categorized.category && categorized.category.length > 0) {
|
|
409
|
+
parts.push(`${categorized.category.length} category tags`);
|
|
410
|
+
}
|
|
411
|
+
if (categorized.special && categorized.special.length > 0) {
|
|
412
|
+
parts.push(`${categorized.special.length} other tags`);
|
|
413
|
+
}
|
|
414
|
+
return parts.join(', ');
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=standard-tag-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-tag-metadata.js","sourceRoot":"","sources":["../../src/utils/standard-tag-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BrowserManager } from './browser-manager.js';
|
|
2
|
+
import { AuthContext } from '../types/accessibility.js';
|
|
2
3
|
export interface CrawlOptions {
|
|
3
4
|
/** Maximum number of pages to crawl */
|
|
4
5
|
maxPages?: number;
|
|
@@ -14,6 +15,10 @@ export interface CrawlOptions {
|
|
|
14
15
|
delay?: number;
|
|
15
16
|
/** Whether to stay within the same domain */
|
|
16
17
|
stayOnDomain?: boolean;
|
|
18
|
+
/** Optional list of allowed domains (app + IdP) for authenticated crawls */
|
|
19
|
+
allowedDomains?: string[];
|
|
20
|
+
/** Authentication context to apply before navigation */
|
|
21
|
+
auth?: AuthContext;
|
|
17
22
|
}
|
|
18
23
|
export interface CrawlResult {
|
|
19
24
|
/** Successfully discovered URLs */
|
|
@@ -53,6 +58,11 @@ export declare class WebsiteCrawler {
|
|
|
53
58
|
* Extract links from a page
|
|
54
59
|
*/
|
|
55
60
|
private extractLinks;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a domain is allowed based on the base domain
|
|
63
|
+
* Handles various cases like subdomains, www prefixes, and related domains
|
|
64
|
+
*/
|
|
65
|
+
private isDomainAllowed;
|
|
56
66
|
/**
|
|
57
67
|
* Check if a URL should be excluded based on patterns
|
|
58
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"website-crawler.d.ts","sourceRoot":"","sources":["../../src/utils/website-crawler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"website-crawler.d.ts","sourceRoot":"","sources":["../../src/utils/website-crawler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,oCAAoC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,wDAAwD;IACxD,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gCAAgC;IAChC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;gBAE1C,cAAc,EAAE,cAAc;IAK1C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8FtF;;OAEG;YACW,SAAS;IA8HvB;;OAEG;YACW,YAAY;IAsD1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA0BzB"}
|
|
@@ -30,7 +30,7 @@ export class WebsiteCrawler {
|
|
|
30
30
|
'mailto:',
|
|
31
31
|
'tel:',
|
|
32
32
|
'#'
|
|
33
|
-
], includePatterns = [], delay = 1000, stayOnDomain = true } = options;
|
|
33
|
+
], includePatterns = [], delay = 1000, stayOnDomain = true, allowedDomains = [], auth } = options;
|
|
34
34
|
// Reset state
|
|
35
35
|
this.visited.clear();
|
|
36
36
|
this.discovered.clear();
|
|
@@ -39,6 +39,7 @@ export class WebsiteCrawler {
|
|
|
39
39
|
// Normalize start URL
|
|
40
40
|
const baseUrl = new URL(startUrl);
|
|
41
41
|
const baseDomain = baseUrl.hostname;
|
|
42
|
+
const allowedDomainSet = new Set([...allowedDomains, baseDomain]);
|
|
42
43
|
this.logger.info('Starting website crawl', {
|
|
43
44
|
startUrl,
|
|
44
45
|
maxPages,
|
|
@@ -55,7 +56,9 @@ export class WebsiteCrawler {
|
|
|
55
56
|
delay,
|
|
56
57
|
stayOnDomain,
|
|
57
58
|
respectRobots: options.respectRobots ?? true,
|
|
58
|
-
baseDomain
|
|
59
|
+
baseDomain,
|
|
60
|
+
allowedDomains: Array.from(allowedDomainSet),
|
|
61
|
+
...(auth && { auth })
|
|
59
62
|
};
|
|
60
63
|
await this.crawlPage(startUrl, 0, maxDepth, crawlPageOptions);
|
|
61
64
|
const crawlDuration = Date.now() - startTime;
|
|
@@ -104,12 +107,12 @@ export class WebsiteCrawler {
|
|
|
104
107
|
if (this.shouldExcludeUrl(url, options.excludePatterns, options.includePatterns)) {
|
|
105
108
|
return;
|
|
106
109
|
}
|
|
107
|
-
//
|
|
110
|
+
// Initial domain check (but allow for redirects)
|
|
108
111
|
if (options.stayOnDomain && depth > 0) {
|
|
109
112
|
try {
|
|
110
113
|
const urlObj = new URL(url);
|
|
111
|
-
if (urlObj.hostname
|
|
112
|
-
this.logger.debug('URL rejected due to domain constraint', {
|
|
114
|
+
if (!this.isDomainAllowed(urlObj.hostname, options.baseDomain, options.allowedDomains)) {
|
|
115
|
+
this.logger.debug('URL rejected due to domain constraint (pre-navigation)', {
|
|
113
116
|
url,
|
|
114
117
|
hostname: urlObj.hostname,
|
|
115
118
|
baseDomain: options.baseDomain,
|
|
@@ -131,6 +134,7 @@ export class WebsiteCrawler {
|
|
|
131
134
|
viewport: { width: 1920, height: 1080 },
|
|
132
135
|
timeout: 30000
|
|
133
136
|
});
|
|
137
|
+
await this.browserManager.applyAuthContext(page, url, options.auth);
|
|
134
138
|
// Navigate to the page
|
|
135
139
|
await this.browserManager.navigateToURL(page, url, {
|
|
136
140
|
timeout: 20000,
|
|
@@ -139,9 +143,20 @@ export class WebsiteCrawler {
|
|
|
139
143
|
// Get the final URL after any redirects
|
|
140
144
|
const finalUrl = page.url();
|
|
141
145
|
const finalUrlObj = new URL(finalUrl);
|
|
146
|
+
// Update base domain for root page if this is the first page (depth 0)
|
|
147
|
+
if (depth === 0) {
|
|
148
|
+
if (!options.allowedDomains.includes(finalUrlObj.hostname)) {
|
|
149
|
+
options.allowedDomains.push(finalUrlObj.hostname);
|
|
150
|
+
}
|
|
151
|
+
this.logger.info('Captured domains after initial navigation', {
|
|
152
|
+
originalUrl: url,
|
|
153
|
+
finalUrl,
|
|
154
|
+
allowedDomains: options.allowedDomains
|
|
155
|
+
});
|
|
156
|
+
}
|
|
142
157
|
// Re-check domain constraint with final URL
|
|
143
158
|
if (options.stayOnDomain && depth > 0) {
|
|
144
|
-
if (finalUrlObj.hostname
|
|
159
|
+
if (!this.isDomainAllowed(finalUrlObj.hostname, options.baseDomain, options.allowedDomains)) {
|
|
145
160
|
this.logger.debug('Page rejected due to domain constraint after redirect', {
|
|
146
161
|
finalUrl,
|
|
147
162
|
finalDomain: finalUrlObj.hostname,
|
|
@@ -235,6 +250,25 @@ export class WebsiteCrawler {
|
|
|
235
250
|
return [];
|
|
236
251
|
}
|
|
237
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Check if a domain is allowed based on the base domain
|
|
255
|
+
* Handles various cases like subdomains, www prefixes, and related domains
|
|
256
|
+
*/
|
|
257
|
+
isDomainAllowed(hostname, baseDomain, allowedDomains) {
|
|
258
|
+
const domainsToCheck = new Set([baseDomain, ...allowedDomains]);
|
|
259
|
+
const cleanHostname = hostname.replace(/^www\./, '');
|
|
260
|
+
for (const domain of domainsToCheck) {
|
|
261
|
+
const cleanDomain = domain.replace(/^www\./, '');
|
|
262
|
+
if (cleanHostname === cleanDomain)
|
|
263
|
+
return true;
|
|
264
|
+
if (cleanHostname.endsWith('.' + cleanDomain))
|
|
265
|
+
return true;
|
|
266
|
+
if (cleanDomain.endsWith('.' + cleanHostname))
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
this.logger.debug('Domain not allowed', { hostname, baseDomain, allowedDomains });
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
238
272
|
/**
|
|
239
273
|
* Check if a URL should be excluded based on patterns
|
|
240
274
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"website-crawler.js","sourceRoot":"","sources":["../../src/utils/website-crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"website-crawler.js","sourceRoot":"","sources":["../../src/utils/website-crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAuC1B,MAAM,OAAO,cAAc;IACR,MAAM,CAAS;IACf,cAAc,CAAiB;IAC/B,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,UAAU,GAA0C,EAAE,CAAC;IACvD,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,YAAY,cAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,UAAwB,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EACJ,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,CAAC,EACZ,eAAe,GAAG;YAChB,OAAO;YACP,MAAM;YACN,MAAM;YACN,OAAO;YACP,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,MAAM;YACN,SAAS;YACT,MAAM;YACN,GAAG;SACJ,EACD,eAAe,GAAG,EAAE,EACpB,KAAK,GAAG,IAAI,EACZ,YAAY,GAAG,IAAI,EACnB,cAAc,GAAG,EAAE,EACnB,IAAI,EACL,GAAG,OAAO,CAAC;QAEZ,cAAc;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,sBAAsB;QACtB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;QACpC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACzC,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,gBAAgB,GAAG;gBACvB,QAAQ;gBACR,QAAQ;gBACR,eAAe;gBACf,eAAe;gBACf,KAAK;gBACL,YAAY;gBACZ,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;gBAC5C,UAAU;gBACV,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAC5C,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;aACtB,CAAC;YAEF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAiH,CAAC,CAAC;YAE/J,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE5D,iCAAiC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC1C,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;gBAChC,YAAY,EAAE,IAAI,CAAC,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAChC,QAAQ,EAAE,aAAa;gBACvB,WAAW;aACZ,CAAC,CAAC;YAEH,OAAO;gBACL,IAAI;gBACJ,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;gBAChC,aAAa;gBACb,QAAQ,EAAE;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,WAAW;iBACZ;aACF,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CACrB,GAAW,EACX,KAAa,EACb,QAAgB,EAChB,OAAsG;QAEtG,eAAe;QACf,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACjF,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;oBACvF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE;wBAC1E,GAAG;wBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,KAAK;qBACN,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,cAAc;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE9B,IAAI,IAAI,GAAgB,IAAI,CAAC;QAE7B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;gBAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBACvC,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpE,uBAAuB;YACvB,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE;gBACjD,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,kBAAkB;aAC9B,CAAC,CAAC;YAEH,wCAAwC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEtC,uEAAuE;YACvE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3D,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;oBAC5D,WAAW,EAAE,GAAG;oBAChB,QAAQ;oBACR,cAAc,EAAE,OAAO,CAAC,cAAc;iBACvC,CAAC,CAAC;YACL,CAAC;YAED,4CAA4C;YAC5C,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;wBACzE,QAAQ;wBACR,WAAW,EAAE,WAAW,CAAC,QAAQ;wBACjC,UAAU,EAAE,OAAO,CAAC,UAAU;qBAC/B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,gBAAgB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YAElF,6BAA6B;YAC7B,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,CAAC;YAED,qCAAqC;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC7C,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;oBACjD,IAAI;oBACJ,KAAK,EAAE,KAAK,GAAG,CAAC;oBAChB,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;iBACxC,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,IAAU,EAAE,OAAe;QACpD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEtE,MAAM,KAAK,GAAG,YAAY;qBACvB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;qBACtC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE;oBAC/B,IAAI,CAAC,IAAI;wBAAE,OAAO,KAAK,CAAC;oBACxB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACjD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACvC,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEL,MAAM,YAAY,GAAG,KAAK;qBACvB,GAAG,CAAC,IAAI,CAAC,EAAE;oBACV,IAAI,CAAC;wBACH,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;oBACrC,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC;qBACD,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;gBAEhD,qCAAqC;gBACrC,OAAO;oBACL,aAAa,EAAE,YAAY,CAAC,MAAM;oBAClC,aAAa,EAAE,KAAK,CAAC,MAAM;oBAC3B,YAAY,EAAE,YAAY,CAAC,MAAM;oBACjC,KAAK,EAAE,YAAY;iBACpB,CAAC;YACJ,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC1C,OAAO;gBACP,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACrC,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAE9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,mCAAmC,CAAC,CAAC;YAEjF,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/E,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,QAAgB,EAAE,UAAkB,EAAE,cAAwB;QACpF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAErD,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,aAAa,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC/C,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3D,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QAClF,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,GAAW,EACX,eAAyB,EACzB,eAAyB;QAEzB,iEAAiE;QACjE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC7C,IAAI,CAAC;oBACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;QAC5B,CAAC;QAED,yBAAyB;QACzB,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACpC,IAAI,CAAC;gBACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|