@scrymore/scry-sbcov 0.5.2-next.20260925112524 → 0.5.2
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 +84 -0
- package/dist/cli/config.d.ts +19 -2
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +264 -60
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.js +71 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/core/analyzer.d.ts +6 -2
- package/dist/core/analyzer.d.ts.map +1 -1
- package/dist/core/analyzer.js +14 -2
- package/dist/core/analyzer.js.map +1 -1
- package/dist/core/built-story-index.d.ts +2 -0
- package/dist/core/built-story-index.d.ts.map +1 -1
- package/dist/core/built-story-index.js +7 -1
- package/dist/core/built-story-index.js.map +1 -1
- package/dist/core/capture-summary.d.ts +21 -0
- package/dist/core/capture-summary.d.ts.map +1 -0
- package/dist/core/capture-summary.js +33 -0
- package/dist/core/capture-summary.js.map +1 -0
- package/dist/core/errors.d.ts +23 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +27 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/story-executor.d.ts +2 -0
- package/dist/core/story-executor.d.ts.map +1 -1
- package/dist/core/story-executor.js +68 -7
- package/dist/core/story-executor.js.map +1 -1
- package/dist/core/version.d.ts +7 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +16 -0
- package/dist/core/version.js.map +1 -0
- package/dist/core/zip-generator.d.ts +13 -3
- package/dist/core/zip-generator.d.ts.map +1 -1
- package/dist/core/zip-generator.js +60 -3
- package/dist/core/zip-generator.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/story-parser.d.ts.map +1 -1
- package/dist/parsers/story-parser.js +4 -3
- package/dist/parsers/story-parser.js.map +1 -1
- package/dist/types/index.d.ts +57 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -87,11 +87,75 @@ Options:
|
|
|
87
87
|
--ci CI mode: exit code 1 if quality gate fails
|
|
88
88
|
--threshold-component <n> Component coverage threshold % (default: 80)
|
|
89
89
|
--threshold-new-code <n> New code coverage threshold % (default: 90)
|
|
90
|
+
--max-dropped <n> Exit 3 (after writing the archive) when more stories than this
|
|
91
|
+
were left out of it: a count, or a percentage like 5%
|
|
92
|
+
(default: no limit; the count is always reported)
|
|
93
|
+
--allow-default-capture If the config file cannot be used, warn and run without it
|
|
94
|
+
(every setting on the defaults) instead of exiting 2
|
|
90
95
|
-v, --verbose Verbose output
|
|
91
96
|
--version Show version
|
|
92
97
|
--help Show help
|
|
93
98
|
```
|
|
94
99
|
|
|
100
|
+
## Exit codes
|
|
101
|
+
|
|
102
|
+
| Code | Meaning | Archive (`--output-zip`) |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| 0 | Done. The summary line says how many stories were left out; with `--max-dropped`, no more than it allows | written |
|
|
105
|
+
| 1 | Crash; `--ci` and the coverage quality gate failed; or `--output-zip` was asked for and no archive could be written (story execution did not run) | written if the run got that far |
|
|
106
|
+
| 2 | The config cannot be used: a config file that throws or does not parse, an unknown key, a value out of range, a `--config` path that does not exist, a bad `--max-dropped`. Nothing is captured | not written |
|
|
107
|
+
| 3 | `--max-dropped` (or `maxDropped` in the config) is set and more stories were left out than it allows. The archive holds every story that was captured. Wins over a failed `--ci` gate, so a caller still uploads the archive | written first, then exit 3 |
|
|
108
|
+
|
|
109
|
+
Without `--max-dropped` sbcov never fails for dropped stories: it counts and names them. That
|
|
110
|
+
keeps an installed `@scrymore/scry-deployer` older than 0.7.0, which treats any non-zero sbcov
|
|
111
|
+
exit as "no archive", uploading what was captured. `@scrymore/scry-deployer` 0.7.0 and later
|
|
112
|
+
passes `--max-dropped 0` unless you set a value, uploads the archive, and then fails the deploy
|
|
113
|
+
on 3; it stops before uploading on 2.
|
|
114
|
+
|
|
115
|
+
## What every run prints
|
|
116
|
+
|
|
117
|
+
Two lines, on stderr, whatever `--verbose` says:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
sbcov capture: mode=root viewport=420x600 scale=2 source=scry-sbcov.config.js
|
|
121
|
+
sbcov: 417/461 stories captured, 44 not indexed (timeout 40, console error 4)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
The first is the framing the screenshots use and where it came from (`defaults`, a config file
|
|
125
|
+
path relative to the repository root, `flags`, or `flags + <file>`). The second is printed once
|
|
126
|
+
the capture is done: how many of the stories Storybook built will be searchable, and why the
|
|
127
|
+
rest will not. Each left-out story is also named on its own line as it happens:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
✗ settings-invitemodal--open will not be indexed: timeout (page.waitForSelector: Timeout 15000ms exceeded.)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Reasons: `timeout`, `render_error`, `console_error`, `play_function` (the story failed),
|
|
134
|
+
`screenshot_failed` (it rendered but the image could not be written), `not_discovered` (Storybook
|
|
135
|
+
built it but no story file matched it, or its file failed to parse), `no_image` (the image was
|
|
136
|
+
missing or unusable when the archive was written).
|
|
137
|
+
|
|
138
|
+
## The metadata archive
|
|
139
|
+
|
|
140
|
+
`--output-zip` writes `metadata.json` (a plain JSON array, one entry per captured story),
|
|
141
|
+
`images/*.png`, and `sbcov-manifest.json`, which accounts for every declared story:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"sbcovVersion": "0.5.2",
|
|
146
|
+
"declared": 461,
|
|
147
|
+
"captured": 417,
|
|
148
|
+
"dropped": [
|
|
149
|
+
{ "storyId": "settings-invitemodal--open", "storyTitle": "Settings/InviteModal", "reason": "timeout", "detail": "page.waitForSelector: Timeout 15000ms exceeded." }
|
|
150
|
+
],
|
|
151
|
+
"capture": { "mode": "root", "viewport": { "width": 420, "height": 600 }, "scale": 2, "source": "scry-sbcov.config.js" }
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
`captured + dropped.length = declared`. "Declared" is Storybook's own `index.json` (or
|
|
156
|
+
`stories.json`) when the build has one, else the stories found on disk. The same list is in the
|
|
157
|
+
JSON report under `execution.dropped`, with `execution.summary.declared` and `notIndexed`.
|
|
158
|
+
|
|
95
159
|
## Configuration
|
|
96
160
|
|
|
97
161
|
Create a `scry-sbcov.config.js` file in your project root:
|
|
@@ -127,6 +191,9 @@ module.exports = {
|
|
|
127
191
|
// Output
|
|
128
192
|
outputPath: './scry-sbcov-report.json',
|
|
129
193
|
|
|
194
|
+
// Optional: exit 3 when more stories than this are left out of the archive (a count or '5%')
|
|
195
|
+
// maxDropped: 0,
|
|
196
|
+
|
|
130
197
|
// Scenario detection customization
|
|
131
198
|
scenarioPatterns: {
|
|
132
199
|
loading: ['isLoading', 'loading', 'isProcessing'],
|
|
@@ -143,6 +210,23 @@ module.exports = {
|
|
|
143
210
|
};
|
|
144
211
|
```
|
|
145
212
|
|
|
213
|
+
**Where the config is found.** sbcov looks in the working directory, then each parent up to the
|
|
214
|
+
repository root (the first directory with `.git`), nearest first. In each directory it tries
|
|
215
|
+
`scry-sbcov.config.js`, `.mjs`, `.cjs`, `.json`, `.scry-sbcov.js`, `.scry-sbcov.json`, then a
|
|
216
|
+
`"scry-sbcov"` key in `package.json`. So a config at the repository root is used when the
|
|
217
|
+
Storybook is built in a subfolder (the deployer runs sbcov in the folder above `--dir`), and a
|
|
218
|
+
package in a monorepo can keep its own. Outside a git checkout only the working directory is read.
|
|
219
|
+
If your `package.json` has `"type": "module"`, use `export default { ... }` or name the file
|
|
220
|
+
`scry-sbcov.config.cjs`.
|
|
221
|
+
|
|
222
|
+
**A config that cannot be used is an error.** A file that throws or does not parse, a key sbcov
|
|
223
|
+
does not know (`Unknown key "captureSacle" in scry-sbcov.config.js; did you mean captureScale?`),
|
|
224
|
+
or a capture value out of range exits 2 before anything is captured. Pass
|
|
225
|
+
`--allow-default-capture` to run without that file instead, with a warning: every setting in it
|
|
226
|
+
(story globs, timeouts, thresholds as well as capture) then uses the defaults. No config at all is
|
|
227
|
+
fine: the settings line says `source=defaults`. A config found in a parent directory is announced
|
|
228
|
+
once; globs and paths in it are still relative to the working directory.
|
|
229
|
+
|
|
146
230
|
You can also add configuration to `package.json`:
|
|
147
231
|
|
|
148
232
|
```json
|
package/dist/cli/config.d.ts
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration file loader for scry-sbcov
|
|
3
|
-
* Supports scry-sbcov.config.js, scry-sbcov.
|
|
3
|
+
* Supports scry-sbcov.config.{js,mjs,cjs,json}, .scry-sbcov.{js,json} and package.json "scry-sbcov",
|
|
4
|
+
* searched from the project directory up to the repository root, nearest first.
|
|
4
5
|
*/
|
|
5
6
|
import type { ScryConfig, CliOptions, CaptureViewport } from '../types/index.js';
|
|
6
7
|
declare const DEFAULT_CONFIG: ScryConfig;
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
+
* The directory that bounds the upward config search: the nearest ancestor (or
|
|
10
|
+
* the directory itself) that holds `.git` (a directory, or a file in a worktree
|
|
11
|
+
* or submodule). Null when the project is not inside a git checkout; the search
|
|
12
|
+
* then looks only in the starting directory, so a stray config in $HOME is never
|
|
13
|
+
* picked up.
|
|
14
|
+
*/
|
|
15
|
+
export declare function findRepositoryRoot(startDir: string): string | null;
|
|
16
|
+
/** Parse --max-dropped: a whole number of stories, or a percentage such as "5%". */
|
|
17
|
+
export declare function parseMaxDropped(value: unknown, where?: string): number | string;
|
|
18
|
+
/**
|
|
19
|
+
* Merge CLI options with config file and defaults.
|
|
20
|
+
*
|
|
21
|
+
* Throws SbcovConfigError (the CLI exits 2) when a config file exists and cannot
|
|
22
|
+
* be used, when --config names a file that does not exist, or when a capture
|
|
23
|
+
* setting is invalid. With `allowDefaultCapture`, a config file that cannot be
|
|
24
|
+
* used is reported as a warning and ignored instead; the run uses the defaults
|
|
25
|
+
* and says so in `captureSource`. A missing config is not an error.
|
|
9
26
|
*/
|
|
10
27
|
export declare function loadConfig(cliOptions: CliOptions, projectPath?: string): Promise<ScryConfig>;
|
|
11
28
|
/** "390x844" → { width: 390, height: 844 }. */
|
package/dist/cli/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAElG,QAAA,MAAM,cAAc,EAAE,UAmCrB,CAAC;AA4BF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQlE;AAsLD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAkB,GAAG,MAAM,GAAG,MAAM,CAYxF;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,UAAU,CAAC,CA8HrB;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAI5D;AAoDD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/cli/config.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration file loader for scry-sbcov
|
|
3
|
-
* Supports scry-sbcov.config.js, scry-sbcov.
|
|
3
|
+
* Supports scry-sbcov.config.{js,mjs,cjs,json}, .scry-sbcov.{js,json} and package.json "scry-sbcov",
|
|
4
|
+
* searched from the project directory up to the repository root, nearest first.
|
|
4
5
|
*/
|
|
5
6
|
import * as fs from 'node:fs';
|
|
6
7
|
import * as path from 'node:path';
|
|
7
8
|
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import { SbcovConfigError } from '../core/errors.js';
|
|
8
10
|
const DEFAULT_CONFIG = {
|
|
9
11
|
include: ['**/*.tsx', '**/*.jsx'],
|
|
10
12
|
// node_modules is also excluded by discovery itself (see core/vendor-paths.ts)
|
|
@@ -41,95 +43,281 @@ const DEFAULT_CONFIG = {
|
|
|
41
43
|
},
|
|
42
44
|
componentStoryMapping: {},
|
|
43
45
|
};
|
|
46
|
+
const CONFIG_FILE_NAMES = [
|
|
47
|
+
'scry-sbcov.config.js',
|
|
48
|
+
'scry-sbcov.config.mjs',
|
|
49
|
+
'scry-sbcov.config.cjs',
|
|
50
|
+
'scry-sbcov.config.json',
|
|
51
|
+
'.scry-sbcov.js',
|
|
52
|
+
'.scry-sbcov.json',
|
|
53
|
+
];
|
|
54
|
+
/** Keys a config file may set: everything in DEFAULT_CONFIG. */
|
|
55
|
+
/** Keys a config file may set: everything in DEFAULT_CONFIG, plus the optional ones with no default. */
|
|
56
|
+
const KNOWN_KEYS = new Set(Object.keys(DEFAULT_CONFIG).concat('maxDropped'));
|
|
57
|
+
/** Nested objects whose own keys are checked too; the others are free-form maps. */
|
|
58
|
+
const KNOWN_NESTED_KEYS = {
|
|
59
|
+
thresholds: new Set(Object.keys(DEFAULT_CONFIG.thresholds)),
|
|
60
|
+
captureViewport: new Set(['width', 'height']),
|
|
61
|
+
};
|
|
62
|
+
const CAPTURE_KEYS = ['captureMode', 'captureViewport', 'captureScale'];
|
|
63
|
+
/**
|
|
64
|
+
* The directory that bounds the upward config search: the nearest ancestor (or
|
|
65
|
+
* the directory itself) that holds `.git` (a directory, or a file in a worktree
|
|
66
|
+
* or submodule). Null when the project is not inside a git checkout; the search
|
|
67
|
+
* then looks only in the starting directory, so a stray config in $HOME is never
|
|
68
|
+
* picked up.
|
|
69
|
+
*/
|
|
70
|
+
export function findRepositoryRoot(startDir) {
|
|
71
|
+
let dir = path.resolve(startDir);
|
|
72
|
+
for (;;) {
|
|
73
|
+
if (fs.existsSync(path.join(dir, '.git')))
|
|
74
|
+
return dir;
|
|
75
|
+
const parent = path.dirname(dir);
|
|
76
|
+
if (parent === dir)
|
|
77
|
+
return null;
|
|
78
|
+
dir = parent;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Directories to search, nearest first: startDir, then each parent up to the repo root. */
|
|
82
|
+
function searchDirs(startDir) {
|
|
83
|
+
const start = path.resolve(startDir);
|
|
84
|
+
const root = findRepositoryRoot(start);
|
|
85
|
+
if (!root)
|
|
86
|
+
return [start];
|
|
87
|
+
const dirs = [];
|
|
88
|
+
let dir = start;
|
|
89
|
+
for (;;) {
|
|
90
|
+
dirs.push(dir);
|
|
91
|
+
if (dir === root)
|
|
92
|
+
break;
|
|
93
|
+
const parent = path.dirname(dir);
|
|
94
|
+
if (parent === dir)
|
|
95
|
+
break;
|
|
96
|
+
dir = parent;
|
|
97
|
+
}
|
|
98
|
+
return dirs;
|
|
99
|
+
}
|
|
100
|
+
/** How a config path is shown: relative to the repo root when inside one, else to the project. */
|
|
101
|
+
function displayPathFor(absolutePath, projectPath) {
|
|
102
|
+
const base = findRepositoryRoot(projectPath) ?? path.resolve(projectPath);
|
|
103
|
+
const rel = path.relative(base, absolutePath);
|
|
104
|
+
return rel && !rel.startsWith('..') && !path.isAbsolute(rel) ? toPosix(rel) : toPosix(absolutePath);
|
|
105
|
+
}
|
|
106
|
+
function toPosix(value) {
|
|
107
|
+
return value.split(path.sep).join('/');
|
|
108
|
+
}
|
|
109
|
+
function firstLine(error) {
|
|
110
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
111
|
+
return message.split('\n')[0];
|
|
112
|
+
}
|
|
113
|
+
/** Levenshtein distance, for "did you mean" on a misspelt key. */
|
|
114
|
+
function editDistance(a, b) {
|
|
115
|
+
const row = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
116
|
+
for (let i = 1; i <= a.length; i++) {
|
|
117
|
+
let prev = row[0];
|
|
118
|
+
row[0] = i;
|
|
119
|
+
for (let j = 1; j <= b.length; j++) {
|
|
120
|
+
const cur = row[j];
|
|
121
|
+
row[j] = Math.min(row[j] + 1, row[j - 1] + 1, prev + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
122
|
+
prev = cur;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return row[b.length];
|
|
126
|
+
}
|
|
127
|
+
function suggestKey(key, known) {
|
|
128
|
+
let best = null;
|
|
129
|
+
let bestDistance = Infinity;
|
|
130
|
+
for (const candidate of known) {
|
|
131
|
+
const d = candidate.toLowerCase() === key.toLowerCase() ? 0 : editDistance(key, candidate);
|
|
132
|
+
if (d < bestDistance) {
|
|
133
|
+
best = candidate;
|
|
134
|
+
bestDistance = d;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return best !== null && bestDistance <= Math.max(2, Math.floor(key.length / 4)) ? best : null;
|
|
138
|
+
}
|
|
139
|
+
/** Reject keys sbcov does not know, naming the file and suggesting the near miss. */
|
|
140
|
+
function checkKeys(values, displayPath) {
|
|
141
|
+
for (const key of Object.keys(values)) {
|
|
142
|
+
if (!KNOWN_KEYS.has(key)) {
|
|
143
|
+
const suggestion = suggestKey(key, KNOWN_KEYS);
|
|
144
|
+
throw new SbcovConfigError(`Unknown key "${key}" in ${displayPath}${suggestion ? `; did you mean ${suggestion}?` : ''}`, { file: displayPath, key });
|
|
145
|
+
}
|
|
146
|
+
const nestedKnown = KNOWN_NESTED_KEYS[key];
|
|
147
|
+
const nested = values[key];
|
|
148
|
+
if (nestedKnown && nested !== null && typeof nested === 'object') {
|
|
149
|
+
for (const inner of Object.keys(nested)) {
|
|
150
|
+
if (!nestedKnown.has(inner)) {
|
|
151
|
+
const suggestion = suggestKey(inner, nestedKnown);
|
|
152
|
+
throw new SbcovConfigError(`Unknown key "${key}.${inner}" in ${displayPath}${suggestion ? `; did you mean ${key}.${suggestion}?` : ''}`, { file: displayPath, key: `${key}.${inner}` });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function asConfigObject(value, displayPath) {
|
|
159
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
160
|
+
throw new SbcovConfigError(`${displayPath} does not export a config object (got ${value === null ? 'null' : Array.isArray(value) ? 'an array' : typeof value})`, { file: displayPath });
|
|
161
|
+
}
|
|
162
|
+
const values = { ...value };
|
|
163
|
+
// An ES module namespace for a CommonJS file carries both the named keys and `default`.
|
|
164
|
+
delete values['default'];
|
|
165
|
+
delete values['module.exports'];
|
|
166
|
+
checkKeys(values, displayPath);
|
|
167
|
+
return values;
|
|
168
|
+
}
|
|
44
169
|
/**
|
|
45
|
-
* Load
|
|
170
|
+
* Load one config file. Returns null only when the file does not exist; a file
|
|
171
|
+
* that exists and cannot be used throws SbcovConfigError naming it.
|
|
46
172
|
*/
|
|
47
|
-
async function loadConfigFile(
|
|
48
|
-
const absolutePath = path.isAbsolute(configPath)
|
|
49
|
-
? configPath
|
|
50
|
-
: path.resolve(process.cwd(), configPath);
|
|
173
|
+
async function loadConfigFile(absolutePath, projectPath) {
|
|
51
174
|
if (!fs.existsSync(absolutePath)) {
|
|
52
175
|
return null;
|
|
53
176
|
}
|
|
177
|
+
const displayPath = displayPathFor(absolutePath, projectPath);
|
|
178
|
+
let raw;
|
|
54
179
|
try {
|
|
55
|
-
// ES module import for .js and .mjs files
|
|
56
|
-
if (absolutePath.endsWith('.js') || absolutePath.endsWith('.mjs')) {
|
|
57
|
-
const fileUrl = pathToFileURL(absolutePath).href;
|
|
58
|
-
const module = await import(fileUrl);
|
|
59
|
-
return module.default || module;
|
|
60
|
-
}
|
|
61
|
-
// JSON files
|
|
62
180
|
if (absolutePath.endsWith('.json')) {
|
|
63
|
-
|
|
64
|
-
|
|
181
|
+
raw = JSON.parse(fs.readFileSync(absolutePath, 'utf-8'));
|
|
182
|
+
}
|
|
183
|
+
else if (/\.(c|m)?js$/.test(absolutePath)) {
|
|
184
|
+
const module = await import(pathToFileURL(absolutePath).href);
|
|
185
|
+
raw = module.default ?? module;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
throw new Error('unsupported config file extension (use .js, .mjs, .cjs or .json)');
|
|
65
189
|
}
|
|
66
|
-
return null;
|
|
67
190
|
}
|
|
68
191
|
catch (error) {
|
|
69
|
-
|
|
70
|
-
|
|
192
|
+
const hint = /module is not defined in ES module scope|require is not defined in ES module scope/.test(firstLine(error))
|
|
193
|
+
? ' (the nearest package.json has "type": "module"; rename the file to scry-sbcov.config.cjs or use export default)'
|
|
194
|
+
: '';
|
|
195
|
+
throw new SbcovConfigError(`Could not load ${displayPath}: ${firstLine(error)}${hint}`, { file: displayPath, cause: error });
|
|
71
196
|
}
|
|
197
|
+
const values = asConfigObject(raw, displayPath);
|
|
198
|
+
return { values, absolutePath, displayPath };
|
|
72
199
|
}
|
|
73
200
|
/**
|
|
74
|
-
*
|
|
201
|
+
* Read a "scry-sbcov" key from package.json. A package.json that does not parse
|
|
202
|
+
* is only an error when it mentions "scry-sbcov": otherwise it cannot hold our
|
|
203
|
+
* config, and whatever else is wrong with it is not ours to report.
|
|
75
204
|
*/
|
|
76
|
-
function loadPackageJsonConfig(projectPath) {
|
|
77
|
-
const packageJsonPath = path.join(
|
|
205
|
+
function loadPackageJsonConfig(dir, projectPath) {
|
|
206
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
78
207
|
if (!fs.existsSync(packageJsonPath)) {
|
|
79
208
|
return null;
|
|
80
209
|
}
|
|
210
|
+
const displayPath = displayPathFor(packageJsonPath, projectPath);
|
|
211
|
+
const content = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
212
|
+
let packageJson;
|
|
81
213
|
try {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
214
|
+
packageJson = JSON.parse(content);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
if (!content.includes('"scry-sbcov"'))
|
|
218
|
+
return null;
|
|
219
|
+
throw new SbcovConfigError(`Could not read the "scry-sbcov" key in ${displayPath}: ${firstLine(error)}`, { file: displayPath, key: 'scry-sbcov', cause: error });
|
|
85
220
|
}
|
|
86
|
-
|
|
221
|
+
if (!packageJson || typeof packageJson !== 'object' || !('scry-sbcov' in packageJson)) {
|
|
87
222
|
return null;
|
|
88
223
|
}
|
|
224
|
+
const values = asConfigObject(packageJson['scry-sbcov'], `${displayPath} "scry-sbcov"`);
|
|
225
|
+
return { values, absolutePath: packageJsonPath, displayPath: `${displayPath} "scry-sbcov"` };
|
|
89
226
|
}
|
|
90
227
|
/**
|
|
91
|
-
* Find and load configuration automatically
|
|
228
|
+
* Find and load configuration automatically: from projectPath up to the
|
|
229
|
+
* repository root, nearest first; in each directory the config files in
|
|
230
|
+
* CONFIG_FILE_NAMES order, then package.json's "scry-sbcov" key.
|
|
231
|
+
*
|
|
232
|
+
* The deployer runs sbcov with cwd = dirname(--dir), so a config at the repo
|
|
233
|
+
* root was never found for a Storybook built in a subfolder (ISSUES.md #51).
|
|
92
234
|
*/
|
|
93
235
|
async function autoLoadConfig(projectPath) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
'.scry-sbcov.json',
|
|
100
|
-
];
|
|
101
|
-
for (const configFile of configFiles) {
|
|
102
|
-
const configPath = path.join(projectPath, configFile);
|
|
103
|
-
if (fs.existsSync(configPath)) {
|
|
104
|
-
const config = await loadConfigFile(configPath);
|
|
105
|
-
if (config) {
|
|
106
|
-
return config;
|
|
107
|
-
}
|
|
236
|
+
for (const dir of searchDirs(projectPath)) {
|
|
237
|
+
for (const name of CONFIG_FILE_NAMES) {
|
|
238
|
+
const loaded = await loadConfigFile(path.join(dir, name), projectPath);
|
|
239
|
+
if (loaded)
|
|
240
|
+
return loaded;
|
|
108
241
|
}
|
|
242
|
+
const fromPackageJson = loadPackageJsonConfig(dir, projectPath);
|
|
243
|
+
if (fromPackageJson)
|
|
244
|
+
return fromPackageJson;
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
/** Parse --max-dropped: a whole number of stories, or a percentage such as "5%". */
|
|
249
|
+
export function parseMaxDropped(value, where = '--max-dropped') {
|
|
250
|
+
if (typeof value === 'number' && Number.isInteger(value) && value >= 0)
|
|
251
|
+
return value;
|
|
252
|
+
if (typeof value === 'string') {
|
|
253
|
+
const trimmed = value.trim();
|
|
254
|
+
if (/^\d+$/.test(trimmed))
|
|
255
|
+
return Number(trimmed);
|
|
256
|
+
const pct = /^(\d+(?:\.\d+)?)\s*%$/.exec(trimmed);
|
|
257
|
+
if (pct && Number(pct[1]) <= 100)
|
|
258
|
+
return `${Number(pct[1])}%`;
|
|
109
259
|
}
|
|
110
|
-
|
|
111
|
-
return loadPackageJsonConfig(projectPath);
|
|
260
|
+
throw new SbcovConfigError(`Invalid ${where} ${JSON.stringify(value)}: expected a whole number of stories (e.g. 0, 5) or a percentage (e.g. 5%)`, { key: 'maxDropped' });
|
|
112
261
|
}
|
|
113
262
|
/**
|
|
114
|
-
* Merge CLI options with config file and defaults
|
|
263
|
+
* Merge CLI options with config file and defaults.
|
|
264
|
+
*
|
|
265
|
+
* Throws SbcovConfigError (the CLI exits 2) when a config file exists and cannot
|
|
266
|
+
* be used, when --config names a file that does not exist, or when a capture
|
|
267
|
+
* setting is invalid. With `allowDefaultCapture`, a config file that cannot be
|
|
268
|
+
* used is reported as a warning and ignored instead; the run uses the defaults
|
|
269
|
+
* and says so in `captureSource`. A missing config is not an error.
|
|
115
270
|
*/
|
|
116
271
|
export async function loadConfig(cliOptions, projectPath = process.cwd()) {
|
|
117
|
-
// Start with defaults
|
|
118
|
-
let config = {
|
|
272
|
+
// Start with defaults (nested objects copied, so a run never mutates DEFAULT_CONFIG)
|
|
273
|
+
let config = {
|
|
274
|
+
...DEFAULT_CONFIG,
|
|
275
|
+
thresholds: { ...DEFAULT_CONFIG.thresholds },
|
|
276
|
+
captureViewport: { ...DEFAULT_CONFIG.captureViewport },
|
|
277
|
+
};
|
|
119
278
|
// Load from config file if specified, or auto-detect
|
|
120
|
-
let
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
279
|
+
let loaded = null;
|
|
280
|
+
try {
|
|
281
|
+
if (cliOptions.config) {
|
|
282
|
+
const absolutePath = path.isAbsolute(cliOptions.config)
|
|
283
|
+
? cliOptions.config
|
|
284
|
+
: path.resolve(process.cwd(), cliOptions.config);
|
|
285
|
+
loaded = await loadConfigFile(absolutePath, projectPath);
|
|
286
|
+
if (!loaded) {
|
|
287
|
+
throw new SbcovConfigError(`Config file ${cliOptions.config} (--config) does not exist`, { file: cliOptions.config });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
loaded = await autoLoadConfig(projectPath);
|
|
292
|
+
}
|
|
293
|
+
if (loaded) {
|
|
294
|
+
// Capture values from the file are checked here, before flags can mask them,
|
|
295
|
+
// so a bad value is blamed on the file that holds it.
|
|
296
|
+
validateCapture(mergeConfig(config, loaded.values), loaded.displayPath);
|
|
297
|
+
if (loaded.values.maxDropped !== undefined) {
|
|
298
|
+
parseMaxDropped(loaded.values.maxDropped, `maxDropped in ${loaded.displayPath}`);
|
|
299
|
+
}
|
|
125
300
|
}
|
|
126
301
|
}
|
|
127
|
-
|
|
128
|
-
|
|
302
|
+
catch (error) {
|
|
303
|
+
if (!(error instanceof SbcovConfigError))
|
|
304
|
+
throw error;
|
|
305
|
+
if (!cliOptions.allowDefaultCapture) {
|
|
306
|
+
// Everything thrown in here is about a config file, which --allow-default-capture can set aside.
|
|
307
|
+
throw new SbcovConfigError(error.message, { file: error.file, key: error.key, cause: error.cause, fromFile: true });
|
|
308
|
+
}
|
|
309
|
+
console.warn(`sbcov: WARNING ${error.message}. Because of --allow-default-capture the run continues without ` +
|
|
310
|
+
`${error.file ?? 'the config'}: every setting in it (story globs, timeouts, thresholds as well as capture) uses the defaults.`);
|
|
311
|
+
loaded = null;
|
|
312
|
+
}
|
|
313
|
+
if (loaded && path.dirname(loaded.absolutePath) !== path.resolve(projectPath)) {
|
|
314
|
+
// Found above the working directory (the deployer runs sbcov in dirname(--dir)).
|
|
315
|
+
// Globs and paths in it still resolve against the working directory; say so once.
|
|
316
|
+
console.warn(`sbcov: using ${loaded.displayPath} from a parent directory; paths and globs in it are relative to ${path.resolve(projectPath)}`);
|
|
129
317
|
}
|
|
130
318
|
// Merge file config
|
|
131
|
-
if (
|
|
132
|
-
config = mergeConfig(config,
|
|
319
|
+
if (loaded) {
|
|
320
|
+
config = mergeConfig(config, loaded.values);
|
|
133
321
|
}
|
|
134
322
|
// Override with CLI options
|
|
135
323
|
if (cliOptions.include) {
|
|
@@ -154,6 +342,7 @@ export async function loadConfig(cliOptions, projectPath = process.cwd()) {
|
|
|
154
342
|
config.execute = true;
|
|
155
343
|
config.captureAllScreenshots = true;
|
|
156
344
|
}
|
|
345
|
+
const captureFlags = cliOptions.captureMode !== undefined || cliOptions.captureViewport !== undefined || cliOptions.captureScale !== undefined;
|
|
157
346
|
if (cliOptions.captureMode !== undefined) {
|
|
158
347
|
config.captureMode = cliOptions.captureMode;
|
|
159
348
|
}
|
|
@@ -173,7 +362,10 @@ export async function loadConfig(cliOptions, projectPath = process.cwd()) {
|
|
|
173
362
|
config.outputPath = cliOptions.output;
|
|
174
363
|
}
|
|
175
364
|
if (cliOptions.outputZip) {
|
|
365
|
+
// An archive is only ever useful with screenshots in it; without them every
|
|
366
|
+
// passing story would be reported as dropped (no_image).
|
|
176
367
|
config.execute = true;
|
|
368
|
+
config.captureAllScreenshots = true;
|
|
177
369
|
config.outputZip = cliOptions.outputZip;
|
|
178
370
|
}
|
|
179
371
|
if (cliOptions.thresholdComponent !== undefined) {
|
|
@@ -182,27 +374,39 @@ export async function loadConfig(cliOptions, projectPath = process.cwd()) {
|
|
|
182
374
|
if (cliOptions.thresholdNewCode !== undefined) {
|
|
183
375
|
config.thresholds.newCodeCoverage = cliOptions.thresholdNewCode;
|
|
184
376
|
}
|
|
185
|
-
|
|
377
|
+
// No threshold unless one is set (Gate A D1 is enforced by the deployer, which
|
|
378
|
+
// passes --max-dropped 0): an installed deployer < 0.7.0 swallows any non-zero
|
|
379
|
+
// sbcov exit and would then upload no archive at all.
|
|
380
|
+
const maxDropped = cliOptions.maxDropped ?? config.maxDropped;
|
|
381
|
+
config.maxDropped = maxDropped === undefined
|
|
382
|
+
? undefined
|
|
383
|
+
: parseMaxDropped(maxDropped, cliOptions.maxDropped !== undefined ? '--max-dropped' : `maxDropped in ${loaded?.displayPath ?? 'config'}`);
|
|
384
|
+
const fileWithCapture = loaded && CAPTURE_KEYS.some((key) => loaded?.values[key] !== undefined) ? loaded.displayPath : null;
|
|
385
|
+
config.captureSource = captureFlags
|
|
386
|
+
? (fileWithCapture ? `flags + ${fileWithCapture}` : 'flags')
|
|
387
|
+
: (fileWithCapture ?? 'defaults');
|
|
388
|
+
validateCapture(config, captureFlags ? 'the capture flags' : undefined);
|
|
186
389
|
return config;
|
|
187
390
|
}
|
|
188
391
|
/** "390x844" → { width: 390, height: 844 }. */
|
|
189
392
|
export function parseViewport(value) {
|
|
190
393
|
const m = /^\s*(\d+)\s*[xX×]\s*(\d+)\s*$/.exec(value);
|
|
191
394
|
if (!m)
|
|
192
|
-
throw new
|
|
395
|
+
throw new SbcovConfigError(`Invalid --capture-viewport "${value}": expected WIDTHxHEIGHT, e.g. 390x844`);
|
|
193
396
|
return { width: Number(m[1]), height: Number(m[2]) };
|
|
194
397
|
}
|
|
195
398
|
/** Reject capture settings that would produce nothing or something unexpected, whatever their source. */
|
|
196
|
-
function validateCapture(config) {
|
|
399
|
+
function validateCapture(config, source) {
|
|
400
|
+
const where = source ? ` in ${source}` : '';
|
|
197
401
|
if (config.captureMode !== 'viewport' && config.captureMode !== 'root') {
|
|
198
|
-
throw new
|
|
402
|
+
throw new SbcovConfigError(`Invalid captureMode "${String(config.captureMode)}"${where}: expected "viewport" or "root"`, { file: source ?? null, key: 'captureMode' });
|
|
199
403
|
}
|
|
200
404
|
const v = config.captureViewport;
|
|
201
405
|
if (!v || !Number.isInteger(v.width) || !Number.isInteger(v.height) || v.width < 1 || v.height < 1) {
|
|
202
|
-
throw new
|
|
406
|
+
throw new SbcovConfigError(`Invalid captureViewport ${JSON.stringify(v)}${where}: expected { width, height } in whole CSS px`, { file: source ?? null, key: 'captureViewport' });
|
|
203
407
|
}
|
|
204
408
|
if (typeof config.captureScale !== 'number' || !(config.captureScale > 0) || config.captureScale > 4) {
|
|
205
|
-
throw new
|
|
409
|
+
throw new SbcovConfigError(`Invalid captureScale ${String(config.captureScale)}${where}: expected a number in (0, 4]`, { file: source ?? null, key: 'captureScale' });
|
|
206
410
|
}
|
|
207
411
|
}
|
|
208
412
|
/**
|
package/dist/cli/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,cAAc,GAAe;IACjC,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,+EAA+E;IAC/E,8EAA8E;IAC9E,OAAO,EAAE,CAAC,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;IACzK,aAAa,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;IAC7F,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,IAAI;IACvB,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,uBAAuB;IACrC,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE,KAAK;IACvB,qBAAqB,EAAE,KAAK;IAC5B,WAAW,EAAE,UAAU;IACvB,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC7C,YAAY,EAAE,CAAC;IACf,UAAU,EAAE;QACV,iBAAiB,EAAE,EAAE;QACrB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,EAAE;KACpB;IACD,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE;QAChB,OAAO,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,CAAC;QAC1E,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC;QACpE,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QAChD,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;QACpC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC;QAClD,OAAO,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC;QACvD,QAAQ,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC;QAC5D,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;KAC/B;IACD,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,wBAAwB;IACxB,gBAAgB;IAChB,kBAAkB;CACV,CAAC;AAEX,gEAAgE;AAChE,wGAAwG;AACxG,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAClG,oFAAoF;AACpF,MAAM,iBAAiB,GAAwC;IAC7D,UAAU,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3D,eAAe,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;CAC9C,CAAC;AACF,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,cAAc,CAAU,CAAC;AASjF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,SAAS,CAAC;QACR,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,SAAS,UAAU,CAAC,QAAgB;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,SAAS,cAAc,CAAC,YAAoB,EAAE,WAAmB;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAA0B;IACzD,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,YAAY,GAAG,QAAQ,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC;YACrB,IAAI,GAAG,SAAS,CAAC;YACjB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC;AAED,qFAAqF;AACrF,SAAS,SAAS,CAAC,MAA+B,EAAE,WAAmB;IACrE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC/C,MAAM,IAAI,gBAAgB,CACxB,gBAAgB,GAAG,QAAQ,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,kBAAkB,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAC3B,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,WAAW,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAiC,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBAClD,MAAM,IAAI,gBAAgB,CACxB,gBAAgB,GAAG,IAAI,KAAK,QAAQ,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,kBAAkB,GAAG,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAC5G,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,EAAE,CAC9C,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,WAAmB;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,gBAAgB,CACxB,GAAG,WAAW,yCAAyC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,EACpI,EAAE,IAAI,EAAE,WAAW,EAAE,CACtB,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,GAAI,KAAiC,EAAE,CAAC;IACzD,wFAAwF;IACxF,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/B,OAAO,MAA6B,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,WAAmB;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE9D,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9D,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,oFAAoF,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtH,CAAC,CAAC,kHAAkH;YACpH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,WAAW,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/H,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,GAAW,EAAE,WAAmB;IAC7D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,WAAoC,CAAC;IACzC,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,IAAI,gBAAgB,CAAC,0CAA0C,WAAW,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnK,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,GAAG,WAAW,eAAe,CAAC,CAAC;IACxF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,WAAW,eAAe,EAAE,CAAC;AAC/F,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc,CAAC,WAAmB;IAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;YACvE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,KAAK,GAAG,eAAe;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;YAAE,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,gBAAgB,CACxB,WAAW,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,4EAA4E,EACrH,EAAE,GAAG,EAAE,YAAY,EAAE,CACtB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAsB,EACtB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,qFAAqF;IACrF,IAAI,MAAM,GAAe;QACvB,GAAG,cAAc;QACjB,UAAU,EAAE,EAAE,GAAG,cAAc,CAAC,UAAU,EAAE;QAC5C,eAAe,EAAE,EAAE,GAAG,cAAc,CAAC,eAAe,EAAE;KACvD,CAAC;IAEF,qDAAqD;IACrD,IAAI,MAAM,GAA4B,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;gBACrD,CAAC,CAAC,UAAU,CAAC,MAAM;gBACnB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,gBAAgB,CAAC,eAAe,UAAU,CAAC,MAAM,4BAA4B,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACxH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,6EAA6E;YAC7E,sDAAsD;YACtD,eAAe,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC3C,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC;YAAE,MAAM,KAAK,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;YACpC,iGAAiG;YACjG,MAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,CAAC;QACD,OAAO,CAAC,IAAI,CACV,kBAAkB,KAAK,CAAC,OAAO,iEAAiE;YAC9F,GAAG,KAAK,CAAC,IAAI,IAAI,YAAY,iGAAiG,CACjI,CAAC;QACF,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9E,iFAAiF;QACjF,kFAAkF;QAClF,OAAO,CAAC,IAAI,CACV,gBAAgB,MAAM,CAAC,WAAW,mEAAmE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CACjI,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,4BAA4B;IAC5B,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;IACtC,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACtC,CAAC;IACD,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC;IAC/I,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,WAAwC,CAAC;IAC3E,CAAC;IACD,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAChD,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAChD,CAAC;IACD,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAC/B,MAAM,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC;IACzD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;IACxC,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,4EAA4E;QAC5E,yDAAyD;QACzD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IAC1C,CAAC;IACD,IAAI,UAAU,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,iBAAiB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IACtE,CAAC;IACD,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,eAAe,GAAG,UAAU,CAAC,gBAAgB,CAAC;IAClE,CAAC;IACD,+EAA+E;IAC/E,+EAA+E;IAC/E,sDAAsD;IACtD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAC9D,MAAM,CAAC,UAAU,GAAG,UAAU,KAAK,SAAS;QAC1C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,MAAM,EAAE,WAAW,IAAI,QAAQ,EAAE,CAAC,CAAC;IAE5I,MAAM,eAAe,GAAG,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5H,MAAM,CAAC,aAAa,GAAG,YAAY;QACjC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,CAAC,CAAC,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC;IAEpC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,CAAC,GAAG,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,KAAK,wCAAwC,CAAC,CAAC;IACjH,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,yGAAyG;AACzG,SAAS,eAAe,CAAC,MAAkB,EAAE,MAAe;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACvE,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,iCAAiC,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IACzK,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;IACjC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,8CAA8C,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACnL,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACrG,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,+BAA+B,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;IACxK,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAgB,EAAE,QAA6B;IAClE,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAyB,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAElC,IAAI,GAAG,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,CAAC,UAAU,GAAG;gBAClB,GAAG,IAAI,CAAC,UAAU;gBAClB,GAAI,KAAkC;aACvC,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,KAAK,kBAAkB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,CAAC,gBAAgB,GAAG;gBACxB,GAAG,IAAI,CAAC,gBAAgB;gBACxB,GAAI,KAAkC;aACvC,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,KAAK,iBAAiB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAI,KAAkC,EAAE,CAAC;QAC/F,CAAC;aAAM,IAAI,GAAG,KAAK,uBAAuB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxE,MAAM,CAAC,qBAAqB,GAAG;gBAC7B,GAAG,IAAI,CAAC,qBAAqB;gBAC7B,GAAI,KAAgC;aACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACL,MAAkC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|