@contextlint/cli 0.4.7 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +22 -9
- package/dist/index.js.map +1 -1
- package/package.json +9 -6
- package/dist/config.d.ts +0 -9
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -26
- package/dist/config.js.map +0 -1
- package/dist/format.d.ts +0 -3
- package/dist/format.d.ts.map +0 -1
- package/dist/format.js +0 -25
- package/dist/format.js.map +0 -1
- package/dist/lint.d.ts +0 -8
- package/dist/lint.d.ts.map +0 -1
- package/dist/lint.js +0 -38
- package/dist/lint.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { Command } from "commander";
|
|
4
|
-
import { loadConfig } from "
|
|
5
|
-
import { lintFiles } from "./lint.js";
|
|
6
|
-
import { formatResults } from "./format.js";
|
|
4
|
+
import { findConfig, loadConfig, lintFiles, formatFileResults } from "@contextlint/core";
|
|
7
5
|
const program = new Command();
|
|
8
6
|
program
|
|
9
7
|
.name("contextlint")
|
|
10
8
|
.description("Rule-based linter for structured Markdown documents")
|
|
11
|
-
.argument("[files...]", "Files or glob patterns to lint"
|
|
9
|
+
.argument("[files...]", "Files or glob patterns to lint")
|
|
12
10
|
.option("--config <path>", "Path to config file")
|
|
13
11
|
.option("--cwd <path>", "Working directory", process.cwd())
|
|
14
|
-
.action(
|
|
12
|
+
.action((files, opts) => {
|
|
15
13
|
const cwd = resolve(opts.cwd);
|
|
14
|
+
let configPath;
|
|
15
|
+
if (opts.config) {
|
|
16
|
+
configPath = resolve(cwd, opts.config);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const found = findConfig(cwd);
|
|
20
|
+
if (!found) {
|
|
21
|
+
console.error("Error: No contextlint.config.json found. Create a config file or use --config.");
|
|
22
|
+
process.exit(2);
|
|
23
|
+
}
|
|
24
|
+
configPath = found;
|
|
25
|
+
}
|
|
16
26
|
let config;
|
|
17
27
|
try {
|
|
18
|
-
config = loadConfig(
|
|
28
|
+
config = loadConfig(configPath);
|
|
19
29
|
}
|
|
20
30
|
catch (err) {
|
|
21
31
|
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
22
32
|
process.exit(2);
|
|
23
33
|
}
|
|
34
|
+
const patterns = files.length > 0
|
|
35
|
+
? files
|
|
36
|
+
: config.include ?? ["**/*.md"];
|
|
24
37
|
try {
|
|
25
|
-
const results =
|
|
26
|
-
const output =
|
|
38
|
+
const results = lintFiles(patterns, config, cwd);
|
|
39
|
+
const output = formatFileResults(results, cwd);
|
|
27
40
|
console.log(output);
|
|
28
|
-
const hasErrors = results.some((r) => r.messages.
|
|
41
|
+
const hasErrors = results.some((r) => r.messages.some((m) => m.severity === "error"));
|
|
29
42
|
process.exit(hasErrors ? 1 : 0);
|
|
30
43
|
}
|
|
31
44
|
catch (err) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,qDAAqD,CAAC;KAClE,QAAQ,CAAC,YAAY,EAAE,gCAAgC,CAAC;KACxD,MAAM,CACL,iBAAiB,EACjB,qBAAqB,CACtB;KACA,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC1D,MAAM,CACL,CACE,KAAe,EACf,IAAsC,EACtC,EAAE;IACF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CACX,gFAAgF,CACjF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,KAAK,CAAC,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CACF,CAAC;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contextlint/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "CLI entry point for contextlint",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"import": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
8
12
|
"bin": {
|
|
9
13
|
"contextlint": "dist/index.js"
|
|
10
14
|
},
|
|
@@ -16,9 +20,8 @@
|
|
|
16
20
|
"typecheck": "tsc --noEmit"
|
|
17
21
|
},
|
|
18
22
|
"dependencies": {
|
|
19
|
-
"@contextlint/core": "0.
|
|
20
|
-
"commander": "^14.0.0"
|
|
21
|
-
"glob": "^13.0.6"
|
|
23
|
+
"@contextlint/core": "0.5.0",
|
|
24
|
+
"commander": "^14.0.0"
|
|
22
25
|
},
|
|
23
26
|
"publishConfig": {
|
|
24
27
|
"access": "public"
|
package/dist/config.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface RuleEntry {
|
|
2
|
-
rule: string;
|
|
3
|
-
options?: Record<string, unknown>;
|
|
4
|
-
}
|
|
5
|
-
export interface ContextlintConfig {
|
|
6
|
-
rules: RuleEntry[];
|
|
7
|
-
}
|
|
8
|
-
export declare function loadConfig(configPath: string, cwd: string): ContextlintConfig;
|
|
9
|
-
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,iBAAiB,CA4BnB"}
|
package/dist/config.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
export function loadConfig(configPath, cwd) {
|
|
4
|
-
const fullPath = resolve(cwd, configPath);
|
|
5
|
-
let raw;
|
|
6
|
-
try {
|
|
7
|
-
raw = readFileSync(fullPath, "utf-8");
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
throw new Error(`Cannot read config file: ${fullPath}`);
|
|
11
|
-
}
|
|
12
|
-
let parsed;
|
|
13
|
-
try {
|
|
14
|
-
parsed = JSON.parse(raw);
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
throw new Error(`Invalid JSON in config file: ${fullPath}`);
|
|
18
|
-
}
|
|
19
|
-
if (typeof parsed !== "object" ||
|
|
20
|
-
parsed === null ||
|
|
21
|
-
!Array.isArray(parsed.rules)) {
|
|
22
|
-
throw new Error(`Config must have a "rules" array: ${fullPath}`);
|
|
23
|
-
}
|
|
24
|
-
return parsed;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,GAAW;IAEX,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE1C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,CAAC,KAAK,CAAC,OAAO,CAAE,MAAkC,CAAC,KAAK,CAAC,EACzD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,OAAO,MAA2B,CAAC;AACrC,CAAC"}
|
package/dist/format.d.ts
DELETED
package/dist/format.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EAAE,EACzB,GAAG,EAAE,MAAM,GACV,MAAM,CAkCR"}
|
package/dist/format.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { relative } from "node:path";
|
|
2
|
-
export function formatResults(results, cwd) {
|
|
3
|
-
const filesWithErrors = results.filter((r) => r.messages.length > 0);
|
|
4
|
-
if (filesWithErrors.length === 0) {
|
|
5
|
-
return "No issues found.";
|
|
6
|
-
}
|
|
7
|
-
const lines = [];
|
|
8
|
-
let totalErrors = 0;
|
|
9
|
-
for (const result of filesWithErrors) {
|
|
10
|
-
const label = result.filePath === "<project>"
|
|
11
|
-
? "(project)"
|
|
12
|
-
: relative(cwd, result.filePath);
|
|
13
|
-
lines.push(label);
|
|
14
|
-
for (const msg of result.messages) {
|
|
15
|
-
lines.push(` line ${msg.line} ${msg.severity} ${msg.message} ${msg.ruleId}`);
|
|
16
|
-
totalErrors++;
|
|
17
|
-
}
|
|
18
|
-
lines.push("");
|
|
19
|
-
}
|
|
20
|
-
const fileWord = filesWithErrors.length === 1 ? "file" : "files";
|
|
21
|
-
const errorWord = totalErrors === 1 ? "error" : "errors";
|
|
22
|
-
lines.push(`${totalErrors} ${errorWord} in ${filesWithErrors.length} ${fileWord}`);
|
|
23
|
-
return lines.join("\n");
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=format.js.map
|
package/dist/format.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,MAAM,UAAU,aAAa,CAC3B,OAAyB,EACzB,GAAW;IAEX,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,KAAK,GACT,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC7B,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CACR,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,EAAE,CACtE,CAAC;YACF,WAAW,EAAE,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,MAAM,SAAS,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzD,KAAK,CAAC,IAAI,CACR,GAAG,WAAW,IAAI,SAAS,OAAO,eAAe,CAAC,MAAM,IAAI,QAAQ,EAAE,CACvE,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/lint.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { LintMessage } from "@contextlint/core";
|
|
2
|
-
import type { ContextlintConfig } from "./config.js";
|
|
3
|
-
export interface FileLintResult {
|
|
4
|
-
filePath: string;
|
|
5
|
-
messages: LintMessage[];
|
|
6
|
-
}
|
|
7
|
-
export declare function lintFiles(patterns: string[], config: ContextlintConfig, cwd: string): Promise<FileLintResult[]>;
|
|
8
|
-
//# sourceMappingURL=lint.d.ts.map
|
package/dist/lint.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,EAAE,CAAC,CA0C3B"}
|
package/dist/lint.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
2
|
-
import { relative } from "node:path";
|
|
3
|
-
import { glob } from "glob";
|
|
4
|
-
import { parseDocument, runRules, resolveRule } from "@contextlint/core";
|
|
5
|
-
export async function lintFiles(patterns, config, cwd) {
|
|
6
|
-
const rules = config.rules.map((entry) => resolveRule(entry.rule, entry.options));
|
|
7
|
-
const docRules = rules.filter((r) => (r.scope ?? "document") === "document");
|
|
8
|
-
const projectRules = rules.filter((r) => r.scope === "project");
|
|
9
|
-
const files = await glob(patterns, { cwd, absolute: true });
|
|
10
|
-
files.sort();
|
|
11
|
-
const projectFiles = files.map((f) => relative(cwd, f));
|
|
12
|
-
// Parse all files upfront (shared by document and project rules)
|
|
13
|
-
const documents = new Map();
|
|
14
|
-
for (const filePath of files) {
|
|
15
|
-
const content = readFileSync(filePath, "utf-8");
|
|
16
|
-
documents.set(filePath, parseDocument(content));
|
|
17
|
-
}
|
|
18
|
-
const results = [];
|
|
19
|
-
// Run project-scoped rules once
|
|
20
|
-
if (projectRules.length > 0) {
|
|
21
|
-
const emptyDoc = parseDocument("");
|
|
22
|
-
const messages = runRules(projectRules, emptyDoc, "<project>", {
|
|
23
|
-
projectFiles,
|
|
24
|
-
documents,
|
|
25
|
-
});
|
|
26
|
-
if (messages.length > 0) {
|
|
27
|
-
results.push({ filePath: "<project>", messages });
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// Run document-scoped rules per file
|
|
31
|
-
for (const filePath of files) {
|
|
32
|
-
const document = documents.get(filePath);
|
|
33
|
-
const messages = runRules(docRules, document, filePath, { documents });
|
|
34
|
-
results.push({ filePath, messages });
|
|
35
|
-
}
|
|
36
|
-
return results;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=lint.js.map
|
package/dist/lint.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AASzE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAkB,EAClB,MAAyB,EACzB,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACvC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CACvC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,UAAU,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,EAAE,CAAC;IAEb,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAExD,iEAAiE;IACjE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IACpD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,gCAAgC;IAChC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;YAC7D,YAAY;YACZ,SAAS;SACV,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|