@test2doc/playwright 0.0.2 → 0.1.0

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 CHANGED
@@ -67,4 +67,15 @@ export default defineConfig({
67
67
 
68
68
  ## How it works
69
69
 
70
- After this setup, every time you run your Playwright tests, the `@test2doc/playwright` reporter will automatically generate a new markdown file in your specified Docusaurus docs directory for each top-level describe block found in your Playwright test files.
70
+ After this setup, every time you run your Playwright tests, the `@test2doc/playwright` reporter will automatically generate a new markdown file in your specified Docusaurus docs directory for each top-level describe block found in your Playwright test files.
71
+
72
+ ### Adding Docusaurus Page Metadata
73
+ Docusaurus supports [markdown front matter](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter) to allow for more control of pages and to help position links in the sidebar.
74
+
75
+ To add this metadata to the test2doc markdown files that are generated use the `withDocMeta` function in your top level describe block in your test.
76
+
77
+ ```ts
78
+ import {withDocMeta} from "@test2doc/playwright/DocHeader";
79
+
80
+ describe(withDocMeta("Title of Page", {title: "Title in Sidebar", sidebar_position: 1}))
81
+ ```
@@ -0,0 +1,24 @@
1
+ export interface DocusaurusHeaderConfig {
2
+ title?: string;
3
+ description?: string;
4
+ slug?: string;
5
+ sidebar_label?: string;
6
+ sidebar_position?: number;
7
+ hide_table_of_contents?: boolean;
8
+ keywords?: string[];
9
+ image?: string;
10
+ [key: string]: string | number | boolean | string[];
11
+ }
12
+ /**
13
+ * activateTest2Doc - Activates withDocMeta to add Docusaurus Page Meta Data to Describe Title.
14
+ */
15
+ export declare const activateTest2Doc: () => void;
16
+ /**
17
+ * withDocMeta - Adds Docusaurus Page Meta Data to Playwright Describe Title when test2doc is active.
18
+ * @param title - The title of the describe block.
19
+ * @param config - The Docusaurus Page Metadata configuration object.
20
+ * For a list of fields for the config see https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter
21
+ * @returns The title with appended JSON string of config if test2doc is active, otherwise just the title.
22
+ */
23
+ export declare const withDocMeta: (title: string, config: DocusaurusHeaderConfig) => string;
24
+ //# sourceMappingURL=DocHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocHeader.d.ts","sourceRoot":"","sources":["../src/DocHeader.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;CACpD;AAKD;;GAEG;AACH,eAAO,MAAM,gBAAgB,YAE5B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,QAAQ,sBAAsB,WAChB,CAAA"}
@@ -0,0 +1,17 @@
1
+ // Assume false by default
2
+ let test2docActive = process.argv.includes("--test2doc");
3
+ /**
4
+ * activateTest2Doc - Activates withDocMeta to add Docusaurus Page Meta Data to Describe Title.
5
+ */
6
+ export const activateTest2Doc = () => {
7
+ test2docActive = true;
8
+ };
9
+ /**
10
+ * withDocMeta - Adds Docusaurus Page Meta Data to Playwright Describe Title when test2doc is active.
11
+ * @param title - The title of the describe block.
12
+ * @param config - The Docusaurus Page Metadata configuration object.
13
+ * For a list of fields for the config see https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-docs#markdown-front-matter
14
+ * @returns The title with appended JSON string of config if test2doc is active, otherwise just the title.
15
+ */
16
+ export const withDocMeta = (title, config) => test2docActive ? title + JSON.stringify(config) : title;
17
+ //# sourceMappingURL=DocHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocHeader.js","sourceRoot":"","sources":["../src/DocHeader.ts"],"names":[],"mappings":"AAaA,0BAA0B;AAC1B,IAAI,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,cAAc,GAAG,IAAI,CAAA;AACvB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,MAA8B,EAAE,EAAE,CAC3E,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA"}
@@ -0,0 +1,26 @@
1
+ import type { FullConfig, Reporter, Suite, TestCase, TestResult, TestStep } from "@playwright/test/reporter";
2
+ interface Test2DocReporterOptions {
3
+ outputDir?: string;
4
+ }
5
+ /**
6
+ * Test2DocReporter is a Playwright reporter that generates documentation
7
+ * for tests in markdown and consumed by Docusaurus.
8
+ */
9
+ declare class Test2DocReporter implements Reporter {
10
+ private docs;
11
+ private docMap;
12
+ private outputDir;
13
+ constructor(options?: Test2DocReporterOptions);
14
+ onBegin(_config: FullConfig, suite: Suite): void;
15
+ private buildDocTree;
16
+ onTestBegin(test: TestCase): void;
17
+ onStepBegin(test: TestCase, _result: TestResult, step: TestStep): void;
18
+ private convertToKebabCase;
19
+ onEnd(): void;
20
+ private extractDocMetadata;
21
+ private generateHeader;
22
+ private generateTitle;
23
+ private generateMarkdown;
24
+ }
25
+ export default Test2DocReporter;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAgBlC,UAAU,uBAAuB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,cAAM,gBAAiB,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,GAAE,uBAAiD;IAItE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IASzC,OAAO,CAAC,YAAY;IAyBpB,WAAW,CAAC,IAAI,EAAE,QAAQ;IAM1B,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAYtE,OAAO,CAAC,kBAAkB;IAO1B,KAAK;IAML,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;CAuBzB;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAiBlC,UAAU,uBAAuB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;GAGG;AACH,cAAM,gBAAiB,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAQ;gBAGvB,OAAO,GAAE,uBAER;IAKH,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IASzC,OAAO,CAAC,YAAY;IAyBpB,WAAW,CAAC,IAAI,EAAE,QAAQ;IAM1B,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAYtE,OAAO,CAAC,kBAAkB;IAO1B,KAAK;IASL,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;CAuBzB;AAED,eAAe,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { writeFileSync } from "node:fs";
2
+ import { activateTest2Doc } from "./DocHeader.js";
3
+ activateTest2Doc();
2
4
  /**
3
5
  * Test2DocReporter is a Playwright reporter that generates documentation
4
6
  * for tests in markdown and consumed by Docusaurus.
@@ -7,7 +9,9 @@ class Test2DocReporter {
7
9
  docs = { title: "", children: [] };
8
10
  docMap = new Map();
9
11
  outputDir;
10
- constructor(options = { outputDir: "./docs" }) {
12
+ constructor(options = {
13
+ outputDir: "./docs",
14
+ }) {
11
15
  this.outputDir = options.outputDir || "./docs";
12
16
  }
13
17
  onBegin(_config, suite) {
@@ -60,10 +64,48 @@ class Test2DocReporter {
60
64
  .replace(/[^a-z0-9]+/g, "-");
61
65
  }
62
66
  onEnd() {
63
- const markdown = this.generateMarkdown(this.docs);
64
- const filePath = `${this.outputDir}/${this.convertToKebabCase(this.docs.title)}.md`;
67
+ const [title, metadata] = this.extractDocMetadata(this.docs.title);
68
+ const markdownHeader = this.generateHeader(metadata);
69
+ const markdown = markdownHeader + this.generateMarkdown({ ...this.docs, title }, 1);
70
+ const filePath = `${this.outputDir}/${this.convertToKebabCase(title)}.md`;
65
71
  writeFileSync(filePath, markdown);
66
72
  }
73
+ extractDocMetadata(docTitle) {
74
+ const [_ignore, title, metadataJson] = docTitle.match(/^(.*?)\s*({.*})$/) ?? [];
75
+ console.log("Generating metadata for doc:", metadataJson);
76
+ return [title ?? docTitle, metadataJson ? JSON.parse(metadataJson) : {}];
77
+ }
78
+ generateHeader(metadata) {
79
+ let header = "---\n";
80
+ for (const [key, value] of Object.entries(metadata)) {
81
+ switch (typeof value) {
82
+ case "string":
83
+ case "number":
84
+ case "boolean":
85
+ header += `${key}: ${value}\n`;
86
+ break;
87
+ case "object":
88
+ if (Array.isArray(value)) {
89
+ header += `${key}:\n`;
90
+ for (const item of value) {
91
+ header += ` - ${item}\n`;
92
+ }
93
+ }
94
+ else {
95
+ header += `${key}:\n`;
96
+ for (const [subKey, subValue] of Object.entries(value)) {
97
+ header += ` ${subKey}: ${subValue}\n`;
98
+ }
99
+ }
100
+ break;
101
+ default:
102
+ console.warn(`Unsupported metadata type for key "${key}": ${typeof value}`);
103
+ break;
104
+ }
105
+ }
106
+ header += "---\n\n";
107
+ return header;
108
+ }
67
109
  generateTitle(title, depth) {
68
110
  let titleMarkdown = "";
69
111
  for (let i = 0; i < depth; ++i) {
@@ -71,7 +113,7 @@ class Test2DocReporter {
71
113
  }
72
114
  return `${titleMarkdown} ${title}\n\n`;
73
115
  }
74
- generateMarkdown(docNode, depth = 1) {
116
+ generateMarkdown(docNode, depth) {
75
117
  let markdown = this.generateTitle(docNode.title, depth);
76
118
  if (docNode.tests) {
77
119
  for (const test of docNode.tests) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@test2doc/playwright",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "A reporter that generates docs based off playwright test files",
5
5
  "keywords": [
6
6
  "docs",
@@ -11,11 +11,23 @@
11
11
  "license": "GPL-3.0-or-later",
12
12
  "author": "@dethstrobe",
13
13
  "type": "module",
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.js",
17
+ "types": "./dist/index.d.ts"
18
+ },
19
+ "./DocHeader": {
20
+ "import": "./dist/DocHeader.js",
21
+ "types": "./dist/DocHeader.d.ts"
22
+ }
23
+ },
14
24
  "main": "dist/index.js",
15
25
  "module": "dist/index.js",
16
26
  "types": "dist/index.d.ts",
17
27
  "files": [
18
- "dist"
28
+ "dist",
29
+ "dist/DocHeader.js",
30
+ "dist/DocHeader.d.ts"
19
31
  ],
20
32
  "publishConfig": {
21
33
  "access": "public"
@@ -29,7 +41,7 @@
29
41
  },
30
42
  "scripts": {
31
43
  "clean": "rm -rf dist",
32
- "build": "pnpm run clean && tsc --project tsconfig.json",
44
+ "build": "tsc --project tsconfig.json",
33
45
  "build:watch": "tsc --project tsconfig.json --watch",
34
46
  "test": "vitest",
35
47
  "lint": "biome lint .",
@@ -1 +0,0 @@
1
- {"version":3,"file":"Test2DocReporter.test.d.ts","sourceRoot":"","sources":["../src/Test2DocReporter.test.ts"],"names":[],"mappings":""}
@@ -1,138 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import Test2DocReporter from "./index.js";
3
- import { writeFileSync } from "node:fs";
4
- describe("Test2DocReporter", () => {
5
- const setup = () => {
6
- return new Test2DocReporter({ outputDir: "test-output" });
7
- };
8
- it("should capture test steps", () => {
9
- vi.mock("node:fs", () => ({
10
- writeFileSync: vi.fn(),
11
- }));
12
- const reporter = setup();
13
- const baseSuite = {
14
- title: "",
15
- suites: [],
16
- tests: [],
17
- location: { file: "", line: 0, column: 0 },
18
- allTests: () => {
19
- throw new Error("Function not implemented.");
20
- },
21
- entries: () => {
22
- throw new Error("Function not implemented.");
23
- },
24
- project: () => {
25
- throw new Error("Function not implemented.");
26
- },
27
- titlePath: () => {
28
- throw new Error("Function not implemented.");
29
- },
30
- type: "root",
31
- };
32
- const baseTestCase = {
33
- title: "base",
34
- location: { file: "", line: 0, column: 0 },
35
- ok: () => {
36
- throw new Error("Function not implemented.");
37
- },
38
- outcome: () => {
39
- throw new Error("Function not implemented.");
40
- },
41
- titlePath: () => [
42
- "Root Suite",
43
- "Parent Describe",
44
- "Child Describe",
45
- "login test",
46
- ],
47
- annotations: [],
48
- expectedStatus: "passed",
49
- id: "",
50
- parent: baseSuite, // this is just mocked out
51
- repeatEachIndex: 0,
52
- results: [],
53
- retries: 0,
54
- tags: [],
55
- timeout: 0,
56
- type: "test",
57
- };
58
- const mockTestSuccess = {
59
- ...baseTestCase,
60
- title: "should rediect to dashboard on successful login",
61
- };
62
- const mockTestFail = {
63
- ...baseTestCase,
64
- title: "should display error message on failed login",
65
- };
66
- const mockSuite = {
67
- ...baseSuite,
68
- title: "", // Root Suite
69
- suites: [
70
- {
71
- ...baseSuite,
72
- title: "chromium", // or firefox, webkit, etc.
73
- suites: [
74
- {
75
- ...baseSuite,
76
- title: "login.test.ts", // Test file name
77
- suites: [
78
- {
79
- ...baseSuite,
80
- title: "Login Page", // First Describe Block in the test file
81
- suites: [
82
- {
83
- ...baseSuite,
84
- title: "Successful Login",
85
- tests: [mockTestSuccess],
86
- },
87
- {
88
- ...baseSuite,
89
- title: "Failed Login",
90
- tests: [mockTestFail],
91
- },
92
- ],
93
- },
94
- ],
95
- },
96
- ],
97
- },
98
- ],
99
- };
100
- const baseTestStep = {
101
- title: "Given user is on login page",
102
- category: "test.step",
103
- titlePath: () => {
104
- throw new Error("Function not implemented.");
105
- },
106
- annotations: [],
107
- attachments: [],
108
- duration: 0,
109
- startTime: new Date(),
110
- steps: [],
111
- };
112
- const mockStep = {
113
- ...baseTestStep,
114
- title: "Given user is on login page",
115
- };
116
- reporter.onBegin({}, mockSuite);
117
- reporter.onTestBegin(mockTestSuccess);
118
- reporter.onStepBegin(mockTestSuccess, {}, mockStep);
119
- reporter.onStepBegin(mockTestFail, {}, mockStep);
120
- reporter.onEnd();
121
- expect(writeFileSync).toHaveBeenCalledWith("test-output/login-page.md", `# Login Page
122
-
123
- ## Successful Login
124
-
125
- ### should rediect to dashboard on successful login
126
-
127
- - Given user is on login page
128
-
129
- ## Failed Login
130
-
131
- ### should display error message on failed login
132
-
133
- - Given user is on login page
134
-
135
- `);
136
- });
137
- });
138
- //# sourceMappingURL=Test2DocReporter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Test2DocReporter.test.js","sourceRoot":"","sources":["../src/Test2DocReporter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,gBAAgB,MAAM,YAAY,CAAA;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,OAAO,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;YACxB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAA;QAExB,MAAM,SAAS,GAAU;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YAC1C,QAAQ,EAAE,GAAoB,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,EAAE,GAA4B,EAAE;gBACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,EAAE,GAA4B,EAAE;gBACrC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,SAAS,EAAE,GAAkB,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,IAAI,EAAE,MAAM;SACb,CAAA;QAED,MAAM,YAAY,GAAa;YAC7B,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YAC1C,EAAE,EAAE,GAAY,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,EAAE,GAAoD,EAAE;gBAC7D,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,SAAS,EAAE,GAAkB,EAAE,CAAC;gBAC9B,YAAY;gBACZ,iBAAiB;gBACjB,gBAAgB;gBAChB,YAAY;aACb;YACD,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,QAAQ;YACxB,EAAE,EAAE,EAAE;YACN,MAAM,EAAE,SAAS,EAAE,0BAA0B;YAC7C,eAAe,EAAE,CAAC;YAClB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,MAAM;SACb,CAAA;QAED,MAAM,eAAe,GAAa;YAChC,GAAG,YAAY;YACf,KAAK,EAAE,iDAAiD;SACzD,CAAA;QAED,MAAM,YAAY,GAAa;YAC7B,GAAG,YAAY;YACf,KAAK,EAAE,8CAA8C;SACtD,CAAA;QAED,MAAM,SAAS,GAAU;YACvB,GAAG,SAAS;YACZ,KAAK,EAAE,EAAE,EAAE,aAAa;YACxB,MAAM,EAAE;gBACN;oBACE,GAAG,SAAS;oBACZ,KAAK,EAAE,UAAU,EAAE,2BAA2B;oBAC9C,MAAM,EAAE;wBACN;4BACE,GAAG,SAAS;4BACZ,KAAK,EAAE,eAAe,EAAE,iBAAiB;4BACzC,MAAM,EAAE;gCACN;oCACE,GAAG,SAAS;oCACZ,KAAK,EAAE,YAAY,EAAE,wCAAwC;oCAC7D,MAAM,EAAE;wCACN;4CACE,GAAG,SAAS;4CACZ,KAAK,EAAE,kBAAkB;4CACzB,KAAK,EAAE,CAAC,eAAe,CAAC;yCACzB;wCACD;4CACE,GAAG,SAAS;4CACZ,KAAK,EAAE,cAAc;4CACrB,KAAK,EAAE,CAAC,YAAY,CAAC;yCACtB;qCACF;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAA;QAED,MAAM,YAAY,GAAa;YAC7B,KAAK,EAAE,6BAA6B;YACpC,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,GAAkB,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,KAAK,EAAE,EAAE;SACV,CAAA;QAED,MAAM,QAAQ,GAAa;YACzB,GAAG,YAAY;YACf,KAAK,EAAE,6BAA6B;SACrC,CAAA;QAED,QAAQ,CAAC,OAAO,CAAC,EAAgB,EAAE,SAAS,CAAC,CAAA;QAC7C,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;QACrC,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,EAAgB,EAAE,QAAQ,CAAC,CAAA;QACjE,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,EAAgB,EAAE,QAAQ,CAAC,CAAA;QAC9D,QAAQ,CAAC,KAAK,EAAE,CAAA;QAEhB,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,2BAA2B,EAC3B;;;;;;;;;;;;;;CAcL,CACI,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}