@vibe-agent-toolkit/utils 0.1.42 → 0.2.0-rc.1
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 +19 -3
- package/dist/file-crawler.d.ts.map +1 -1
- package/dist/file-crawler.js +88 -2
- package/dist/file-crawler.js.map +1 -1
- package/dist/fs-utils.d.ts +389 -30
- package/dist/fs-utils.d.ts.map +1 -1
- package/dist/fs-utils.js +425 -56
- package/dist/fs-utils.js.map +1 -1
- package/dist/fs.d.ts +2 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +7 -1
- package/dist/fs.js.map +1 -1
- package/dist/git-root-cache.d.ts +44 -0
- package/dist/git-root-cache.d.ts.map +1 -0
- package/dist/git-root-cache.js +68 -0
- package/dist/git-root-cache.js.map +1 -0
- package/dist/git-utils.d.ts +11 -0
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +28 -8
- package/dist/git-utils.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/numeric-args.d.ts +24 -0
- package/dist/numeric-args.d.ts.map +1 -0
- package/dist/numeric-args.js +37 -0
- package/dist/numeric-args.js.map +1 -0
- package/dist/path-core.d.ts +30 -0
- package/dist/path-core.d.ts.map +1 -1
- package/dist/path-core.js +32 -0
- package/dist/path-core.js.map +1 -1
- package/dist/path.d.ts +1 -1
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +1 -1
- package/dist/path.js.map +1 -1
- package/dist/project-utils.d.ts +7 -1
- package/dist/project-utils.d.ts.map +1 -1
- package/dist/project-utils.js +9 -1
- package/dist/project-utils.js.map +1 -1
- package/dist/test-helpers.d.ts +16 -0
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +28 -1
- package/dist/test-helpers.js.map +1 -1
- package/eslint/README.md +1 -1
- package/eslint/rules/dead-import.cjs +61 -11
- package/eslint/rules/eslint-rule-factory.cjs +16 -1
- package/eslint/rules/no-manual-path-normalize.cjs +24 -3
- package/eslint/rules/path-function-rule-factory.cjs +99 -20
- package/eslint/rules/prefer-startswith-over-regex.cjs +24 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,10 +22,10 @@ The last two columns are the ones that matter when choosing. **"Resolves with ze
|
|
|
22
22
|
|
|
23
23
|
| Subpath | Contents | Node builtins reached | Third-party | Resolves with zero deps installed? |
|
|
24
24
|
|---|---|---|---|---|
|
|
25
|
-
| `./path` | `safePath`, `toForwardSlash`, `isAbsolutePath`, `isAbsoluteAnyPlatform`, `hasParentTraversalSegment`, `toAbsolutePath`, `getRelativePath`, `issueLocation` | `path` only | — | **yes** |
|
|
25
|
+
| `./path` | `safePath`, `toForwardSlash`, `toNfc`, `isAbsolutePath`, `isAbsoluteAnyPlatform`, `hasParentTraversalSegment`, `toAbsolutePath`, `getRelativePath`, `issueLocation` | `path` only | — | **yes** |
|
|
26
26
|
| `./zod` | `ZodTypeNames`, `getZodTypeName`, `isZodType`, `unwrapZodType`, `isZodOptional`, `isZodNullable` | **none** | — | **yes** |
|
|
27
27
|
| `./glob` | `isGlob`, static base extraction, magic remainder | `path` only | — | **yes** |
|
|
28
|
-
| `./fs` | `normalizePath`, `normalizedTmpdir`, `mkdirSyncReal`, `resolveFromImportMeta`, `dynamicImportPath`, `copyDirectory`, `
|
|
28
|
+
| `./fs` | `normalizePath`, `normalizedTmpdir`, `mkdirSyncReal`, `resolveFromImportMeta`, `dynamicImportPath`, `copyDirectory`, `fillSiblingNames`, `classifyFilenameCaseFrom`, `FsLookupCache` | `fs`, `fs/promises`, `os`, `path`, `url` | — | **yes** |
|
|
29
29
|
| `./testing` | `getTestOutputDir`, `getTestOutputBase`, `setupAsyncTempDirSuite`, `setupSyncTempDirSuite` | `crypto`, `fs`, `fs/promises`, `os`, `path`, `url` | — | **yes** |
|
|
30
30
|
| `./asset` | `resolveAssetReference` — paths and npm bare specifiers | `fs`, `module`, `os`, `path`, `url` | — | **yes** |
|
|
31
31
|
| `./yaml` | `updateYamlIn`, `verifyConfinedYamlEdit` — byte-surgical YAML edits | **none** | `yaml` | no — needs `yaml` |
|
|
@@ -120,12 +120,24 @@ These always return forward slashes on every platform, so they are safe for comp
|
|
|
120
120
|
|
|
121
121
|
- `safePath.join()` / `.resolve()` / `.relative()` - forward-slash equivalents of the `node:path` functions
|
|
122
122
|
- `toForwardSlash()` - explicit converter for any path string
|
|
123
|
+
- `toNfc()` - Unicode-NFC normalizer for filename **comparison keys** (see the warning below)
|
|
123
124
|
- `toAbsolutePath()` - resolve a path relative to a base directory
|
|
124
125
|
- `getRelativePath()` - relative path between two absolute paths
|
|
125
126
|
- `isAbsolutePath()` / `isAbsoluteAnyPlatform()` - absolute-path predicates
|
|
126
127
|
- `hasParentTraversalSegment()` - detect `..` segments before using a caller-supplied path
|
|
127
128
|
- `issueLocation()` - format a `file:line`-style location relative to a project root
|
|
128
129
|
|
|
130
|
+
⚠️ **`toNfc()` produces a comparison key, never a path to open.** The same visible filename has two
|
|
131
|
+
Unicode encodings — precomposed NFC (`é` = `U+00E9`) and decomposed NFD (`e` + `U+0301`). They are
|
|
132
|
+
different strings, so `===`, `toLowerCase()`, `Map.get()` and `Set.has()` all call them different,
|
|
133
|
+
and `readdir` returns whichever form is on disk (commonly decomposed on macOS) while a markdown link
|
|
134
|
+
typed in an editor carries the composed one. Normalize wherever two such strings are **compared** —
|
|
135
|
+
a `Map` key derived from enumeration and queried from link text, a basename checked against a
|
|
136
|
+
directory listing. Do **not** normalize a path on its way to `fs.*`: macOS would not notice (its
|
|
137
|
+
lookup is normalization-insensitive), but on Linux the two forms are different byte sequences naming
|
|
138
|
+
different files, so opening the normalized form of a decomposed filename fails outright. That is why
|
|
139
|
+
this is a separate helper rather than something `safePath.resolve()` does.
|
|
140
|
+
|
|
129
141
|
### Filesystem — `@vibe-agent-toolkit/utils/fs`
|
|
130
142
|
|
|
131
143
|
These return **OS-native** separators, because they resolve real filesystem identity via `realpathSync.native()` (which is what resolves Windows 8.3 short names). Wrap with `toForwardSlash()` if you need forward slashes.
|
|
@@ -138,7 +150,11 @@ These return **OS-native** separators, because they resolve real filesystem iden
|
|
|
138
150
|
- `resolveFromImportMeta()` - resolve paths relative to an `import.meta.url`
|
|
139
151
|
- `dynamicImportPath()` - `import()` an absolute path (works on Windows, which rejects bare absolute paths)
|
|
140
152
|
- `copyDirectory()`
|
|
141
|
-
- `
|
|
153
|
+
- `fillSiblingNames(filePaths, fsCache)` - pass 1 of the case-exact existence check: list the parent
|
|
154
|
+
directory of every path, de-duplicated by directory and issued concurrently. The only I/O in the pair
|
|
155
|
+
- `classifyFilenameCaseFrom(table, filePath)` - pass 2: pure judgement against the table pass 1 returned,
|
|
156
|
+
reporting the entry actually on disk when only the case differs. Fill **once** over the whole set and
|
|
157
|
+
then judge each path — a fill per path reinstates the serialized `readdir` this shape removes
|
|
142
158
|
- `FsLookupCache` - per-run memo for `realpath`/`readdir`, sharing in-flight promises. Construct one per
|
|
143
159
|
validation run and let it die with the run — never a module-level singleton, or a long-lived process
|
|
144
160
|
answers from a stale directory listing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-crawler.d.ts","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB,sJAQpB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,yBAA0B,CAAC;AAI1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"file-crawler.d.ts","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,iBAAiB,sJAQpB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,yBAA0B,CAAC;AAI1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAqQlE"}
|
package/dist/file-crawler.js
CHANGED
|
@@ -134,6 +134,27 @@ export function crawlDirectorySync(options) {
|
|
|
134
134
|
includeUntracked,
|
|
135
135
|
});
|
|
136
136
|
if (gitFiles !== null) {
|
|
137
|
+
// ⚠️ KNOWN DIVERGENCE: this branch ignores `followSymlinks`.
|
|
138
|
+
//
|
|
139
|
+
// `git ls-files` returns symlinks as mode-120000 entries like any other
|
|
140
|
+
// path, and nothing below filters them out — whereas the manual walk
|
|
141
|
+
// (see `processSymlink`) returns early unless `followSymlinks` is set.
|
|
142
|
+
// So the SAME tree with the SAME options has a different population
|
|
143
|
+
// depending only on whether a `.git` exists above it.
|
|
144
|
+
//
|
|
145
|
+
// A committed dangling `*.md` symlink returned from here no longer
|
|
146
|
+
// terminates the command: `ResourceRegistry.addResources` records the
|
|
147
|
+
// read failure and reports it as RESOURCE_UNREADABLE. The population
|
|
148
|
+
// divergence itself is still live.
|
|
149
|
+
//
|
|
150
|
+
// Pinned (as today's behaviour, deliberately) by
|
|
151
|
+
// packages/cli/test/integration/enumeration-symlink-divergence.integration.test.ts.
|
|
152
|
+
// Making the two routes agree changes enumeration on real corpora — in
|
|
153
|
+
// one of two opposite directions, since excluding symlinks here drops
|
|
154
|
+
// committed content while including them in the walk grows the off-git
|
|
155
|
+
// population — so it is a product decision with its own changelog
|
|
156
|
+
// entry, not a drive-by fix here.
|
|
157
|
+
//
|
|
137
158
|
// Git ls-files succeeded - filter using glob patterns
|
|
138
159
|
const isIncluded = picomatch(include, picoOptions);
|
|
139
160
|
const isExcluded = exclude.length > 0 ? picomatch(exclude, picoOptions) : () => false;
|
|
@@ -156,6 +177,23 @@ export function crawlDirectorySync(options) {
|
|
|
156
177
|
const isIncluded = picomatch(include, picoOptions);
|
|
157
178
|
const isExcluded = exclude.length > 0 ? picomatch(exclude, picoOptions) : () => false;
|
|
158
179
|
const results = [];
|
|
180
|
+
/**
|
|
181
|
+
* Real paths of directories already walked, maintained ONLY when following
|
|
182
|
+
* symlinks — it is what makes a directory symlink safe to traverse.
|
|
183
|
+
*
|
|
184
|
+
* A symlinked directory can be re-entered without limit (`a/loop -> a`) and
|
|
185
|
+
* can be reached under two names (`alias-one -> real`, `alias-two -> real`).
|
|
186
|
+
* Both enumerate one blob many times under distinct paths, so each row gets
|
|
187
|
+
* its own generated id and its own bundle entry. The loop terminated before
|
|
188
|
+
* this guard existed, but only because the kernel eventually refuses to
|
|
189
|
+
* resolve further symlinks — a limit that is 32 on macOS and 40 on Linux, so
|
|
190
|
+
* the POPULATION depended on the operating system, and the walk ended inside
|
|
191
|
+
* `processSymlink`'s catch for BROKEN links, which reported nothing.
|
|
192
|
+
*
|
|
193
|
+
* Left empty when `followSymlinks` is false: without symlink traversal a
|
|
194
|
+
* directory cannot be reached twice, so the default path pays no `realpath`.
|
|
195
|
+
*/
|
|
196
|
+
const visitedRealDirs = new Set();
|
|
159
197
|
/**
|
|
160
198
|
* Check if a path should be excluded based on patterns
|
|
161
199
|
*/
|
|
@@ -171,6 +209,32 @@ export function crawlDirectorySync(options) {
|
|
|
171
209
|
results.push(absolute ? fullPath : relativePath);
|
|
172
210
|
}
|
|
173
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Record a directory as walked, reporting whether it had already been seen.
|
|
214
|
+
*
|
|
215
|
+
* Identity is `realpathSync.native`, not the traversal path: two names for
|
|
216
|
+
* one directory must collide here or the alias is enumerated twice. A
|
|
217
|
+
* directory whose real path cannot be read is treated as already-walked —
|
|
218
|
+
* refusing to descend into something we cannot identify is the safe side of
|
|
219
|
+
* a guard whose whole job is bounding traversal.
|
|
220
|
+
*
|
|
221
|
+
* @param dir - Directory about to be walked
|
|
222
|
+
* @returns True when this directory has been walked before
|
|
223
|
+
*/
|
|
224
|
+
function alreadyWalked(dir) {
|
|
225
|
+
let realPath;
|
|
226
|
+
try {
|
|
227
|
+
realPath = fs.realpathSync.native(dir);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
if (visitedRealDirs.has(realPath)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
visitedRealDirs.add(realPath);
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
174
238
|
/**
|
|
175
239
|
* Process a symbolic link entry
|
|
176
240
|
*/
|
|
@@ -216,6 +280,9 @@ export function crawlDirectorySync(options) {
|
|
|
216
280
|
* Recursively walk directory tree
|
|
217
281
|
*/
|
|
218
282
|
function walkDirectory(currentDir) {
|
|
283
|
+
if (followSymlinks && alreadyWalked(currentDir)) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
219
286
|
let entries;
|
|
220
287
|
try {
|
|
221
288
|
// eslint-disable-next-line security/detect-non-literal-fs-filename -- path constructed from validated baseDir, recursively walking
|
|
@@ -225,6 +292,19 @@ export function crawlDirectorySync(options) {
|
|
|
225
292
|
// Skip directories we don't have permission to read
|
|
226
293
|
return;
|
|
227
294
|
}
|
|
295
|
+
// Two passes, not one: `readdirSync` order is filesystem-defined (see
|
|
296
|
+
// the comment on `alreadyWalked`), and both a real directory and a
|
|
297
|
+
// symlink alias pointing at it go through the same `alreadyWalked` gate,
|
|
298
|
+
// keyed only on realpath. Whichever spelling is dispatched FIRST claims
|
|
299
|
+
// that realpath in `visitedRealDirs`, and the second is then skipped as
|
|
300
|
+
// "already walked" — so if the alias happened to sort first, the
|
|
301
|
+
// directory's contents would be recorded under the alias's name and the
|
|
302
|
+
// real directory would be skipped entirely. Walking every non-symlink
|
|
303
|
+
// entry to completion before any symlink entry guarantees a real
|
|
304
|
+
// directory always claims its own realpath first; an alias reaching the
|
|
305
|
+
// same realpath afterward is correctly skipped by `alreadyWalked`. Only
|
|
306
|
+
// the ORDER of dispatch changes here — per-entry logic is unchanged.
|
|
307
|
+
const symlinkEntries = [];
|
|
228
308
|
for (const entry of entries) {
|
|
229
309
|
const fullPath = safePath.join(currentDir, entry.name);
|
|
230
310
|
const relativePath = safePath.relative(resolvedBaseDir, fullPath);
|
|
@@ -233,9 +313,9 @@ export function crawlDirectorySync(options) {
|
|
|
233
313
|
if (shouldExclude(normalizedPath)) {
|
|
234
314
|
continue;
|
|
235
315
|
}
|
|
236
|
-
//
|
|
316
|
+
// Defer symlinks to the second pass; dispatch everything else now.
|
|
237
317
|
if (entry.isSymbolicLink()) {
|
|
238
|
-
|
|
318
|
+
symlinkEntries.push(entry);
|
|
239
319
|
}
|
|
240
320
|
else if (entry.isDirectory()) {
|
|
241
321
|
processDirectory(fullPath, normalizedPath, relativePath);
|
|
@@ -244,6 +324,12 @@ export function crawlDirectorySync(options) {
|
|
|
244
324
|
processFile(normalizedPath, fullPath, relativePath);
|
|
245
325
|
}
|
|
246
326
|
}
|
|
327
|
+
for (const entry of symlinkEntries) {
|
|
328
|
+
const fullPath = safePath.join(currentDir, entry.name);
|
|
329
|
+
const relativePath = safePath.relative(resolvedBaseDir, fullPath);
|
|
330
|
+
const normalizedPath = toForwardSlash(relativePath);
|
|
331
|
+
processSymlink(fullPath, normalizedPath, relativePath);
|
|
332
|
+
}
|
|
247
333
|
}
|
|
248
334
|
// Start recursive walk from base directory
|
|
249
335
|
walkDirectory(resolvedBaseDir);
|
package/dist/file-crawler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-crawler.js","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"file-crawler.js","sourceRoot":"","sources":["../src/file-crawler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAyC3D;;;;;;;;;;;;;GAaG;AACH,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,IAAI,EAAW,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,oBAAoB,EAAO,gDAAgD;IAC3E,YAAY,EAAe,kCAAkC;IAC7D,gBAAgB,EAAW,wBAAwB;IACnD,oBAAoB,EAAO,iBAAiB;IAC5C,kBAAkB,EAAS,sDAAsD;IACjF,yBAAyB,EAAE,qCAAqC;IAChE,cAAc,EAAa,0CAA0C;CAC7D,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAU,CAAC;AAE1D,MAAM,eAAe,GAAa,CAAC,GAAG,iBAAiB,EAAE,GAAG,kBAAkB,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAqB;IACxD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACtD,MAAM,EACJ,OAAO,EACP,OAAO,GAAG,CAAC,MAAM,CAAC,EAClB,OAAO,GAAG,eAAe,EACzB,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,IAAI,EAChB,gBAAgB,GAAG,IAAI,EACvB,gBAAgB,GAAG,KAAK,GACzB,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,iBAAiB,CAAC;IAEtC,0CAA0C;IAC1C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD,+BAA+B;IAC/B,wHAAwH;IACxH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,kCAAkC,eAAe,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,gDAAgD;IAChD,oGAAoG;IACpG,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,eAAe,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,4DAA4D;IAC5D,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,mDAAmD;YACnD,yEAAyE;YACzE,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC;gBAC1B,GAAG,EAAE,eAAe;gBACpB,gBAAgB;aACjB,CAAC,CAAC;YAEH,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,6DAA6D;gBAC7D,EAAE;gBACF,wEAAwE;gBACxE,qEAAqE;gBACrE,uEAAuE;gBACvE,oEAAoE;gBACpE,sDAAsD;gBACtD,EAAE;gBACF,mEAAmE;gBACnE,sEAAsE;gBACtE,qEAAqE;gBACrE,mCAAmC;gBACnC,EAAE;gBACF,iDAAiD;gBACjD,oFAAoF;gBACpF,uEAAuE;gBACvE,sEAAsE;gBACtE,uEAAuE;gBACvE,kEAAkE;gBAClE,kCAAkC;gBAClC,EAAE;gBACF,sDAAsD;gBACtD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBACnD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAY,EAAE,CAAC,KAAK,CAAC;gBAE/F,OAAO,QAAQ;qBACZ,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;oBACvB,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;oBACpD,0CAA0C;oBAC1C,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;gBACxG,CAAC,CAAC;qBACD,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;oBACpB,6CAA6C;oBAC7C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBACnF,CAAC,CAAC,CAAC;YACP,CAAC;YACD,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,wCAAwC;IACxC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAY,EAAE,CAAC,KAAK,CAAC;IAE/F,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C;;OAEG;IACH,SAAS,aAAa,CAAC,cAAsB;QAC3C,kCAAkC;QAClC,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,SAAS,YAAY,CAAC,cAAsB,EAAE,QAAgB,EAAE,YAAoB;QAClF,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,SAAS,aAAa,CAAC,GAAW;QAChC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS,cAAc,CAAC,QAAgB,EAAE,cAAsB,EAAE,YAAoB;QACpF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,wDAAwD;QACxD,IAAI,UAAoB,CAAC;QACzB,IAAI,CAAC;YACH,wHAAwH;YACxH,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;YACvB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/B,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE,cAAsB,EAAE,YAAoB;QACtF,4BAA4B;QAC5B,aAAa,CAAC,QAAQ,CAAC,CAAC;QAExB,4CAA4C;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,WAAW,CAAC,cAAsB,EAAE,QAAgB,EAAE,YAAoB;QACjF,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,SAAS,aAAa,CAAC,UAAkB;QACvC,IAAI,cAAc,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,OAAoB,CAAC;QAEzB,IAAI,CAAC;YACH,mIAAmI;YACnI,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;YACpD,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,mEAAmE;QACnE,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,iEAAiE;QACjE,wEAAwE;QACxE,sEAAsE;QACtE,iEAAiE;QACjE,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,cAAc,GAAgB,EAAE,CAAC;QAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;YAEpD,sBAAsB;YACtB,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YAED,mEAAmE;YACnE,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC3B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;YACpD,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,aAAa,CAAC,eAAe,CAAC,CAAC;IAE/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|