@navinjoseph/web-perf-core 1.0.0-beta.3

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.
Files changed (77) hide show
  1. package/dist/audits/accessibility.d.ts +10 -0
  2. package/dist/audits/accessibility.d.ts.map +1 -0
  3. package/dist/audits/accessibility.js +258 -0
  4. package/dist/audits/accessibility.js.map +1 -0
  5. package/dist/audits/best-practices.d.ts +10 -0
  6. package/dist/audits/best-practices.d.ts.map +1 -0
  7. package/dist/audits/best-practices.js +696 -0
  8. package/dist/audits/best-practices.js.map +1 -0
  9. package/dist/audits/constants.d.ts +8 -0
  10. package/dist/audits/constants.d.ts.map +1 -0
  11. package/dist/audits/constants.js +278 -0
  12. package/dist/audits/constants.js.map +1 -0
  13. package/dist/audits/performance.d.ts +11 -0
  14. package/dist/audits/performance.d.ts.map +1 -0
  15. package/dist/audits/performance.js +497 -0
  16. package/dist/audits/performance.js.map +1 -0
  17. package/dist/audits/pwa.d.ts +10 -0
  18. package/dist/audits/pwa.d.ts.map +1 -0
  19. package/dist/audits/pwa.js +396 -0
  20. package/dist/audits/pwa.js.map +1 -0
  21. package/dist/audits/security.d.ts +10 -0
  22. package/dist/audits/security.d.ts.map +1 -0
  23. package/dist/audits/security.js +249 -0
  24. package/dist/audits/security.js.map +1 -0
  25. package/dist/audits/seo.d.ts +10 -0
  26. package/dist/audits/seo.d.ts.map +1 -0
  27. package/dist/audits/seo.js +471 -0
  28. package/dist/audits/seo.js.map +1 -0
  29. package/dist/browser.d.ts +21 -0
  30. package/dist/browser.d.ts.map +1 -0
  31. package/dist/browser.js +178 -0
  32. package/dist/browser.js.map +1 -0
  33. package/dist/dom-collector.d.ts +45 -0
  34. package/dist/dom-collector.d.ts.map +1 -0
  35. package/dist/dom-collector.js +173 -0
  36. package/dist/dom-collector.js.map +1 -0
  37. package/dist/formatter.d.ts +60 -0
  38. package/dist/formatter.d.ts.map +1 -0
  39. package/dist/formatter.js +164 -0
  40. package/dist/formatter.js.map +1 -0
  41. package/dist/id-generator.d.ts +22 -0
  42. package/dist/id-generator.d.ts.map +1 -0
  43. package/dist/id-generator.js +29 -0
  44. package/dist/id-generator.js.map +1 -0
  45. package/dist/index.d.ts +17 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +23 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/orchestrator.d.ts +41 -0
  50. package/dist/orchestrator.d.ts.map +1 -0
  51. package/dist/orchestrator.js +194 -0
  52. package/dist/orchestrator.js.map +1 -0
  53. package/dist/reporters/html.d.ts +6 -0
  54. package/dist/reporters/html.d.ts.map +1 -0
  55. package/dist/reporters/html.js +688 -0
  56. package/dist/reporters/html.js.map +1 -0
  57. package/dist/reporters/index.d.ts +4 -0
  58. package/dist/reporters/index.d.ts.map +1 -0
  59. package/dist/reporters/index.js +17 -0
  60. package/dist/reporters/index.js.map +1 -0
  61. package/dist/reporters/json.d.ts +6 -0
  62. package/dist/reporters/json.d.ts.map +1 -0
  63. package/dist/reporters/json.js +7 -0
  64. package/dist/reporters/json.js.map +1 -0
  65. package/dist/reporters/terminal.d.ts +6 -0
  66. package/dist/reporters/terminal.d.ts.map +1 -0
  67. package/dist/reporters/terminal.js +180 -0
  68. package/dist/reporters/terminal.js.map +1 -0
  69. package/dist/reporters/types.d.ts +2 -0
  70. package/dist/reporters/types.d.ts.map +1 -0
  71. package/dist/reporters/types.js +2 -0
  72. package/dist/reporters/types.js.map +1 -0
  73. package/dist/types.d.ts +80 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +36 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/audits/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Issue, PendingCheck } from "../types.js";
2
+ import { BrowserPage } from "../browser.js";
3
+ /**
4
+ * Run SEO audit
5
+ */
6
+ export declare function auditSEO(page: BrowserPage): Promise<{
7
+ issues: Issue[];
8
+ passed: PendingCheck[];
9
+ }>;
10
+ //# sourceMappingURL=seo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/audits/seo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgZ5C;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC,CA0GD"}
@@ -0,0 +1,471 @@
1
+ function checkTitle(page) {
2
+ const titleEl = page.document.querySelector("title");
3
+ const title = titleEl?.textContent?.trim() || "";
4
+ const length = title.length;
5
+ if (!titleEl || !title) {
6
+ return {
7
+ id: `seo-title-missing-${Date.now()}`,
8
+ ruleId: "seo-title-missing",
9
+ severity: "critical",
10
+ category: "document",
11
+ message: "Page is missing a title tag",
12
+ description: "Every page should have a unique, descriptive title tag for SEO and accessibility",
13
+ helpUrl: "https://developers.google.com/search/docs/appearance/title-link",
14
+ wcag: {
15
+ id: "2.4.2",
16
+ level: "A",
17
+ name: "Page Titled",
18
+ description: "Web pages have titles",
19
+ },
20
+ element: {
21
+ selector: "head",
22
+ html: "<head>...</head>",
23
+ failureSummary: "No title tag found",
24
+ },
25
+ fix: {
26
+ description: "Add a descriptive title tag within the <head> section",
27
+ code: "<title>Your Page Title Here (50-60 characters)</title>",
28
+ learnMoreUrl: "https://developers.google.com/search/docs/appearance/title-link",
29
+ },
30
+ };
31
+ }
32
+ if (length < 30 || length > 60) {
33
+ return {
34
+ id: `seo-title-length-${Date.now()}`,
35
+ ruleId: "seo-title-length",
36
+ severity: "moderate",
37
+ category: "document",
38
+ message: `Title length is ${length} characters (recommended: 50-60)`,
39
+ description: "Page titles should be between 50-60 characters for optimal display",
40
+ helpUrl: "https://developers.google.com/search/docs/appearance/title-link",
41
+ wcag: {
42
+ id: "2.4.2",
43
+ level: "A",
44
+ name: "Page Titled",
45
+ description: "Titles describe topic or purpose",
46
+ },
47
+ element: {
48
+ selector: "title",
49
+ html: titleEl.outerHTML,
50
+ failureSummary: `Title is ${length} chars`,
51
+ },
52
+ fix: {
53
+ description: "Adjust your title to be between 50-60 characters for better SEO",
54
+ code: `<title>${title.substring(0, 60)}...</title>`,
55
+ learnMoreUrl: "https://developers.google.com/search/docs/appearance/title-link",
56
+ },
57
+ };
58
+ }
59
+ return null;
60
+ }
61
+ function checkMetaDescription(page) {
62
+ const meta = page.document.querySelector('meta[name="description"]');
63
+ const content = meta?.getAttribute("content")?.trim() || "";
64
+ const length = content.length;
65
+ if (!meta || !content) {
66
+ return {
67
+ id: `seo-meta-desc-missing-${Date.now()}`,
68
+ ruleId: "seo-meta-desc-missing",
69
+ severity: "serious",
70
+ category: "document",
71
+ message: "Page is missing a meta description",
72
+ description: "Meta descriptions help search engines understand page content",
73
+ helpUrl: "https://developers.google.com/search/docs/appearance/snippet",
74
+ wcag: {
75
+ id: "2.4.2",
76
+ level: "A",
77
+ name: "Page Titled",
78
+ description: "Pages are properly described",
79
+ },
80
+ element: {
81
+ selector: "head",
82
+ html: "<head>...</head>",
83
+ failureSummary: "No meta description",
84
+ },
85
+ fix: {
86
+ description: "Add a meta description tag within the <head> section",
87
+ code: '<meta name="description" content="A compelling description (150-160 characters)">',
88
+ learnMoreUrl: "https://developers.google.com/search/docs/appearance/snippet",
89
+ },
90
+ };
91
+ }
92
+ if (length < 120 || length > 160) {
93
+ return {
94
+ id: `seo-meta-desc-length-${Date.now()}`,
95
+ ruleId: "seo-meta-desc-length",
96
+ severity: "moderate",
97
+ category: "document",
98
+ message: `Meta description is ${length} characters (recommended: 150-160)`,
99
+ description: "Meta descriptions should be between 150-160 characters",
100
+ helpUrl: "https://developers.google.com/search/docs/appearance/snippet",
101
+ wcag: {
102
+ id: "2.4.2",
103
+ level: "A",
104
+ name: "Page Titled",
105
+ description: "Descriptions are available",
106
+ },
107
+ element: {
108
+ selector: 'meta[name="description"]',
109
+ html: meta.outerHTML,
110
+ failureSummary: `Description is ${length} chars`,
111
+ },
112
+ fix: {
113
+ description: "Adjust your meta description to be between 150-160 characters",
114
+ code: `<meta name="description" content="${content.substring(0, 160)}...">`,
115
+ learnMoreUrl: "https://developers.google.com/search/docs/appearance/snippet",
116
+ },
117
+ };
118
+ }
119
+ return null;
120
+ }
121
+ function checkH1(page) {
122
+ const h1s = page.document.querySelectorAll("h1");
123
+ const issues = [];
124
+ if (h1s.length === 0) {
125
+ issues.push({
126
+ id: `seo-h1-missing-${Date.now()}`,
127
+ ruleId: "seo-h1-missing",
128
+ severity: "serious",
129
+ category: "structure",
130
+ message: "Page is missing an H1 heading",
131
+ description: "Every page should have exactly one H1 heading",
132
+ helpUrl: "https://developers.google.com/search/docs",
133
+ wcag: {
134
+ id: "1.3.1",
135
+ level: "A",
136
+ name: "Info and Relationships",
137
+ description: "Structure is clear",
138
+ },
139
+ element: {
140
+ selector: "body",
141
+ html: "<body>...</body>",
142
+ failureSummary: "No H1 found",
143
+ },
144
+ fix: {
145
+ description: "Add a single H1 heading that describes your page content",
146
+ code: "<h1>Your Main Page Heading</h1>",
147
+ learnMoreUrl: "https://developers.google.com/search/docs",
148
+ },
149
+ });
150
+ }
151
+ else if (h1s.length > 1) {
152
+ issues.push({
153
+ id: `seo-h1-multiple-${Date.now()}`,
154
+ ruleId: "seo-h1-multiple",
155
+ severity: "moderate",
156
+ category: "structure",
157
+ message: `Page has ${h1s.length} H1 headings (should have exactly 1)`,
158
+ description: "Multiple H1 headings can confuse search engines",
159
+ helpUrl: "https://developers.google.com/search/docs",
160
+ wcag: {
161
+ id: "1.3.1",
162
+ level: "A",
163
+ name: "Info and Relationships",
164
+ description: "Structure is clear",
165
+ },
166
+ element: {
167
+ selector: "h1",
168
+ html: h1s[0].outerHTML,
169
+ failureSummary: `${h1s.length} H1 headings found`,
170
+ },
171
+ fix: {
172
+ description: "Keep only one H1 heading and convert others to H2 or lower",
173
+ code: "<h1>Main Heading</h1>\n<h2>Subheading 1</h2>\n<h2>Subheading 2</h2>",
174
+ learnMoreUrl: "https://developers.google.com/search/docs",
175
+ },
176
+ });
177
+ }
178
+ return issues;
179
+ }
180
+ function checkViewport(page) {
181
+ const viewport = page.document.querySelector('meta[name="viewport"]');
182
+ if (!viewport) {
183
+ return {
184
+ id: `seo-viewport-missing-${Date.now()}`,
185
+ ruleId: "seo-viewport-missing",
186
+ severity: "serious",
187
+ category: "document",
188
+ message: "Page is missing a viewport meta tag",
189
+ description: "Viewport meta tag is essential for mobile-friendliness",
190
+ helpUrl: "https://developers.google.com/search/docs",
191
+ wcag: {
192
+ id: "1.4.4",
193
+ level: "AA",
194
+ name: "Resize Text",
195
+ description: "Users can zoom",
196
+ },
197
+ element: {
198
+ selector: "head",
199
+ html: "<head>...</head>",
200
+ failureSummary: "No viewport tag",
201
+ },
202
+ fix: {
203
+ description: "Add a viewport meta tag for mobile optimization",
204
+ code: '<meta name="viewport" content="width=device-width, initial-scale=1">',
205
+ learnMoreUrl: "https://developers.google.com/search/docs",
206
+ },
207
+ };
208
+ }
209
+ return null;
210
+ }
211
+ function checkHTTPS(page) {
212
+ if (!page.url.startsWith("https://")) {
213
+ return {
214
+ id: `seo-https-${Date.now()}`,
215
+ ruleId: "seo-https",
216
+ severity: "critical",
217
+ category: "technical",
218
+ message: "Page is not served over HTTPS",
219
+ description: "HTTPS is a ranking factor and essential for security",
220
+ helpUrl: "https://developers.google.com/search/docs",
221
+ wcag: {
222
+ id: "4.1.1",
223
+ level: "A",
224
+ name: "Parsing",
225
+ description: "Security is maintained",
226
+ },
227
+ element: {
228
+ selector: "body",
229
+ html: "<body>...</body>",
230
+ failureSummary: `URL: ${page.url}`,
231
+ },
232
+ fix: {
233
+ description: "Enable HTTPS on your server",
234
+ code: "RewriteEngine On\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]",
235
+ learnMoreUrl: "https://developers.google.com/search/docs",
236
+ },
237
+ };
238
+ }
239
+ return null;
240
+ }
241
+ function checkCanonical(page) {
242
+ const canonical = page.document.querySelector('link[rel="canonical"]');
243
+ if (!canonical) {
244
+ return {
245
+ id: `seo-canonical-missing-${Date.now()}`,
246
+ ruleId: "seo-canonical-missing",
247
+ severity: "moderate",
248
+ category: "document",
249
+ message: "Page is missing a canonical URL",
250
+ description: "Canonical URLs help prevent duplicate content issues",
251
+ helpUrl: "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
252
+ wcag: {
253
+ id: "4.1.1",
254
+ level: "A",
255
+ name: "Parsing",
256
+ description: "URLs are unique",
257
+ },
258
+ element: {
259
+ selector: "head",
260
+ html: "<head>...</head>",
261
+ failureSummary: "No canonical link",
262
+ },
263
+ fix: {
264
+ description: "Add a canonical link tag to specify the preferred URL",
265
+ code: `<link rel="canonical" href="${page.url}">`,
266
+ learnMoreUrl: "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
267
+ },
268
+ };
269
+ }
270
+ return null;
271
+ }
272
+ function checkOpenGraph(page) {
273
+ const issues = [];
274
+ const ogTitle = page.document.querySelector('meta[property="og:title"]');
275
+ const ogImage = page.document.querySelector('meta[property="og:image"]');
276
+ if (!ogTitle) {
277
+ issues.push({
278
+ id: `seo-og-title-${Date.now()}`,
279
+ ruleId: "seo-og-title",
280
+ severity: "moderate",
281
+ category: "document",
282
+ message: "Missing Open Graph title",
283
+ description: "Open Graph tags improve how page appears when shared",
284
+ helpUrl: "https://ogp.me/",
285
+ wcag: {
286
+ id: "2.4.2",
287
+ level: "A",
288
+ name: "Page Titled",
289
+ description: "Pages are titled",
290
+ },
291
+ element: {
292
+ selector: "head",
293
+ html: "<head>...</head>",
294
+ failureSummary: "No og:title",
295
+ },
296
+ fix: {
297
+ description: "Add Open Graph meta tags for better social sharing",
298
+ code: '<meta property="og:title" content="Your Page Title">\n<meta property="og:image" content="https://example.com/image.jpg">',
299
+ learnMoreUrl: "https://ogp.me/",
300
+ },
301
+ });
302
+ }
303
+ if (!ogImage) {
304
+ issues.push({
305
+ id: `seo-og-image-${Date.now()}`,
306
+ ruleId: "seo-og-image",
307
+ severity: "moderate",
308
+ category: "document",
309
+ message: "Missing Open Graph image",
310
+ description: "og:image ensures preview image displays when shared",
311
+ helpUrl: "https://ogp.me/",
312
+ wcag: {
313
+ id: "1.1.1",
314
+ level: "A",
315
+ name: "Non-text Content",
316
+ description: "Images have alternatives",
317
+ },
318
+ element: {
319
+ selector: "head",
320
+ html: "<head>...</head>",
321
+ failureSummary: "No og:image",
322
+ },
323
+ fix: {
324
+ description: "Add an Open Graph image tag",
325
+ code: '<meta property="og:image" content="https://example.com/image.jpg">',
326
+ learnMoreUrl: "https://ogp.me/",
327
+ },
328
+ });
329
+ }
330
+ return issues;
331
+ }
332
+ function checkStructuredData(page) {
333
+ const schema = page.document.querySelector('script[type="application/ld+json"]');
334
+ if (!schema) {
335
+ return {
336
+ id: `seo-schema-missing-${Date.now()}`,
337
+ ruleId: "seo-schema-missing",
338
+ severity: "moderate",
339
+ category: "document",
340
+ message: "Page has no structured data (Schema.org)",
341
+ description: "Structured data helps search engines understand content",
342
+ helpUrl: "https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data",
343
+ wcag: {
344
+ id: "4.1.2",
345
+ level: "A",
346
+ name: "Name, Role, Value",
347
+ description: "Metadata is available",
348
+ },
349
+ element: {
350
+ selector: "head",
351
+ html: "<head>...</head>",
352
+ failureSummary: "No structured data",
353
+ },
354
+ fix: {
355
+ description: "Add Schema.org structured data using JSON-LD format",
356
+ code: '<script type="application/ld+json">\n{\n "@context": "https://schema.org",\n "@type": "WebPage",\n "name": "Your Page Name",\n "description": "Your page description"\n}\n</script>',
357
+ learnMoreUrl: "https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data",
358
+ },
359
+ };
360
+ }
361
+ return null;
362
+ }
363
+ /**
364
+ * Run SEO audit
365
+ */
366
+ export async function auditSEO(page) {
367
+ const issues = [];
368
+ const passed = [];
369
+ // Check title tag
370
+ const titleCheck = checkTitle(page);
371
+ if (titleCheck) {
372
+ issues.push(titleCheck);
373
+ }
374
+ else {
375
+ passed.push({
376
+ id: "seo-title",
377
+ name: "Page Title",
378
+ category: "document",
379
+ description: "Title is present and properly sized",
380
+ });
381
+ }
382
+ // Check meta description
383
+ const metaDescCheck = checkMetaDescription(page);
384
+ if (metaDescCheck) {
385
+ issues.push(metaDescCheck);
386
+ }
387
+ else {
388
+ passed.push({
389
+ id: "seo-meta-desc",
390
+ name: "Meta Description",
391
+ category: "document",
392
+ description: "Meta description is present and properly sized",
393
+ });
394
+ }
395
+ // Check H1
396
+ const h1Check = checkH1(page);
397
+ h1Check.forEach((issue) => issues.push(issue));
398
+ if (h1Check.length === 0) {
399
+ passed.push({
400
+ id: "seo-h1",
401
+ name: "H1 Heading",
402
+ category: "structure",
403
+ description: "Page has exactly one H1 heading",
404
+ });
405
+ }
406
+ // Check viewport
407
+ const viewportCheck = checkViewport(page);
408
+ if (viewportCheck) {
409
+ issues.push(viewportCheck);
410
+ }
411
+ else {
412
+ passed.push({
413
+ id: "seo-viewport",
414
+ name: "Viewport Meta Tag",
415
+ category: "document",
416
+ description: "Viewport meta tag is present",
417
+ });
418
+ }
419
+ // Check HTTPS
420
+ const httpsCheck = checkHTTPS(page);
421
+ if (httpsCheck) {
422
+ issues.push(httpsCheck);
423
+ }
424
+ else {
425
+ passed.push({
426
+ id: "seo-https",
427
+ name: "HTTPS Protocol",
428
+ category: "technical",
429
+ description: "Page is served over HTTPS",
430
+ });
431
+ }
432
+ // Check canonical
433
+ const canonicalCheck = checkCanonical(page);
434
+ if (canonicalCheck) {
435
+ issues.push(canonicalCheck);
436
+ }
437
+ else {
438
+ passed.push({
439
+ id: "seo-canonical",
440
+ name: "Canonical URL",
441
+ category: "document",
442
+ description: "Canonical URL is present",
443
+ });
444
+ }
445
+ // Check Open Graph
446
+ const ogChecks = checkOpenGraph(page);
447
+ ogChecks.forEach((issue) => issues.push(issue));
448
+ if (ogChecks.length === 0) {
449
+ passed.push({
450
+ id: "seo-og",
451
+ name: "Open Graph Tags",
452
+ category: "document",
453
+ description: "Open Graph tags are present",
454
+ });
455
+ }
456
+ // Check structured data
457
+ const schemaCheck = checkStructuredData(page);
458
+ if (schemaCheck) {
459
+ issues.push(schemaCheck);
460
+ }
461
+ else {
462
+ passed.push({
463
+ id: "seo-schema",
464
+ name: "Structured Data",
465
+ category: "document",
466
+ description: "Structured data is present",
467
+ });
468
+ }
469
+ return { issues, passed };
470
+ }
471
+ //# sourceMappingURL=seo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/audits/seo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { DOMWindow } from "jsdom";
2
+ export type BrowserPage = {
3
+ document: Document;
4
+ window: DOMWindow;
5
+ html: string;
6
+ url: string;
7
+ };
8
+ /**
9
+ * Load a URL using jsdom with Shadow DOM support
10
+ */
11
+ export declare function loadPage(url: string, options?: {
12
+ timeout?: number;
13
+ maxSize?: number;
14
+ allowJs?: boolean;
15
+ }): Promise<BrowserPage>;
16
+ /**
17
+ * Get all elements including shadow DOM
18
+ */
19
+ export declare function getAllElements(element: Element): Element[];
20
+ export declare function buildSelector(element: Element): string;
21
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAkB,MAAM,OAAO,CAAC;AAGzD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC,WAAW,CAAC,CAmFtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,CAgB1D;AA2ED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAqBtD"}