@supernal/interface 1.0.9 → 1.0.11
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/cjs/src/browser.js +42 -1
- package/dist/cjs/src/browser.js.map +1 -1
- package/dist/cjs/src/decorators/ContainerHelpers.js +16 -1
- package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -1
- package/dist/cjs/src/decorators/Tool.js +2 -3
- package/dist/cjs/src/decorators/Tool.js.map +1 -1
- package/dist/cjs/src/testing/graph-tester/core/GraphTester.js +339 -0
- package/dist/cjs/src/testing/graph-tester/core/GraphTester.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/core/TestFunction.js +189 -0
- package/dist/cjs/src/testing/graph-tester/core/TestFunction.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/core/types.js +24 -0
- package/dist/cjs/src/testing/graph-tester/core/types.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/index.js +13 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js +184 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/index.js +98 -0
- package/dist/cjs/src/testing/graph-tester/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js +230 -0
- package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js +168 -0
- package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js +264 -0
- package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js +199 -0
- package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/index.js +17 -0
- package/dist/cjs/src/testing/graph-tester/modes/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js +411 -0
- package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js +127 -0
- package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js +169 -0
- package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js +118 -0
- package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/index.js +17 -0
- package/dist/cjs/src/testing/graph-tester/reporters/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +47 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +584 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +376 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/index.js +15 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/types.js +11 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/types.js.map +1 -0
- package/dist/cjs/src/testing/selectors.js +1 -1
- package/dist/esm/src/browser.d.ts +9 -0
- package/dist/esm/src/browser.d.ts.map +1 -1
- package/dist/esm/src/browser.js +14 -0
- package/dist/esm/src/browser.js.map +1 -1
- package/dist/esm/src/decorators/ContainerHelpers.d.ts +2 -1
- package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -1
- package/dist/esm/src/decorators/ContainerHelpers.js +16 -1
- package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -1
- package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
- package/dist/esm/src/decorators/Tool.js +2 -3
- package/dist/esm/src/decorators/Tool.js.map +1 -1
- package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts +110 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.js +335 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts +120 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.js +184 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/types.d.ts +331 -0
- package/dist/esm/src/testing/graph-tester/core/types.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/types.js +21 -0
- package/dist/esm/src/testing/graph-tester/core/types.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts +8 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.js +7 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts +40 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.js +147 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/index.d.ts +84 -0
- package/dist/esm/src/testing/graph-tester/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/index.js +77 -0
- package/dist/esm/src/testing/graph-tester/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts +40 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js +193 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts +42 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js +131 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts +39 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.js +227 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts +83 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js +162 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/index.d.ts +14 -0
- package/dist/esm/src/testing/graph-tester/modes/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/index.js +10 -0
- package/dist/esm/src/testing/graph-tester/modes/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts +38 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js +374 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts +50 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js +90 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts +33 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js +132 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts +30 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js +81 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.d.ts +14 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.js +10 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts +33 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +43 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts +70 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +547 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts +83 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +339 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts +11 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.js +9 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts +331 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.js +10 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.js.map +1 -0
- package/dist/esm/src/testing/selectors.d.ts +1 -1
- package/dist/esm/src/testing/selectors.js +1 -1
- package/package.json +19 -6
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for all test functions.
|
|
3
|
+
*
|
|
4
|
+
* Test functions implement specific testing modes (visual regression, performance, accessibility, etc.).
|
|
5
|
+
* Each test function:
|
|
6
|
+
* 1. Receives a Playwright page and test context
|
|
7
|
+
* 2. Performs its testing logic
|
|
8
|
+
* 3. Returns a TestResult with pass/fail status and metadata
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
import type { Page } from '@playwright/test';
|
|
13
|
+
import type { TestContext, TestResult, TestMode } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* Abstract base class for test functions.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* class VisualRegressionMode extends TestFunction {
|
|
20
|
+
* mode = 'visual';
|
|
21
|
+
*
|
|
22
|
+
* async execute(page: Page, context: TestContext): Promise<TestResult> {
|
|
23
|
+
* const startTime = Date.now();
|
|
24
|
+
* const screenshot = await page.screenshot({ fullPage: true });
|
|
25
|
+
*
|
|
26
|
+
* return {
|
|
27
|
+
* passed: true,
|
|
28
|
+
* duration: Date.now() - startTime,
|
|
29
|
+
* errors: [],
|
|
30
|
+
* metadata: {
|
|
31
|
+
* screenshot,
|
|
32
|
+
* screenshotPath: './screenshots/example.png'
|
|
33
|
+
* }
|
|
34
|
+
* };
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare abstract class TestFunction {
|
|
40
|
+
/**
|
|
41
|
+
* Test mode identifier.
|
|
42
|
+
* Must be unique across all test functions.
|
|
43
|
+
*/
|
|
44
|
+
abstract readonly mode: TestMode;
|
|
45
|
+
/**
|
|
46
|
+
* Human-readable name for this test function.
|
|
47
|
+
*/
|
|
48
|
+
abstract readonly name: string;
|
|
49
|
+
/**
|
|
50
|
+
* Description of what this test function does.
|
|
51
|
+
*/
|
|
52
|
+
abstract readonly description: string;
|
|
53
|
+
/**
|
|
54
|
+
* Execute the test function.
|
|
55
|
+
*
|
|
56
|
+
* @param page - Playwright page instance
|
|
57
|
+
* @param context - Test context (route, metadata)
|
|
58
|
+
* @returns Test result with pass/fail status and metadata
|
|
59
|
+
*/
|
|
60
|
+
abstract execute(page: Page, context: TestContext): Promise<TestResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Optional setup hook called before execute().
|
|
63
|
+
* Use for initialization that should happen once per route.
|
|
64
|
+
*
|
|
65
|
+
* @param page - Playwright page instance
|
|
66
|
+
*/
|
|
67
|
+
setup?(page: Page): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Optional teardown hook called after execute().
|
|
70
|
+
* Use for cleanup that should happen once per route.
|
|
71
|
+
*
|
|
72
|
+
* @param page - Playwright page instance
|
|
73
|
+
*/
|
|
74
|
+
teardown?(page: Page): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Optional predicate to determine if this test should run for a given context.
|
|
77
|
+
* Return false to skip testing this route with this test function.
|
|
78
|
+
*
|
|
79
|
+
* @param context - Test context
|
|
80
|
+
* @returns Whether to test this route
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* // Only test authenticated routes
|
|
85
|
+
* shouldTest(context: TestContext): boolean {
|
|
86
|
+
* return context.metadata?.requiresAuth === true;
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
shouldTest?(context: TestContext): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Execute the full test lifecycle: setup, execute, teardown.
|
|
93
|
+
* This method handles the orchestration and error handling.
|
|
94
|
+
*
|
|
95
|
+
* @param page - Playwright page instance
|
|
96
|
+
* @param context - Test context
|
|
97
|
+
* @returns Test result
|
|
98
|
+
*/
|
|
99
|
+
run(page: Page, context: TestContext): Promise<TestResult>;
|
|
100
|
+
/**
|
|
101
|
+
* Validate test function configuration.
|
|
102
|
+
* Override to add custom validation logic.
|
|
103
|
+
*
|
|
104
|
+
* @returns Array of validation errors (empty if valid)
|
|
105
|
+
*/
|
|
106
|
+
validate(): string[];
|
|
107
|
+
/**
|
|
108
|
+
* Get test function info for reporting.
|
|
109
|
+
*/
|
|
110
|
+
getInfo(): {
|
|
111
|
+
mode: TestMode;
|
|
112
|
+
name: string;
|
|
113
|
+
description: string;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Type guard to check if an object is a TestFunction.
|
|
118
|
+
*/
|
|
119
|
+
export declare function isTestFunction(obj: any): obj is TestFunction;
|
|
120
|
+
//# sourceMappingURL=TestFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestFunction.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/core/TestFunction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EAIT,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,8BAAsB,YAAY;IAChC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAEtC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAEvE;;;;;OAKG;IACG,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvC;;;;;OAKG;IACG,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1C;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAE1C;;;;;;;OAOG;IACG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAqGhE;;;;;OAKG;IACH,QAAQ,IAAI,MAAM,EAAE;IAkBpB;;OAEG;IACH,OAAO,IAAI;QACT,IAAI,EAAE,QAAQ,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB;CAOF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,YAAY,CAS5D"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for all test functions.
|
|
3
|
+
*
|
|
4
|
+
* Test functions implement specific testing modes (visual regression, performance, accessibility, etc.).
|
|
5
|
+
* Each test function:
|
|
6
|
+
* 1. Receives a Playwright page and test context
|
|
7
|
+
* 2. Performs its testing logic
|
|
8
|
+
* 3. Returns a TestResult with pass/fail status and metadata
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Abstract base class for test functions.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* class VisualRegressionMode extends TestFunction {
|
|
18
|
+
* mode = 'visual';
|
|
19
|
+
*
|
|
20
|
+
* async execute(page: Page, context: TestContext): Promise<TestResult> {
|
|
21
|
+
* const startTime = Date.now();
|
|
22
|
+
* const screenshot = await page.screenshot({ fullPage: true });
|
|
23
|
+
*
|
|
24
|
+
* return {
|
|
25
|
+
* passed: true,
|
|
26
|
+
* duration: Date.now() - startTime,
|
|
27
|
+
* errors: [],
|
|
28
|
+
* metadata: {
|
|
29
|
+
* screenshot,
|
|
30
|
+
* screenshotPath: './screenshots/example.png'
|
|
31
|
+
* }
|
|
32
|
+
* };
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export class TestFunction {
|
|
38
|
+
/**
|
|
39
|
+
* Execute the full test lifecycle: setup, execute, teardown.
|
|
40
|
+
* This method handles the orchestration and error handling.
|
|
41
|
+
*
|
|
42
|
+
* @param page - Playwright page instance
|
|
43
|
+
* @param context - Test context
|
|
44
|
+
* @returns Test result
|
|
45
|
+
*/
|
|
46
|
+
async run(page, context) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
const errors = [];
|
|
49
|
+
try {
|
|
50
|
+
// Check if we should test this route
|
|
51
|
+
if (this.shouldTest && !this.shouldTest(context)) {
|
|
52
|
+
return {
|
|
53
|
+
passed: true,
|
|
54
|
+
duration: Date.now() - startTime,
|
|
55
|
+
errors: [],
|
|
56
|
+
metadata: {
|
|
57
|
+
skipped: true,
|
|
58
|
+
reason: 'Skipped by shouldTest() predicate',
|
|
59
|
+
},
|
|
60
|
+
mode: this.mode,
|
|
61
|
+
route: context.route,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Setup
|
|
65
|
+
if (this.setup) {
|
|
66
|
+
try {
|
|
67
|
+
await this.setup(page);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
errors.push({
|
|
71
|
+
severity: 'critical',
|
|
72
|
+
message: `Setup failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
73
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
passed: false,
|
|
77
|
+
duration: Date.now() - startTime,
|
|
78
|
+
errors,
|
|
79
|
+
metadata: {},
|
|
80
|
+
mode: this.mode,
|
|
81
|
+
route: context.route,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Execute
|
|
86
|
+
let result;
|
|
87
|
+
try {
|
|
88
|
+
result = await this.execute(page, context);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
errors.push({
|
|
92
|
+
severity: 'critical',
|
|
93
|
+
message: `Execution failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
94
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
95
|
+
});
|
|
96
|
+
result = {
|
|
97
|
+
passed: false,
|
|
98
|
+
duration: Date.now() - startTime,
|
|
99
|
+
errors,
|
|
100
|
+
metadata: {},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Teardown
|
|
104
|
+
if (this.teardown) {
|
|
105
|
+
try {
|
|
106
|
+
await this.teardown(page);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
errors.push({
|
|
110
|
+
severity: 'warning',
|
|
111
|
+
message: `Teardown failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
112
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Merge errors and add metadata
|
|
117
|
+
return {
|
|
118
|
+
...result,
|
|
119
|
+
errors: [...errors, ...result.errors],
|
|
120
|
+
mode: this.mode,
|
|
121
|
+
route: context.route,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
// Catch-all for unexpected errors
|
|
126
|
+
return {
|
|
127
|
+
passed: false,
|
|
128
|
+
duration: Date.now() - startTime,
|
|
129
|
+
errors: [
|
|
130
|
+
...errors,
|
|
131
|
+
{
|
|
132
|
+
severity: 'critical',
|
|
133
|
+
message: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`,
|
|
134
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
metadata: {},
|
|
138
|
+
mode: this.mode,
|
|
139
|
+
route: context.route,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate test function configuration.
|
|
145
|
+
* Override to add custom validation logic.
|
|
146
|
+
*
|
|
147
|
+
* @returns Array of validation errors (empty if valid)
|
|
148
|
+
*/
|
|
149
|
+
validate() {
|
|
150
|
+
const errors = [];
|
|
151
|
+
if (!this.mode) {
|
|
152
|
+
errors.push('mode is required');
|
|
153
|
+
}
|
|
154
|
+
if (!this.name) {
|
|
155
|
+
errors.push('name is required');
|
|
156
|
+
}
|
|
157
|
+
if (!this.description) {
|
|
158
|
+
errors.push('description is required');
|
|
159
|
+
}
|
|
160
|
+
return errors;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get test function info for reporting.
|
|
164
|
+
*/
|
|
165
|
+
getInfo() {
|
|
166
|
+
return {
|
|
167
|
+
mode: this.mode,
|
|
168
|
+
name: this.name,
|
|
169
|
+
description: this.description,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Type guard to check if an object is a TestFunction.
|
|
175
|
+
*/
|
|
176
|
+
export function isTestFunction(obj) {
|
|
177
|
+
return (obj &&
|
|
178
|
+
typeof obj === 'object' &&
|
|
179
|
+
typeof obj.mode === 'string' &&
|
|
180
|
+
typeof obj.name === 'string' &&
|
|
181
|
+
typeof obj.description === 'string' &&
|
|
182
|
+
typeof obj.execute === 'function');
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=TestFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestFunction.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/core/TestFunction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the graph-based testing framework.
|
|
3
|
+
*
|
|
4
|
+
* This file is the contract between all packages - changes require consensus.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { Page } from '@playwright/test';
|
|
9
|
+
/**
|
|
10
|
+
* Context provided to test functions during execution.
|
|
11
|
+
* Contains route information and optional metadata.
|
|
12
|
+
*/
|
|
13
|
+
export interface TestContext {
|
|
14
|
+
/** The route being tested (e.g., '/', '/dashboard', '/blog/:slug') */
|
|
15
|
+
route: string;
|
|
16
|
+
/** Unique identifier for this navigation context (enterprise only) */
|
|
17
|
+
contextId?: string;
|
|
18
|
+
/** Additional metadata about the route (tools, parent/child, custom data) */
|
|
19
|
+
metadata?: RouteMetadata;
|
|
20
|
+
/** Base URL for the application under test */
|
|
21
|
+
baseUrl?: string;
|
|
22
|
+
/** Current viewport being tested (for responsive testing) */
|
|
23
|
+
viewport?: ViewportConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Metadata associated with a route.
|
|
27
|
+
* Enterprise users get richer metadata via NavigationGraph.
|
|
28
|
+
*/
|
|
29
|
+
export interface RouteMetadata {
|
|
30
|
+
/** Human-readable name for the route */
|
|
31
|
+
name?: string;
|
|
32
|
+
/** Tools available on this route (enterprise only) */
|
|
33
|
+
tools?: string[];
|
|
34
|
+
/** Parent route in navigation hierarchy (enterprise only) */
|
|
35
|
+
parent?: string;
|
|
36
|
+
/** Child routes (enterprise only) */
|
|
37
|
+
children?: string[];
|
|
38
|
+
/** Navigation paths to other routes (enterprise only) */
|
|
39
|
+
navigationPaths?: NavigationPath[];
|
|
40
|
+
/** Custom user-defined metadata */
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Navigation path between routes (enterprise only).
|
|
45
|
+
*/
|
|
46
|
+
export interface NavigationPath {
|
|
47
|
+
/** Target route */
|
|
48
|
+
target: string;
|
|
49
|
+
/** Navigation method (link, button, programmatic) */
|
|
50
|
+
method: 'link' | 'button' | 'programmatic' | 'other';
|
|
51
|
+
/** Element selector that triggers navigation (if applicable) */
|
|
52
|
+
selector?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Result of a test function execution.
|
|
56
|
+
*/
|
|
57
|
+
export interface TestResult {
|
|
58
|
+
/** Whether the test passed */
|
|
59
|
+
passed: boolean;
|
|
60
|
+
/** Duration in milliseconds */
|
|
61
|
+
duration: number;
|
|
62
|
+
/** Errors encountered during testing */
|
|
63
|
+
errors: TestError[];
|
|
64
|
+
/** Additional test-specific metadata (screenshots, metrics, violations, etc.) */
|
|
65
|
+
metadata: Record<string, any>;
|
|
66
|
+
/** Test mode that produced this result */
|
|
67
|
+
mode?: TestMode;
|
|
68
|
+
/** Route that was tested */
|
|
69
|
+
route?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Error encountered during testing.
|
|
73
|
+
*/
|
|
74
|
+
export interface TestError {
|
|
75
|
+
/** Error severity */
|
|
76
|
+
severity: 'critical' | 'warning' | 'info';
|
|
77
|
+
/** Error message */
|
|
78
|
+
message: string;
|
|
79
|
+
/** Location where error occurred (file:line, selector, etc.) */
|
|
80
|
+
location?: string;
|
|
81
|
+
/** Stack trace (if available) */
|
|
82
|
+
stack?: string;
|
|
83
|
+
/** Additional error context */
|
|
84
|
+
context?: Record<string, any>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Descriptor for a route to be tested.
|
|
88
|
+
* Open-source users provide these manually.
|
|
89
|
+
* Enterprise users get these automatically via NavigationGraph.
|
|
90
|
+
*/
|
|
91
|
+
export interface RouteDescriptor {
|
|
92
|
+
/** The route path */
|
|
93
|
+
route: string;
|
|
94
|
+
/** Unique identifier (enterprise only) */
|
|
95
|
+
contextId?: string;
|
|
96
|
+
/** Route metadata */
|
|
97
|
+
metadata?: RouteMetadata;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Configuration for route discovery.
|
|
101
|
+
*/
|
|
102
|
+
export interface RouteDiscoveryConfig {
|
|
103
|
+
/** Discovery strategy ('manual', 'navigation-graph', 'custom') */
|
|
104
|
+
strategy: 'manual' | 'navigation-graph' | 'custom';
|
|
105
|
+
/** Routes to include (glob patterns) */
|
|
106
|
+
include?: string[];
|
|
107
|
+
/** Routes to exclude (glob patterns) */
|
|
108
|
+
exclude?: string[];
|
|
109
|
+
/** Custom discovery function */
|
|
110
|
+
discoveryFn?: () => Promise<RouteDescriptor[]>;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Available test modes.
|
|
114
|
+
*/
|
|
115
|
+
export type TestMode = 'visual' | 'performance' | 'accessibility' | 'seo' | string;
|
|
116
|
+
/**
|
|
117
|
+
* Configuration for a test mode.
|
|
118
|
+
*/
|
|
119
|
+
export interface TestModeConfig {
|
|
120
|
+
/** Mode identifier */
|
|
121
|
+
mode: TestMode;
|
|
122
|
+
/** Whether this mode is enabled */
|
|
123
|
+
enabled?: boolean;
|
|
124
|
+
/** Mode-specific options */
|
|
125
|
+
options?: Record<string, any>;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Configuration for GraphTester.
|
|
129
|
+
*/
|
|
130
|
+
export interface GraphTesterConfig {
|
|
131
|
+
/** Base URL for the application under test */
|
|
132
|
+
baseUrl: string;
|
|
133
|
+
/** Routes to test (manual mode) or discovery config */
|
|
134
|
+
routes?: RouteDescriptor[] | RouteDiscoveryConfig;
|
|
135
|
+
/** Test modes to run */
|
|
136
|
+
modes: TestMode[] | TestModeConfig[];
|
|
137
|
+
/** Output configuration */
|
|
138
|
+
output?: OutputConfig;
|
|
139
|
+
/** Execution configuration */
|
|
140
|
+
execution?: ExecutionConfig;
|
|
141
|
+
/** Browser configuration */
|
|
142
|
+
browser?: BrowserConfig;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Output configuration.
|
|
146
|
+
*/
|
|
147
|
+
export interface OutputConfig {
|
|
148
|
+
/** Output directory */
|
|
149
|
+
dir: string;
|
|
150
|
+
/** Output formats ('json', 'html', 'markdown', 'csv') */
|
|
151
|
+
formats?: ('json' | 'html' | 'markdown' | 'csv')[];
|
|
152
|
+
/** Whether to include screenshots */
|
|
153
|
+
includeScreenshots?: boolean;
|
|
154
|
+
/** Whether to include detailed logs */
|
|
155
|
+
includeDetailedLogs?: boolean;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Execution configuration.
|
|
159
|
+
*/
|
|
160
|
+
export interface ExecutionConfig {
|
|
161
|
+
/** Number of parallel workers */
|
|
162
|
+
parallel?: number;
|
|
163
|
+
/** Timeout per test (ms) */
|
|
164
|
+
timeout?: number;
|
|
165
|
+
/** Number of retries on failure */
|
|
166
|
+
retries?: number;
|
|
167
|
+
/** Whether to fail fast on first error */
|
|
168
|
+
failFast?: boolean;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Viewport configuration for responsive testing.
|
|
172
|
+
*/
|
|
173
|
+
export interface ViewportConfig {
|
|
174
|
+
/** Viewport name (e.g., 'desktop', 'tablet', 'mobile') */
|
|
175
|
+
name: string;
|
|
176
|
+
/** Width in pixels */
|
|
177
|
+
width: number;
|
|
178
|
+
/** Height in pixels */
|
|
179
|
+
height: number;
|
|
180
|
+
/** Device scale factor (default: 1) */
|
|
181
|
+
deviceScaleFactor?: number;
|
|
182
|
+
/** Whether this is a mobile device (default: false) */
|
|
183
|
+
isMobile?: boolean;
|
|
184
|
+
/** Whether device has touch support (default: false) */
|
|
185
|
+
hasTouch?: boolean;
|
|
186
|
+
/** User agent override */
|
|
187
|
+
userAgent?: string;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Predefined viewport presets.
|
|
191
|
+
*/
|
|
192
|
+
export declare const ViewportPresets: {
|
|
193
|
+
readonly Desktop: {
|
|
194
|
+
readonly name: "desktop";
|
|
195
|
+
readonly width: 1920;
|
|
196
|
+
readonly height: 1080;
|
|
197
|
+
};
|
|
198
|
+
readonly DesktopSmall: {
|
|
199
|
+
readonly name: "desktop-small";
|
|
200
|
+
readonly width: 1366;
|
|
201
|
+
readonly height: 768;
|
|
202
|
+
};
|
|
203
|
+
readonly Laptop: {
|
|
204
|
+
readonly name: "laptop";
|
|
205
|
+
readonly width: 1280;
|
|
206
|
+
readonly height: 720;
|
|
207
|
+
};
|
|
208
|
+
readonly TabletLandscape: {
|
|
209
|
+
readonly name: "tablet-landscape";
|
|
210
|
+
readonly width: 1024;
|
|
211
|
+
readonly height: 768;
|
|
212
|
+
readonly isMobile: true;
|
|
213
|
+
readonly hasTouch: true;
|
|
214
|
+
};
|
|
215
|
+
readonly TabletPortrait: {
|
|
216
|
+
readonly name: "tablet-portrait";
|
|
217
|
+
readonly width: 768;
|
|
218
|
+
readonly height: 1024;
|
|
219
|
+
readonly isMobile: true;
|
|
220
|
+
readonly hasTouch: true;
|
|
221
|
+
};
|
|
222
|
+
readonly MobileLarge: {
|
|
223
|
+
readonly name: "mobile-large";
|
|
224
|
+
readonly width: 414;
|
|
225
|
+
readonly height: 896;
|
|
226
|
+
readonly isMobile: true;
|
|
227
|
+
readonly hasTouch: true;
|
|
228
|
+
};
|
|
229
|
+
readonly Mobile: {
|
|
230
|
+
readonly name: "mobile";
|
|
231
|
+
readonly width: 375;
|
|
232
|
+
readonly height: 812;
|
|
233
|
+
readonly isMobile: true;
|
|
234
|
+
readonly hasTouch: true;
|
|
235
|
+
};
|
|
236
|
+
readonly MobileSmall: {
|
|
237
|
+
readonly name: "mobile-small";
|
|
238
|
+
readonly width: 320;
|
|
239
|
+
readonly height: 568;
|
|
240
|
+
readonly isMobile: true;
|
|
241
|
+
readonly hasTouch: true;
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Browser configuration.
|
|
246
|
+
*/
|
|
247
|
+
export interface BrowserConfig {
|
|
248
|
+
/** Browser type ('chromium', 'firefox', 'webkit') */
|
|
249
|
+
browserType?: 'chromium' | 'firefox' | 'webkit';
|
|
250
|
+
/** Single viewport size (legacy - use viewports for responsive testing) */
|
|
251
|
+
viewport?: {
|
|
252
|
+
width: number;
|
|
253
|
+
height: number;
|
|
254
|
+
};
|
|
255
|
+
/** Multiple viewports for responsive testing */
|
|
256
|
+
viewports?: ViewportConfig[];
|
|
257
|
+
/** Whether to run headless */
|
|
258
|
+
headless?: boolean;
|
|
259
|
+
/** Additional launch options */
|
|
260
|
+
launchOptions?: Record<string, any>;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Aggregated results from all test executions.
|
|
264
|
+
*/
|
|
265
|
+
export interface AggregatedTestResults {
|
|
266
|
+
/** Total number of routes tested */
|
|
267
|
+
routeCount: number;
|
|
268
|
+
/** Total number of tests run */
|
|
269
|
+
testCount: number;
|
|
270
|
+
/** Number of passed tests */
|
|
271
|
+
passedCount: number;
|
|
272
|
+
/** Number of failed tests */
|
|
273
|
+
failedCount: number;
|
|
274
|
+
/** Pass rate percentage */
|
|
275
|
+
passRate: number;
|
|
276
|
+
/** Total duration (ms) */
|
|
277
|
+
totalDuration: number;
|
|
278
|
+
/** Results grouped by route */
|
|
279
|
+
resultsByRoute: Map<string, TestResult[]>;
|
|
280
|
+
/** Results grouped by mode */
|
|
281
|
+
resultsByMode: Map<TestMode, TestResult[]>;
|
|
282
|
+
/** All errors */
|
|
283
|
+
errors: TestError[];
|
|
284
|
+
/** Timestamp */
|
|
285
|
+
timestamp: Date;
|
|
286
|
+
/** Configuration used */
|
|
287
|
+
config: GraphTesterConfig;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Reporter interface.
|
|
291
|
+
*/
|
|
292
|
+
export interface Reporter {
|
|
293
|
+
/** Generate report from aggregated results */
|
|
294
|
+
generate(results: AggregatedTestResults): Promise<void>;
|
|
295
|
+
/** Reporter name */
|
|
296
|
+
name: string;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Report format options.
|
|
300
|
+
*/
|
|
301
|
+
export type ReportFormat = 'json' | 'html' | 'markdown' | 'csv';
|
|
302
|
+
/**
|
|
303
|
+
* Test function execution options.
|
|
304
|
+
*/
|
|
305
|
+
export interface ExecuteOptions {
|
|
306
|
+
/** Playwright page instance */
|
|
307
|
+
page: Page;
|
|
308
|
+
/** Test context */
|
|
309
|
+
context: TestContext;
|
|
310
|
+
/** Timeout (ms) */
|
|
311
|
+
timeout?: number;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Test function setup options.
|
|
315
|
+
*/
|
|
316
|
+
export interface SetupOptions {
|
|
317
|
+
/** Playwright page instance */
|
|
318
|
+
page: Page;
|
|
319
|
+
/** Test context */
|
|
320
|
+
context?: TestContext;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Test function teardown options.
|
|
324
|
+
*/
|
|
325
|
+
export interface TeardownOptions {
|
|
326
|
+
/** Playwright page instance */
|
|
327
|
+
page: Page;
|
|
328
|
+
/** Test context */
|
|
329
|
+
context?: TestContext;
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the graph-based testing framework.
|
|
3
|
+
*
|
|
4
|
+
* This file is the contract between all packages - changes require consensus.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Predefined viewport presets.
|
|
10
|
+
*/
|
|
11
|
+
export const ViewportPresets = {
|
|
12
|
+
Desktop: { name: 'desktop', width: 1920, height: 1080 },
|
|
13
|
+
DesktopSmall: { name: 'desktop-small', width: 1366, height: 768 },
|
|
14
|
+
Laptop: { name: 'laptop', width: 1280, height: 720 },
|
|
15
|
+
TabletLandscape: { name: 'tablet-landscape', width: 1024, height: 768, isMobile: true, hasTouch: true },
|
|
16
|
+
TabletPortrait: { name: 'tablet-portrait', width: 768, height: 1024, isMobile: true, hasTouch: true },
|
|
17
|
+
MobileLarge: { name: 'mobile-large', width: 414, height: 896, isMobile: true, hasTouch: true },
|
|
18
|
+
Mobile: { name: 'mobile', width: 375, height: 812, isMobile: true, hasTouch: true },
|
|
19
|
+
MobileSmall: { name: 'mobile-small', width: 320, height: 568, isMobile: true, hasTouch: true },
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyPH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACjE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IACpD,eAAe,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvG,cAAc,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrG,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC9F,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnF,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;CACtF,CAAC"}
|