k6-cucumber-steps 2.0.8 → 2.0.9
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 +89 -1
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -1
- package/dist/generators/feature.parser.d.ts +4 -0
- package/dist/generators/feature.parser.d.ts.map +1 -1
- package/dist/generators/feature.parser.js +42 -15
- package/dist/generators/feature.parser.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,9 @@ All step definitions are fully documented and available in multiple formats:
|
|
|
23
23
|
### 1. TypeDoc API Documentation
|
|
24
24
|
Interactive HTML documentation with search and navigation:
|
|
25
25
|
|
|
26
|
-
**Online:** [View TypeDoc Documentation](https://qapaschale.github.io/k6-cucumber-steps/
|
|
26
|
+
**Online:** [View TypeDoc Documentation](https://qapaschale.github.io/k6-cucumber-steps/)
|
|
27
|
+
|
|
28
|
+
> 🚀 **Auto-Deployed**: Documentation is automatically generated and deployed to GitHub Pages on every push to the `main` branch.
|
|
27
29
|
|
|
28
30
|
**Locally:**
|
|
29
31
|
```bash
|
|
@@ -160,6 +162,92 @@ And I k6 print all aliases # Print all stored aliases
|
|
|
160
162
|
Given I k6 clear auth token # Remove Authorization header
|
|
161
163
|
```
|
|
162
164
|
|
|
165
|
+
## 🆕 What's New in v2.0.9
|
|
166
|
+
|
|
167
|
+
### 🔍 Recursive Feature File Search
|
|
168
|
+
|
|
169
|
+
The feature parser now **automatically searches subdirectories** for `.feature` files.
|
|
170
|
+
|
|
171
|
+
**Example:**
|
|
172
|
+
```bash
|
|
173
|
+
npx k6-cucumber-steps generate -f ./features
|
|
174
|
+
# Finds: ./features/login.feature
|
|
175
|
+
# ./features/api/users.feature
|
|
176
|
+
# ./features/api/orders.feature
|
|
177
|
+
# ./features/ui/dashboard.feature
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Excluded directories:** `node_modules/`, hidden directories (`.git/`, `.github/`, etc.)
|
|
181
|
+
|
|
182
|
+
### 📁 Multiple Feature Paths
|
|
183
|
+
|
|
184
|
+
Specify **multiple directories or files** using comma-separated paths.
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Search multiple directories
|
|
188
|
+
npx k6-cucumber-steps generate -f "./features/api,./features/ui,./tests/regression"
|
|
189
|
+
|
|
190
|
+
# Mix directories and single files
|
|
191
|
+
npx k6-cucumber-steps generate -f "./features,./tests/smoke.feature"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 🏷️ Enhanced Tag Filtering
|
|
195
|
+
|
|
196
|
+
Better tag filtering with **detailed feedback** on what's being included/excluded.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Include only @smoke tests
|
|
200
|
+
npx k6-cucumber-steps generate --tags @smoke
|
|
201
|
+
|
|
202
|
+
# Include multiple tags (OR logic)
|
|
203
|
+
npx k6-cucumber-steps generate --tags "@smoke,@regression"
|
|
204
|
+
|
|
205
|
+
# Exclude specific tags
|
|
206
|
+
npx k6-cucumber-steps generate --exclude-tags "@wip,@broken"
|
|
207
|
+
|
|
208
|
+
# Combine include and exclude
|
|
209
|
+
npx k6-cucumber-steps generate --tags "@smoke" --exclude-tags "@known-issue"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**New CLI Output:**
|
|
213
|
+
```
|
|
214
|
+
🏷️ Including scenarios with tags: @smoke
|
|
215
|
+
Filtered: 23 → 8 scenarios
|
|
216
|
+
|
|
217
|
+
🚫 Excluding scenarios with tags: @wip
|
|
218
|
+
Filtered: 8 → 6 scenarios
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 📄 Single Feature File Support
|
|
222
|
+
|
|
223
|
+
Target **individual feature files** directly.
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Run single feature file
|
|
227
|
+
npx k6-cucumber-steps generate -f ./features/login.feature
|
|
228
|
+
|
|
229
|
+
# Generate specific test suite
|
|
230
|
+
npx k6-cucumber-steps generate -f ./tests/regression/payment-flow.feature
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### 📊 Improved CLI Feedback
|
|
234
|
+
|
|
235
|
+
Enhanced command-line output with detailed progress information:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
$ npx k6-cucumber-steps generate -f ./features --tags @smoke
|
|
239
|
+
|
|
240
|
+
Generating k6 scripts from feature files...
|
|
241
|
+
📂 Searching for feature files in: ./features
|
|
242
|
+
✅ Found 5 feature file(s)
|
|
243
|
+
📋 Total scenarios found: 23
|
|
244
|
+
🏷️ Including scenarios with tags: @smoke
|
|
245
|
+
Filtered: 23 → 8 scenarios
|
|
246
|
+
📝 Processing 8 scenario(s) for script generation...
|
|
247
|
+
✅ Generated k6 script: ./generated/test.generated.ts
|
|
248
|
+
📋 Scenarios processed: 8
|
|
249
|
+
```
|
|
250
|
+
|
|
163
251
|
## ✨ New: Hybrid Performance Testing
|
|
164
252
|
|
|
165
253
|
You can now combine **Protocol-level (HTTP)** load testing and **Browser-level (Web Vitals)** testing in a single Gherkin suite.
|
package/dist/cli.js
CHANGED
|
@@ -38,25 +38,39 @@ commander_1.program
|
|
|
38
38
|
});
|
|
39
39
|
async function generateK6Scripts(options) {
|
|
40
40
|
console.log("Generating k6 scripts from feature files...");
|
|
41
|
+
console.log(`📂 Searching for feature files in: ${options.features || "./features"}`);
|
|
41
42
|
const parser = new feature_parser_1.FeatureParser();
|
|
42
43
|
const features = await parser.loadAndParseFeatures(options.features || "./features");
|
|
44
|
+
console.log(`✅ Found ${features.length} feature file(s)`);
|
|
45
|
+
// Count total scenarios before filtering
|
|
46
|
+
const totalScenarios = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
47
|
+
console.log(`📋 Total scenarios found: ${totalScenarios}`);
|
|
43
48
|
// Include by tags
|
|
44
49
|
if (options.tags) {
|
|
45
50
|
const includeTags = options.tags.split(",").map(t => t.trim()).filter(t => t);
|
|
51
|
+
console.log(`🏷️ Including scenarios with tags: ${includeTags.join(', ')}`);
|
|
52
|
+
let beforeCount = totalScenarios;
|
|
46
53
|
features.forEach((feature) => {
|
|
47
54
|
feature.scenarios = feature.scenarios.filter((scenario) => includeTags.some(tag => scenario.tags.includes(tag)));
|
|
48
55
|
});
|
|
56
|
+
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
57
|
+
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
|
|
49
58
|
}
|
|
50
59
|
// Exclude by tags
|
|
51
60
|
if (options.excludeTags) {
|
|
52
61
|
const excludeTags = options.excludeTags.split(",").map(t => t.trim()).filter(t => t);
|
|
62
|
+
console.log(`🚫 Excluding scenarios with tags: ${excludeTags.join(', ')}`);
|
|
63
|
+
let beforeCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
53
64
|
features.forEach((feature) => {
|
|
54
65
|
feature.scenarios = feature.scenarios.filter((scenario) => !excludeTags.some(tag => scenario.tags.includes(tag)));
|
|
55
66
|
});
|
|
67
|
+
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
|
|
68
|
+
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
|
|
56
69
|
}
|
|
57
70
|
// Flatten all scenarios
|
|
58
71
|
const allScenarios = features.flatMap((f) => f.scenarios);
|
|
59
72
|
const metadata = parser.loadScenarioMetadata(allScenarios);
|
|
73
|
+
console.log(`📝 Processing ${allScenarios.length} scenario(s) for script generation...`);
|
|
60
74
|
const generator = new k6_script_generator_1.K6ScriptGenerator();
|
|
61
75
|
const config = {
|
|
62
76
|
language: options.lang,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AACA,aAAa;AACb,yCAAoC;AACpC,0DAAsD;AACtD,gEAA4D;AAC5D,0EAAqE;AAErE,4CAAoB;AAEpB,eAAe;AACf,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,mBAAO;KACJ,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,EAAE,IAAI,CAAC;KACxE,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,IAAI,0BAAW,EAAE,CAAC;IAClC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAmB,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEL,mBAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,YAAY,CAAC;KACtE,MAAM,CACL,qBAAqB,EACrB,mCAAmC,EACnC,aAAa,CACd;KACA,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,CAAC;KAC9E,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,IAAI,CAAC;KACnE,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAYL,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IACvD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { FeatureFile, Scenario, ScenarioMetadata } from "../types";
|
|
2
2
|
export declare class FeatureParser {
|
|
3
3
|
loadAndParseFeatures(featuresPath: string): Promise<FeatureFile[]>;
|
|
4
|
+
/**
|
|
5
|
+
* Recursively find all .feature files in a directory
|
|
6
|
+
*/
|
|
7
|
+
private findFeatureFilesRecursive;
|
|
4
8
|
private parseFeature;
|
|
5
9
|
/**
|
|
6
10
|
* Helper to map Gherkin AST steps to our internal Scenario Step format,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.parser.d.ts","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzE,qBAAa,aAAa;IAClB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"feature.parser.d.ts","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAQ,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzE,qBAAa,aAAa;IAClB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAqCxE;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,YAAY;IAyGpB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAgCpC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE;CA4BhE"}
|
|
@@ -44,25 +44,52 @@ const Gherkin = __importStar(require("@cucumber/gherkin"));
|
|
|
44
44
|
const Messages = __importStar(require("@cucumber/messages"));
|
|
45
45
|
class FeatureParser {
|
|
46
46
|
async loadAndParseFeatures(featuresPath) {
|
|
47
|
-
// Resolve path relative to the Current Working Directory
|
|
48
|
-
const resolvedPath = path_1.default.resolve(process.cwd(), featuresPath);
|
|
49
47
|
const featureFiles = [];
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
// Handle multiple paths (comma-separated)
|
|
49
|
+
const paths = featuresPath.split(',').map(p => p.trim()).filter(p => p);
|
|
50
|
+
for (const singlePath of paths) {
|
|
51
|
+
const resolvedPath = path_1.default.resolve(process.cwd(), singlePath);
|
|
52
|
+
if (!fs_1.default.existsSync(resolvedPath)) {
|
|
53
|
+
console.warn(`⚠️ Warning: The path "${singlePath}" does not exist at ${resolvedPath}`);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (fs_1.default.statSync(resolvedPath).isDirectory()) {
|
|
57
|
+
// Recursively find all .feature files in directory
|
|
58
|
+
const dirFeatureFiles = this.findFeatureFilesRecursive(resolvedPath);
|
|
59
|
+
for (const file of dirFeatureFiles) {
|
|
60
|
+
const content = fs_1.default.readFileSync(file, "utf8");
|
|
61
|
+
featureFiles.push(this.parseFeature(content, file));
|
|
60
62
|
}
|
|
61
63
|
}
|
|
64
|
+
else if (singlePath.endsWith(".feature")) {
|
|
65
|
+
// Single feature file
|
|
66
|
+
const content = fs_1.default.readFileSync(resolvedPath, "utf8");
|
|
67
|
+
featureFiles.push(this.parseFeature(content, resolvedPath));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.warn(`⚠️ Warning: "${singlePath}" is not a directory or .feature file`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (featureFiles.length === 0) {
|
|
74
|
+
throw new Error(`No feature files found in: ${featuresPath}`);
|
|
62
75
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
return featureFiles;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Recursively find all .feature files in a directory
|
|
80
|
+
*/
|
|
81
|
+
findFeatureFilesRecursive(dirPath) {
|
|
82
|
+
const featureFiles = [];
|
|
83
|
+
const entries = fs_1.default.readdirSync(dirPath, { withFileTypes: true });
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
const fullPath = path_1.default.join(dirPath, entry.name);
|
|
86
|
+
if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
|
|
87
|
+
// Recursively search subdirectories (exclude hidden and node_modules)
|
|
88
|
+
featureFiles.push(...this.findFeatureFilesRecursive(fullPath));
|
|
89
|
+
}
|
|
90
|
+
else if (entry.isFile() && entry.name.endsWith(".feature")) {
|
|
91
|
+
featureFiles.push(fullPath);
|
|
92
|
+
}
|
|
66
93
|
}
|
|
67
94
|
return featureFiles;
|
|
68
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.parser.js","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,4CAAoB;AACpB,gDAAwB;AACxB,2DAA6C;AAC7C,6DAA+C;AAG/C,MAAa,aAAa;IACxB,KAAK,CAAC,oBAAoB,CAAC,YAAoB;QAC7C,
|
|
1
|
+
{"version":3,"file":"feature.parser.js","sourceRoot":"","sources":["../../src/generators/feature.parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,4CAAoB;AACpB,gDAAwB;AACxB,2DAA6C;AAC7C,6DAA+C;AAG/C,MAAa,aAAa;IACxB,KAAK,CAAC,oBAAoB,CAAC,YAAoB;QAC7C,MAAM,YAAY,GAAkB,EAAE,CAAC;QAEvC,0CAA0C;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExE,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;YAE7D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,0BAA0B,UAAU,uBAAuB,YAAY,EAAE,CAAC,CAAC;gBACxF,SAAS;YACX,CAAC;YAED,IAAI,YAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC5C,mDAAmD;gBACnD,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;gBACrE,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC9C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,sBAAsB;gBACtB,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBACtD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,iBAAiB,UAAU,uCAAuC,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,OAAe;QAC/C,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACxF,sEAAsE;gBACtE,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,YAAY,CAAC,OAAe,EAAE,QAAgB;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE9C,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,gDAAgD;YAChD,MAAM,WAAW,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CACxE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAC1B,CAAC;YAEF,iEAAiE;YACjE,MAAM,eAAe,GAAW,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAC3D,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CACjC,CAAC;YAEF,IAAI,eAAe,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClD,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oBACrD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAe,EAAE,CAAC;YAEjC,wDAAwD;YACxD,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrC,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;wBAChC,MAAM,YAAY,GAAG;4BACnB,GAAG,WAAW;4BACd,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CACxC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAC1B;yBACF,CAAC;wBAEF,yCAAyC;wBACzC,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtD,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gCAC7C,MAAM,WAAW,GACf,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;oCACxD,EAAE,CAAC;gCACL,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC;gCAE/C,SAAS,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,QAAgB,EAAE,EAAE;oCAC/C,MAAM,OAAO,GAA2B,EAAE,CAAC;oCAC3C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,SAAiB,EAAE,EAAE;wCACjD,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oCAC/C,CAAC,CAAC,CAAC;oCAEH,0EAA0E;oCAC1E,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;wCACrD,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;wCACxB,yBAAyB;wCACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;4CACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,GAAG,CAAC,CACb,CAAC;wCACJ,CAAC,CAAC,CAAC;wCAEH,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oCAC1D,CAAC,CAAC,CAAC;oCAEH,SAAS,CAAC,IAAI,CAAC;wCACb,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,SAAS,QAAQ,GAAG,CAAC,GAAG;wCAC9C,KAAK,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC;wCAC7C,IAAI,EAAE,YAAY;wCAClB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;qCACxC,CAAC,CAAC;gCACL,CAAC,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,+BAA+B;4BAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CACrD,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CACxC,CAAC;4BAEF,SAAS,CAAC,IAAI,CAAC;gCACb,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,KAAK,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC;gCAC7C,IAAI,EAAE,YAAY;gCAClB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;6BACxC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,4BAA4B,CAClC,WAAgB,EAChB,YAAqB;QAErB,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,iDAAiD;QACjD,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACtD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;oBACxC,MAAM,GAAG,GAA2B,EAAE,CAAC;oBACvC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,CAAS,EAAE,EAAE;wBACzC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC9B,CAAC,CAAC,CAAC;oBACH,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,oBAAoB;aACf,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/B,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;QAC3C,CAAC;QAED,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;YACnC,IAAI,EAAE,YAAY,IAAI,WAAW,CAAC,IAAI;YACtC,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,SAAqB;QACxC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChC,MAAM,QAAQ,GAAqB;gBACjC,YAAY,EAAE,QAAQ,CAAC,IAAI;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBACvC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;wBAChD,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AArOD,sCAqOC"}
|