@chiralkit/cli 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/add.d.ts +4 -0
- package/dist/add.js +118 -0
- package/dist/add.js.map +1 -0
- package/dist/agents/subprocess.d.ts +10 -0
- package/dist/agents/subprocess.js +43 -0
- package/dist/agents/subprocess.js.map +1 -0
- package/dist/automation/index.d.ts +14 -0
- package/dist/automation/index.js +129 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/install.d.ts +19 -0
- package/dist/automation/install.js +116 -0
- package/dist/automation/install.js.map +1 -0
- package/dist/automation/parsers/audit-report.d.ts +2 -0
- package/dist/automation/parsers/audit-report.js +42 -0
- package/dist/automation/parsers/audit-report.js.map +1 -0
- package/dist/automation/parsers/exit-code.d.ts +2 -0
- package/dist/automation/parsers/exit-code.js +6 -0
- package/dist/automation/parsers/exit-code.js.map +1 -0
- package/dist/automation/parsers/index.d.ts +10 -0
- package/dist/automation/parsers/index.js +13 -0
- package/dist/automation/parsers/index.js.map +1 -0
- package/dist/automation/parsers/observer-snapshot.d.ts +2 -0
- package/dist/automation/parsers/observer-snapshot.js +30 -0
- package/dist/automation/parsers/observer-snapshot.js.map +1 -0
- package/dist/automation/parsers/plan-report.d.ts +2 -0
- package/dist/automation/parsers/plan-report.js +53 -0
- package/dist/automation/parsers/plan-report.js.map +1 -0
- package/dist/automation/parsers/refinement-report.d.ts +2 -0
- package/dist/automation/parsers/refinement-report.js +149 -0
- package/dist/automation/parsers/refinement-report.js.map +1 -0
- package/dist/automation/parsers/types.d.ts +7 -0
- package/dist/automation/parsers/types.js +2 -0
- package/dist/automation/parsers/types.js.map +1 -0
- package/dist/automation/run.d.ts +25 -0
- package/dist/automation/run.js +68 -0
- package/dist/automation/run.js.map +1 -0
- package/dist/automation/schema.d.ts +130 -0
- package/dist/automation/schema.js +46 -0
- package/dist/automation/schema.js.map +1 -0
- package/dist/automation/status.d.ts +16 -0
- package/dist/automation/status.js +56 -0
- package/dist/automation/status.js.map +1 -0
- package/dist/automation/verifiers/index.d.ts +7 -0
- package/dist/automation/verifiers/index.js +5 -0
- package/dist/automation/verifiers/index.js.map +1 -0
- package/dist/automation/verifiers/shell.d.ts +5 -0
- package/dist/automation/verifiers/shell.js +17 -0
- package/dist/automation/verifiers/shell.js.map +1 -0
- package/dist/automation/verifiers/types.d.ts +12 -0
- package/dist/automation/verifiers/types.js +2 -0
- package/dist/automation/verifiers/types.js.map +1 -0
- package/dist/backlog/add.d.ts +10 -0
- package/dist/backlog/add.js +30 -0
- package/dist/backlog/add.js.map +1 -0
- package/dist/backlog/index.d.ts +1 -0
- package/dist/backlog/index.js +53 -0
- package/dist/backlog/index.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +110 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +2 -0
- package/dist/detect.js +26 -0
- package/dist/detect.js.map +1 -0
- package/dist/doctor-invariants.d.ts +6 -0
- package/dist/doctor-invariants.js +50 -0
- package/dist/doctor-invariants.js.map +1 -0
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.js +281 -0
- package/dist/doctor.js.map +1 -0
- package/dist/generate.d.ts +1 -0
- package/dist/generate.js +275 -0
- package/dist/generate.js.map +1 -0
- package/dist/generator/agent.d.ts +8 -0
- package/dist/generator/agent.js +66 -0
- package/dist/generator/agent.js.map +1 -0
- package/dist/generator/api.d.ts +7 -0
- package/dist/generator/api.js +42 -0
- package/dist/generator/api.js.map +1 -0
- package/dist/generator/config.d.ts +23 -0
- package/dist/generator/config.js +121 -0
- package/dist/generator/config.js.map +1 -0
- package/dist/generator/parse-response.d.ts +5 -0
- package/dist/generator/parse-response.js +58 -0
- package/dist/generator/parse-response.js.map +1 -0
- package/dist/generator/prompt.d.ts +9 -0
- package/dist/generator/prompt.js +166 -0
- package/dist/generator/prompt.js.map +1 -0
- package/dist/generator/request.d.ts +17 -0
- package/dist/generator/request.js +15 -0
- package/dist/generator/request.js.map +1 -0
- package/dist/generators/prompts/stencil.md +45 -0
- package/dist/generators/prompts/vue.md +54 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +89 -0
- package/dist/init.js.map +1 -0
- package/dist/installers/context.d.ts +4 -0
- package/dist/installers/context.js +120 -0
- package/dist/installers/context.js.map +1 -0
- package/dist/installers/index.d.ts +7 -0
- package/dist/installers/index.js +22 -0
- package/dist/installers/index.js.map +1 -0
- package/dist/installers/installer.d.ts +12 -0
- package/dist/installers/installer.js +30 -0
- package/dist/installers/installer.js.map +1 -0
- package/dist/installers/stencil/django-template/installer.d.ts +10 -0
- package/dist/installers/stencil/django-template/installer.js +77 -0
- package/dist/installers/stencil/django-template/installer.js.map +1 -0
- package/dist/installers/stencil/react/installer.d.ts +9 -0
- package/dist/installers/stencil/react/installer.js +22 -0
- package/dist/installers/stencil/react/installer.js.map +1 -0
- package/dist/installers/stencil/react/manifest.json +17 -0
- package/dist/installers/types.d.ts +24 -0
- package/dist/installers/types.js +2 -0
- package/dist/installers/types.js.map +1 -0
- package/dist/lock.d.ts +25 -0
- package/dist/lock.js +86 -0
- package/dist/lock.js.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +93 -0
- package/dist/manifest.js.map +1 -0
- package/dist/pm/audit.d.ts +36 -0
- package/dist/pm/audit.js +147 -0
- package/dist/pm/audit.js.map +1 -0
- package/dist/pm/backlog.d.ts +3 -0
- package/dist/pm/backlog.js +123 -0
- package/dist/pm/backlog.js.map +1 -0
- package/dist/pm/brief.d.ts +4 -0
- package/dist/pm/brief.js +18 -0
- package/dist/pm/brief.js.map +1 -0
- package/dist/pm/git.d.ts +3 -0
- package/dist/pm/git.js +43 -0
- package/dist/pm/git.js.map +1 -0
- package/dist/pm/grid.d.ts +8 -0
- package/dist/pm/grid.js +16 -0
- package/dist/pm/grid.js.map +1 -0
- package/dist/pm/index.d.ts +25 -0
- package/dist/pm/index.js +199 -0
- package/dist/pm/index.js.map +1 -0
- package/dist/pm/observe.d.ts +55 -0
- package/dist/pm/observe.js +177 -0
- package/dist/pm/observe.js.map +1 -0
- package/dist/pm/plan.d.ts +54 -0
- package/dist/pm/plan.js +151 -0
- package/dist/pm/plan.js.map +1 -0
- package/dist/pm/refinement-worktree.d.ts +31 -0
- package/dist/pm/refinement-worktree.js +160 -0
- package/dist/pm/refinement-worktree.js.map +1 -0
- package/dist/pm/refinement.d.ts +79 -0
- package/dist/pm/refinement.js +326 -0
- package/dist/pm/refinement.js.map +1 -0
- package/dist/pm/render.d.ts +2 -0
- package/dist/pm/render.js +39 -0
- package/dist/pm/render.js.map +1 -0
- package/dist/pm/roadmap-rings.d.ts +7 -0
- package/dist/pm/roadmap-rings.js +31 -0
- package/dist/pm/roadmap-rings.js.map +1 -0
- package/dist/pm/roadmap.d.ts +2 -0
- package/dist/pm/roadmap.js +118 -0
- package/dist/pm/roadmap.js.map +1 -0
- package/dist/pm/snapshot.d.ts +10 -0
- package/dist/pm/snapshot.js +129 -0
- package/dist/pm/snapshot.js.map +1 -0
- package/dist/pm/types.d.ts +99 -0
- package/dist/pm/types.js +29 -0
- package/dist/pm/types.js.map +1 -0
- package/dist/registry-layout.d.ts +18 -0
- package/dist/registry-layout.js +122 -0
- package/dist/registry-layout.js.map +1 -0
- package/dist/scaffold-registry.d.ts +10 -0
- package/dist/scaffold-registry.js +283 -0
- package/dist/scaffold-registry.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.js +32 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/spec-from-react.d.ts +11 -0
- package/dist/spec-from-react.js +522 -0
- package/dist/spec-from-react.js.map +1 -0
- package/dist/spec-from-stencil.d.ts +7 -0
- package/dist/spec-from-stencil.js +275 -0
- package/dist/spec-from-stencil.js.map +1 -0
- package/dist/spec.d.ts +1 -0
- package/dist/spec.js +60 -0
- package/dist/spec.js.map +1 -0
- package/dist/tokens-map.d.ts +11 -0
- package/dist/tokens-map.js +43 -0
- package/dist/tokens-map.js.map +1 -0
- package/dist/update.d.ts +39 -0
- package/dist/update.js +490 -0
- package/dist/update.js.map +1 -0
- package/dist/workspace-init.d.ts +9 -0
- package/dist/workspace-init.js +119 -0
- package/dist/workspace-init.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
import { readFile, mkdir, access, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
+
import { Project, Node, SymbolFlags, ts } from "ts-morph";
|
|
4
|
+
import { loadTokensMap } from "./tokens-map.js";
|
|
5
|
+
import { componentContractSchema } from "@chiralkit/registry-schema";
|
|
6
|
+
import { resolveKitsRoot } from "@chiralkit/kits";
|
|
7
|
+
const registryRoot = join(resolveKitsRoot(), "ui", "registry");
|
|
8
|
+
// spec-from-react targets React ui-component sources, so its default output
|
|
9
|
+
// (when the caller doesn't pass an explicit --out) always lives under the
|
|
10
|
+
// design-system family.
|
|
11
|
+
const DESIGN_SYSTEM_FAMILY = "design-system";
|
|
12
|
+
// v1 supports plain JSX/Tailwind + cva. CSS-in-JS libraries produce
|
|
13
|
+
// components whose "class" is a generated identifier, not a string the
|
|
14
|
+
// tokens-map harvester can read — so we reject up front with a named
|
|
15
|
+
// reason instead of silently emitting a props-only, tokens-empty spec.
|
|
16
|
+
const CSS_IN_JS_IMPORT_PATTERNS = [
|
|
17
|
+
/from ["']styled-components["']/,
|
|
18
|
+
/from ["']@emotion\/styled["']/,
|
|
19
|
+
/from ["']@stitches\/react["']/,
|
|
20
|
+
];
|
|
21
|
+
// DOM + React JSX lib so ComponentProps<"button">, HTMLAttributes<T>, etc.
|
|
22
|
+
// resolve. Real consumer projects have react/@types/react installed already.
|
|
23
|
+
const TYPE_CHECKER_COMPILER_OPTIONS = {
|
|
24
|
+
jsx: ts.JsxEmit.ReactJSX,
|
|
25
|
+
lib: ["lib.dom.d.ts", "lib.esnext.d.ts"],
|
|
26
|
+
moduleResolution: ts.ModuleResolutionKind.NodeJs,
|
|
27
|
+
target: ts.ScriptTarget.ES2022,
|
|
28
|
+
esModuleInterop: true,
|
|
29
|
+
skipLibCheck: true,
|
|
30
|
+
strict: true,
|
|
31
|
+
};
|
|
32
|
+
export async function runFromReact(sourcePath, options) {
|
|
33
|
+
const absSource = resolve(process.cwd(), sourcePath);
|
|
34
|
+
const absTokens = resolve(process.cwd(), options.tokensMapPath);
|
|
35
|
+
const source = await readFile(absSource, "utf8");
|
|
36
|
+
if (CSS_IN_JS_IMPORT_PATTERNS.some((re) => re.test(source))) {
|
|
37
|
+
throw new Error("spec from-react: source uses styled-components (or @emotion/styled or @stitches/react) which is not supported in v1. See docs/superpowers/specs/2026-07-23-spec-from-react-design.md.");
|
|
38
|
+
}
|
|
39
|
+
const tokensMap = await loadTokensMap(absTokens);
|
|
40
|
+
// Determine the module name early — it feeds outPath default and the emitted spec.
|
|
41
|
+
const name = options.name ?? deriveNameFromPath(absSource);
|
|
42
|
+
const outPath = options.outPath
|
|
43
|
+
? resolve(process.cwd(), options.outPath)
|
|
44
|
+
: join(registryRoot, DESIGN_SYSTEM_FAMILY, name, "spec.json");
|
|
45
|
+
if (!options.force && !options.dryRun) {
|
|
46
|
+
try {
|
|
47
|
+
await access(outPath);
|
|
48
|
+
console.error(`spec from-react: ${outPath} exists. Pass --force to overwrite, or --dry-run to print without writing.`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// ok — file does not exist
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const spec = extract(source, absSource, tokensMap, options, name);
|
|
56
|
+
const json = JSON.stringify(spec, null, 2) + "\n";
|
|
57
|
+
if (options.dryRun) {
|
|
58
|
+
process.stdout.write(json);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
await mkdir(dirname(outPath), { recursive: true });
|
|
62
|
+
await writeFile(outPath, json);
|
|
63
|
+
console.log(`Wrote ${outPath}`);
|
|
64
|
+
}
|
|
65
|
+
function deriveNameFromPath(absPath) {
|
|
66
|
+
const base = basename(absPath).replace(/\.(tsx|ts)$/, "");
|
|
67
|
+
return base.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
68
|
+
}
|
|
69
|
+
function findComponentExports(sf) {
|
|
70
|
+
const out = [];
|
|
71
|
+
for (const stmt of sf.getStatements()) {
|
|
72
|
+
// export const X = React.forwardRef(...) / (...) => JSX
|
|
73
|
+
if (Node.isVariableStatement(stmt) && stmt.isExported()) {
|
|
74
|
+
for (const decl of stmt.getDeclarationList().getDeclarations()) {
|
|
75
|
+
const nm = decl.getName();
|
|
76
|
+
if (!/^[A-Z]/.test(nm))
|
|
77
|
+
continue;
|
|
78
|
+
const init = decl.getInitializer();
|
|
79
|
+
if (!init)
|
|
80
|
+
continue;
|
|
81
|
+
// `/^[A-Z]/` alone also matches SCREAMING_SNAKE_CASE constants
|
|
82
|
+
// (e.g. `export const DEFAULT_SIZE = "md"`). A component's
|
|
83
|
+
// initializer is always a call expression (React.forwardRef(...)),
|
|
84
|
+
// an arrow function, or a function expression — a plain literal
|
|
85
|
+
// initializer means this is a constant, not a component.
|
|
86
|
+
if (!Node.isCallExpression(init) &&
|
|
87
|
+
!Node.isArrowFunction(init) &&
|
|
88
|
+
!Node.isFunctionExpression(init)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const symbol = decl.getSymbol();
|
|
92
|
+
if (!symbol)
|
|
93
|
+
continue;
|
|
94
|
+
out.push({ name: nm, symbol, declaration: decl });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// export function X(...) {} / function X(...) {} + `export { X }`
|
|
98
|
+
if (Node.isFunctionDeclaration(stmt) && stmt.isExported()) {
|
|
99
|
+
const nm = stmt.getName();
|
|
100
|
+
if (nm && /^[A-Z]/.test(nm)) {
|
|
101
|
+
const symbol = stmt.getSymbol();
|
|
102
|
+
if (symbol)
|
|
103
|
+
out.push({ name: nm, symbol, declaration: stmt });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
108
|
+
}
|
|
109
|
+
// "Declared in React's own ambient types, not by the component author" —
|
|
110
|
+
// used to skip DOM-inherited props (re-added via the fixed allowlist
|
|
111
|
+
// instead) and to tell a real `children` slot apart from the `children`
|
|
112
|
+
// every HTMLAttributes/ComponentProps<"tag"> composition inherits. Trailing
|
|
113
|
+
// slash avoids a false match on `@types/react-dom`.
|
|
114
|
+
function isReactAmbientDeclared(prop) {
|
|
115
|
+
const decls = prop.getDeclarations();
|
|
116
|
+
if (decls.length === 0)
|
|
117
|
+
return false;
|
|
118
|
+
return decls.every((d) => d.getSourceFile().getFilePath().includes("@types/react/"));
|
|
119
|
+
}
|
|
120
|
+
// Shortcut vs. walking the Props type's constituents for HTMLAttributes<T>/
|
|
121
|
+
// ComponentProps<"tag">/DetailedHTMLProps<...> by name (fragile across how
|
|
122
|
+
// TS prints an aliased/intersected type): if any DOM-only prop name below
|
|
123
|
+
// resolves to a React-ambient declaration, some HTMLAttributes flavor is present.
|
|
124
|
+
const HTML_ATTRS_PROBE_PROPS = ["onClick", "id", "className", "style"];
|
|
125
|
+
function detectHtmlAttributesComposition(propsType, _checker) {
|
|
126
|
+
return HTML_ATTRS_PROBE_PROPS.some((probeName) => {
|
|
127
|
+
const prop = propsType.getProperty(probeName);
|
|
128
|
+
return !!prop && isReactAmbientDeclared(prop);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function classifyPropType(name, optional, type) {
|
|
132
|
+
const nonNullable = type.getNonNullableType();
|
|
133
|
+
if (nonNullable.isBoolean() || nonNullable.isBooleanLiteral()) {
|
|
134
|
+
return { name, type: "boolean", optional };
|
|
135
|
+
}
|
|
136
|
+
if (nonNullable.isNumber() || nonNullable.isNumberLiteral()) {
|
|
137
|
+
return { name, type: "number", optional };
|
|
138
|
+
}
|
|
139
|
+
if (nonNullable.isString()) {
|
|
140
|
+
return { name, type: "string", optional };
|
|
141
|
+
}
|
|
142
|
+
if (nonNullable.isUnion()) {
|
|
143
|
+
const constituents = nonNullable.getUnionTypes();
|
|
144
|
+
if (constituents.length > 0 && constituents.every((c) => c.isStringLiteral())) {
|
|
145
|
+
const values = constituents.map((c) => String(c.getLiteralValue()));
|
|
146
|
+
return { name, type: "enum", values, optional };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Anything else (objects, functions, unresolvable generics, mixed unions)
|
|
150
|
+
// — skip silently. Same policy as the pre-refactor strict mode.
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
function extractPropsViaTypeChecker(target, checker) {
|
|
154
|
+
const type = checker.getTypeOfSymbolAtLocation(target.symbol, target.declaration);
|
|
155
|
+
const signatures = type.getCallSignatures();
|
|
156
|
+
if (signatures.length === 0) {
|
|
157
|
+
throw new Error(`spec from-react: "${target.name}" is not a callable component (its type has no call signature)`);
|
|
158
|
+
}
|
|
159
|
+
const signature = signatures[0]; // two+ call signatures: use the first (React idiom — overloads are rare here).
|
|
160
|
+
const params = signature.getParameters();
|
|
161
|
+
if (params.length === 0) {
|
|
162
|
+
throw new Error(`spec from-react: "${target.name}" takes no props parameter`);
|
|
163
|
+
}
|
|
164
|
+
const propsType = params[0].getTypeAtLocation(target.declaration);
|
|
165
|
+
const htmlAttrsDetected = detectHtmlAttributesComposition(propsType, checker);
|
|
166
|
+
const props = [];
|
|
167
|
+
let hasChildren = false;
|
|
168
|
+
for (const propSymbol of propsType.getProperties()) {
|
|
169
|
+
const name = propSymbol.getName();
|
|
170
|
+
const domInherited = isReactAmbientDeclared(propSymbol);
|
|
171
|
+
if (name === "children") {
|
|
172
|
+
// Real slot only if the component's own source declares it — every
|
|
173
|
+
// HTMLAttributes/ComponentProps<"tag"> composition inherits a
|
|
174
|
+
// `children?: ReactNode` regardless of whether the author uses it.
|
|
175
|
+
if (!domInherited)
|
|
176
|
+
hasChildren = true;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
// DOM-inherited props aren't emitted individually — the fixed
|
|
180
|
+
// allowlist below covers the ones we care about.
|
|
181
|
+
if (domInherited)
|
|
182
|
+
continue;
|
|
183
|
+
const optionalFlag = (propSymbol.getFlags() & SymbolFlags.Optional) !== 0;
|
|
184
|
+
const declaredOptional = propSymbol
|
|
185
|
+
.getDeclarations()
|
|
186
|
+
.some((d) => Node.isPropertySignature(d) && d.hasQuestionToken());
|
|
187
|
+
const optional = optionalFlag || declaredOptional;
|
|
188
|
+
const propType = checker.getTypeOfSymbolAtLocation(propSymbol, target.declaration);
|
|
189
|
+
const spec = classifyPropType(name, optional, propType);
|
|
190
|
+
if (spec)
|
|
191
|
+
props.push(spec);
|
|
192
|
+
}
|
|
193
|
+
return { props, hasChildren, htmlAttrsDetected };
|
|
194
|
+
}
|
|
195
|
+
// Emits all 4 regardless of which HTMLAttributes flavor (Button/Anchor/
|
|
196
|
+
// Input) was detected — Task 3's resolved ambiguity #1.
|
|
197
|
+
const HTML_ATTRS_ALLOWLIST = [
|
|
198
|
+
{
|
|
199
|
+
name: "type",
|
|
200
|
+
type: "enum",
|
|
201
|
+
values: ["button", "submit", "reset"],
|
|
202
|
+
optional: true,
|
|
203
|
+
default: "button",
|
|
204
|
+
},
|
|
205
|
+
{ name: "href", type: "string", optional: true },
|
|
206
|
+
{ name: "disabled", type: "boolean", optional: true, default: false },
|
|
207
|
+
{ name: "form", type: "string", optional: true },
|
|
208
|
+
];
|
|
209
|
+
function findCva(sf) {
|
|
210
|
+
for (const stmt of sf.getStatements()) {
|
|
211
|
+
if (!Node.isVariableStatement(stmt))
|
|
212
|
+
continue;
|
|
213
|
+
for (const decl of stmt.getDeclarationList().getDeclarations()) {
|
|
214
|
+
const init = decl.getInitializer();
|
|
215
|
+
if (!init || !Node.isCallExpression(init))
|
|
216
|
+
continue;
|
|
217
|
+
const expr = init.getExpression();
|
|
218
|
+
if (!Node.isIdentifier(expr) || expr.getText() !== "cva")
|
|
219
|
+
continue;
|
|
220
|
+
const [arg0, arg1] = init.getArguments();
|
|
221
|
+
const baseString = arg0 && Node.isStringLiteral(arg0) ? arg0.getLiteralText() : "";
|
|
222
|
+
const variantOrder = new Map();
|
|
223
|
+
const variantClassStrings = [];
|
|
224
|
+
const defaultVariants = new Map();
|
|
225
|
+
if (arg1 && Node.isObjectLiteralExpression(arg1)) {
|
|
226
|
+
for (const prop of arg1.getProperties()) {
|
|
227
|
+
if (!Node.isPropertyAssignment(prop))
|
|
228
|
+
continue;
|
|
229
|
+
const key = prop.getName();
|
|
230
|
+
if (key === "variants") {
|
|
231
|
+
const v = prop.getInitializer();
|
|
232
|
+
if (v && Node.isObjectLiteralExpression(v)) {
|
|
233
|
+
for (const vp of v.getProperties()) {
|
|
234
|
+
if (!Node.isPropertyAssignment(vp))
|
|
235
|
+
continue;
|
|
236
|
+
const varName = vp.getName();
|
|
237
|
+
const varVal = vp.getInitializer();
|
|
238
|
+
if (varVal && Node.isObjectLiteralExpression(varVal)) {
|
|
239
|
+
const keys = [];
|
|
240
|
+
for (const inner of varVal.getProperties()) {
|
|
241
|
+
if (!Node.isPropertyAssignment(inner))
|
|
242
|
+
continue;
|
|
243
|
+
keys.push(inner.getName());
|
|
244
|
+
const innerVal = inner.getInitializer();
|
|
245
|
+
if (innerVal && Node.isStringLiteral(innerVal)) {
|
|
246
|
+
variantClassStrings.push(innerVal.getLiteralText());
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
variantOrder.set(varName, keys);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (key === "defaultVariants") {
|
|
255
|
+
const v = prop.getInitializer();
|
|
256
|
+
if (v && Node.isObjectLiteralExpression(v)) {
|
|
257
|
+
for (const vp of v.getProperties()) {
|
|
258
|
+
if (!Node.isPropertyAssignment(vp))
|
|
259
|
+
continue;
|
|
260
|
+
const nm = vp.getName();
|
|
261
|
+
const val = vp.getInitializer();
|
|
262
|
+
if (val && Node.isStringLiteral(val)) {
|
|
263
|
+
defaultVariants.set(nm, val.getLiteralText());
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return { baseString, variantClassStrings, variantOrder, defaultVariants };
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
function extractCvaDefaults(cva) {
|
|
276
|
+
return cva ? cva.defaultVariants : new Map();
|
|
277
|
+
}
|
|
278
|
+
function findFunctionLikeNode(node) {
|
|
279
|
+
if (Node.isFunctionDeclaration(node) || Node.isArrowFunction(node) || Node.isFunctionExpression(node)) {
|
|
280
|
+
return node;
|
|
281
|
+
}
|
|
282
|
+
if (Node.isVariableDeclaration(node)) {
|
|
283
|
+
const init = node.getInitializer();
|
|
284
|
+
return init ? findFunctionLikeNode(init) : undefined;
|
|
285
|
+
}
|
|
286
|
+
if (Node.isCallExpression(node)) {
|
|
287
|
+
for (const arg of node.getArguments()) {
|
|
288
|
+
const found = findFunctionLikeNode(arg);
|
|
289
|
+
if (found)
|
|
290
|
+
return found;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return undefined;
|
|
294
|
+
}
|
|
295
|
+
function extractDefaultsFromParameter(componentDeclaration) {
|
|
296
|
+
const out = new Map();
|
|
297
|
+
const fnNode = findFunctionLikeNode(componentDeclaration);
|
|
298
|
+
if (!fnNode)
|
|
299
|
+
return out;
|
|
300
|
+
const firstParam = fnNode.getParameters()[0];
|
|
301
|
+
if (!firstParam)
|
|
302
|
+
return out;
|
|
303
|
+
const nameNode = firstParam.getNameNode();
|
|
304
|
+
if (!Node.isObjectBindingPattern(nameNode))
|
|
305
|
+
return out;
|
|
306
|
+
for (const el of nameNode.getElements()) {
|
|
307
|
+
if (!Node.isBindingElement(el))
|
|
308
|
+
continue;
|
|
309
|
+
const init = el.getInitializer();
|
|
310
|
+
if (!init)
|
|
311
|
+
continue;
|
|
312
|
+
const propName = el.getName();
|
|
313
|
+
if (Node.isStringLiteral(init)) {
|
|
314
|
+
out.set(propName, init.getLiteralText());
|
|
315
|
+
}
|
|
316
|
+
else if (Node.isTrueLiteral(init)) {
|
|
317
|
+
out.set(propName, true);
|
|
318
|
+
}
|
|
319
|
+
else if (Node.isFalseLiteral(init)) {
|
|
320
|
+
out.set(propName, false);
|
|
321
|
+
}
|
|
322
|
+
else if (Node.isNumericLiteral(init)) {
|
|
323
|
+
out.set(propName, Number(init.getText()));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return out;
|
|
327
|
+
}
|
|
328
|
+
// Step 6: assemble — type-checker-derived props, reordered to match cva's
|
|
329
|
+
// key order where applicable, merged with defaults (inline destructured
|
|
330
|
+
// defaults win over cva's defaultVariants — inline is the actual runtime
|
|
331
|
+
// default), plus the HTMLAttributes allowlist appended when detected.
|
|
332
|
+
function assemblePropSpecs(checkerProps, cva, htmlAttrsDetected, inlineDefaults, cvaDefaults) {
|
|
333
|
+
const byName = new Map();
|
|
334
|
+
for (const p of checkerProps) {
|
|
335
|
+
let spec = p;
|
|
336
|
+
// Reorder to match cva's source order (see comment above findCva).
|
|
337
|
+
if (spec.type === "enum" && cva?.variantOrder.has(spec.name)) {
|
|
338
|
+
const order = cva.variantOrder.get(spec.name);
|
|
339
|
+
const values = spec.values;
|
|
340
|
+
if (order.length === values.length && order.every((v) => values.includes(v))) {
|
|
341
|
+
spec = { ...spec, values: order };
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
const inlineDefault = inlineDefaults.get(spec.name);
|
|
345
|
+
const cvaDefault = cvaDefaults.get(spec.name);
|
|
346
|
+
const resolvedDefault = inlineDefault !== undefined ? inlineDefault : cvaDefault;
|
|
347
|
+
if (resolvedDefault !== undefined) {
|
|
348
|
+
if (spec.type === "enum" && typeof resolvedDefault === "string") {
|
|
349
|
+
spec = { ...spec, default: resolvedDefault };
|
|
350
|
+
}
|
|
351
|
+
else if (spec.type === "boolean" && typeof resolvedDefault === "boolean") {
|
|
352
|
+
spec = { ...spec, default: resolvedDefault };
|
|
353
|
+
}
|
|
354
|
+
else if (spec.type === "string" && typeof resolvedDefault === "string") {
|
|
355
|
+
spec = { ...spec, default: resolvedDefault };
|
|
356
|
+
}
|
|
357
|
+
else if (spec.type === "number" && typeof resolvedDefault === "number") {
|
|
358
|
+
spec = { ...spec, default: resolvedDefault };
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
byName.set(spec.name, spec);
|
|
362
|
+
}
|
|
363
|
+
if (htmlAttrsDetected) {
|
|
364
|
+
for (const p of HTML_ATTRS_ALLOWLIST) {
|
|
365
|
+
if (!byName.has(p.name))
|
|
366
|
+
byName.set(p.name, p);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return [...byName.values()];
|
|
370
|
+
}
|
|
371
|
+
function findLiteralClassNameStrings(sf) {
|
|
372
|
+
const out = [];
|
|
373
|
+
for (const attr of sf.getDescendantsOfKind(ts.SyntaxKind.JsxAttribute)) {
|
|
374
|
+
if (attr.getNameNode().getText() !== "className")
|
|
375
|
+
continue;
|
|
376
|
+
const init = attr.getInitializer();
|
|
377
|
+
if (init && Node.isStringLiteral(init)) {
|
|
378
|
+
out.push(init.getLiteralText());
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return out;
|
|
382
|
+
}
|
|
383
|
+
function harvestTokens(baseString, variantClassStrings, literalClassNameStrings, tokensMap) {
|
|
384
|
+
const all = [baseString, ...variantClassStrings, ...literalClassNameStrings]
|
|
385
|
+
.flatMap((s) => s.split(/\s+/))
|
|
386
|
+
.filter((c) => c.length > 0);
|
|
387
|
+
// Deduplicate while preserving first-seen order (stable diffs).
|
|
388
|
+
const seen = new Set();
|
|
389
|
+
const classes = [];
|
|
390
|
+
for (const c of all) {
|
|
391
|
+
if (!seen.has(c)) {
|
|
392
|
+
seen.add(c);
|
|
393
|
+
classes.push(c);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
const tokens = {
|
|
397
|
+
colors: [],
|
|
398
|
+
spacing: [],
|
|
399
|
+
radius: [],
|
|
400
|
+
font: [],
|
|
401
|
+
shadow: [],
|
|
402
|
+
};
|
|
403
|
+
const unmapped = [];
|
|
404
|
+
for (const c of classes) {
|
|
405
|
+
if (tokensMap.colors[c])
|
|
406
|
+
tokens.colors.push(tokensMap.colors[c]);
|
|
407
|
+
else if (tokensMap.spacing[c])
|
|
408
|
+
tokens.spacing.push(tokensMap.spacing[c]);
|
|
409
|
+
else if (tokensMap.radius[c])
|
|
410
|
+
tokens.radius.push(tokensMap.radius[c]);
|
|
411
|
+
else if (tokensMap.font[c])
|
|
412
|
+
tokens.font.push(tokensMap.font[c]);
|
|
413
|
+
else if (tokensMap.shadow[c])
|
|
414
|
+
tokens.shadow.push(tokensMap.shadow[c]);
|
|
415
|
+
else
|
|
416
|
+
unmapped.push(c);
|
|
417
|
+
}
|
|
418
|
+
// Dedup each category (a token can be produced by multiple classes).
|
|
419
|
+
for (const k of Object.keys(tokens)) {
|
|
420
|
+
tokens[k] = [...new Set(tokens[k])];
|
|
421
|
+
}
|
|
422
|
+
return { tokens, unmapped };
|
|
423
|
+
}
|
|
424
|
+
// Step 8: assemble the final spec and validate.
|
|
425
|
+
function assembleProps(specs) {
|
|
426
|
+
const out = {};
|
|
427
|
+
for (const p of specs) {
|
|
428
|
+
if (p.type === "enum") {
|
|
429
|
+
out[p.name] = {
|
|
430
|
+
type: "enum",
|
|
431
|
+
values: p.values,
|
|
432
|
+
...(p.default !== undefined ? { default: p.default } : {}),
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
else if (p.type === "boolean") {
|
|
436
|
+
out[p.name] = {
|
|
437
|
+
type: "boolean",
|
|
438
|
+
...(p.default !== undefined ? { default: p.default } : {}),
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
else if (p.type === "string") {
|
|
442
|
+
out[p.name] = { type: "string" };
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
out[p.name] = { type: "number" };
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return out;
|
|
449
|
+
}
|
|
450
|
+
function extract(source, absSourcePath, tokensMap, options, name) {
|
|
451
|
+
const project = new Project({
|
|
452
|
+
useInMemoryFileSystem: false,
|
|
453
|
+
compilerOptions: { ...TYPE_CHECKER_COMPILER_OPTIONS },
|
|
454
|
+
});
|
|
455
|
+
const sf = project.createSourceFile(absSourcePath + ".virtual.tsx", source, {
|
|
456
|
+
overwrite: true,
|
|
457
|
+
});
|
|
458
|
+
const checker = project.getTypeChecker();
|
|
459
|
+
// Step 2: locate the component export.
|
|
460
|
+
const componentExports = findComponentExports(sf);
|
|
461
|
+
if (componentExports.length === 0) {
|
|
462
|
+
throw new Error("spec from-react: no PascalCase component export found (need `export const X = React.forwardRef(...)` or `export function X(...)`)");
|
|
463
|
+
}
|
|
464
|
+
let target;
|
|
465
|
+
if (componentExports.length > 1) {
|
|
466
|
+
if (!options.exportName) {
|
|
467
|
+
throw new Error(`spec from-react: found multiple component exports (${componentExports
|
|
468
|
+
.map((c) => c.name)
|
|
469
|
+
.join(", ")}). Pass --export <Name> to disambiguate.`);
|
|
470
|
+
}
|
|
471
|
+
const found = componentExports.find((c) => c.name === options.exportName);
|
|
472
|
+
if (!found) {
|
|
473
|
+
throw new Error(`spec from-react: --export ${options.exportName} not found in source. Available: ${componentExports.map((c) => c.name).join(", ")}`);
|
|
474
|
+
}
|
|
475
|
+
target = found;
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
target = componentExports[0];
|
|
479
|
+
}
|
|
480
|
+
// Step 3: extract props via the type checker (shape-agnostic).
|
|
481
|
+
const { props: checkerProps, hasChildren, htmlAttrsDetected } = extractPropsViaTypeChecker(target, checker);
|
|
482
|
+
// Step 4/5: cva (tokens + defaultVariants) and inline destructured defaults.
|
|
483
|
+
const cva = findCva(sf);
|
|
484
|
+
const cvaDefaults = extractCvaDefaults(cva);
|
|
485
|
+
const inlineDefaults = extractDefaultsFromParameter(target.declaration);
|
|
486
|
+
// Step 6: assemble.
|
|
487
|
+
const mergedProps = assemblePropSpecs(checkerProps, cva, htmlAttrsDetected, inlineDefaults, cvaDefaults);
|
|
488
|
+
// Step 7: harvest tokens.
|
|
489
|
+
const { tokens, unmapped } = harvestTokens(cva?.baseString ?? "", cva?.variantClassStrings ?? [], findLiteralClassNameStrings(sf), tokensMap);
|
|
490
|
+
const hasUnmapped = unmapped.length > 0;
|
|
491
|
+
if (hasUnmapped) {
|
|
492
|
+
for (const c of unmapped) {
|
|
493
|
+
console.error(`spec from-react: unmapped class "${c}" has no entry in the tokens map`);
|
|
494
|
+
}
|
|
495
|
+
if (options.strict) {
|
|
496
|
+
process.exit(1);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
// Step 8: assemble + validate.
|
|
500
|
+
const finalSpec = {
|
|
501
|
+
name,
|
|
502
|
+
version: options.version ?? "1.0.0",
|
|
503
|
+
props: assembleProps(mergedProps),
|
|
504
|
+
...(hasChildren
|
|
505
|
+
? { slot: { name: "default", purpose: "TODO — describe slot purpose" } }
|
|
506
|
+
: {}),
|
|
507
|
+
tokens_used: hasUnmapped ? { ...tokens, _unmapped: unmapped } : tokens,
|
|
508
|
+
a11y: {
|
|
509
|
+
native_element: "TODO",
|
|
510
|
+
keyboard: [],
|
|
511
|
+
disabled_semantics: "TODO",
|
|
512
|
+
},
|
|
513
|
+
};
|
|
514
|
+
try {
|
|
515
|
+
componentContractSchema.parse(finalSpec);
|
|
516
|
+
}
|
|
517
|
+
catch (e) {
|
|
518
|
+
throw new Error(`spec from-react: emitted spec is schema-invalid: ${e.message}`);
|
|
519
|
+
}
|
|
520
|
+
return finalSpec;
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=spec-from-react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-from-react.js","sourceRoot":"","sources":["../src/spec-from-react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAkB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAE/D,4EAA4E;AAC5E,0EAA0E;AAC1E,wBAAwB;AACxB,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAE7C,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,uEAAuE;AACvE,MAAM,yBAAyB,GAAsB;IACnD,gCAAgC;IAChC,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AAEF,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,6BAA6B,GAAuB;IACxD,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;IACxB,GAAG,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACxC,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM;IAChD,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;IAC9B,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,IAAI;CACb,CAAC;AAaF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,OAAyB;IAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,uLAAuL,CACxL,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAEjD,mFAAmF;IACnF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;QAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAEhE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CACX,oBAAoB,OAAO,4EAA4E,CACxG,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC;AAaD,SAAS,oBAAoB,CAAC,EAAc;IAC1C,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;QACtC,wDAAwD;QACxD,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC/D,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,+DAA+D;gBAC/D,2DAA2D;gBAC3D,mEAAmE;gBACnE,gEAAgE;gBAChE,yDAAyD;gBACzD,IACE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAC5B,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBAC3B,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAChC,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,kEAAkE;QAClE,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,IAAI,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAmBD,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,oDAAoD;AACpD,SAAS,sBAAsB,CAAC,IAAc;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,kFAAkF;AAClF,MAAM,sBAAsB,GAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAE1F,SAAS,+BAA+B,CAAC,SAAe,EAAE,QAAqB;IAC7E,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,QAAiB,EACjB,IAAU;IAEV,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAE9C,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QACjD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,gEAAgE;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,0BAA0B,CACjC,MAAuB,EACvB,OAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAC,IAAI,gEAAgE,CACjG,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,+EAA+E;IACjH,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,4BAA4B,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,mEAAmE;YACnE,8DAA8D;YAC9D,mEAAmE;YACnE,IAAI,CAAC,YAAY;gBAAE,WAAW,GAAG,IAAI,CAAC;YACtC,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,iDAAiD;QACjD,IAAI,YAAY;YAAE,SAAS;QAE3B,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,gBAAgB,GAAG,UAAU;aAChC,eAAe,EAAE;aACjB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,YAAY,IAAI,gBAAgB,CAAC;QAElD,MAAM,QAAQ,GAAG,OAAO,CAAC,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AACnD,CAAC;AAED,wEAAwE;AACxE,wDAAwD;AACxD,MAAM,oBAAoB,GAAwB;IAChD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;QACrC,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,QAAQ;KAClB;IACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;CACjD,CAAC;AAiBF,SAAS,OAAO,CAAC,EAAc;IAC7B,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAAE,SAAS;QAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAAE,SAAS;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK;gBAAE,SAAS;YACnE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;YACjD,MAAM,mBAAmB,GAAa,EAAE,CAAC;YACzC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;YAClD,IAAI,IAAI,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;wBAAE,SAAS;oBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC3B,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;wBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;wBAChC,IAAI,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3C,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;gCACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;oCAAE,SAAS;gCAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gCAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;gCACnC,IAAI,MAAM,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;oCACrD,MAAM,IAAI,GAAa,EAAE,CAAC;oCAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;wCAC3C,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;4CAAE,SAAS;wCAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wCAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;wCACxC,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;4CAC/C,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;wCACtD,CAAC;oCACH,CAAC;oCACD,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gCAClC,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;wBAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;wBAChC,IAAI,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3C,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;gCACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;oCAAE,SAAS;gCAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gCACxB,MAAM,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;gCAChC,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oCACrC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;gCAChD,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAqB;IAC/C,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AAC/C,CAAC;AAaD,SAAS,oBAAoB,CAAC,IAAU;IACtC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,4BAA4B,CACnC,oBAA0B;IAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqC,CAAC;IACzD,MAAM,MAAM,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAExB,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,GAAG,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAAE,OAAO,GAAG,CAAC;IAEvD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,sEAAsE;AAEtE,SAAS,iBAAiB,CACxB,YAAwB,EACxB,GAAqB,EACrB,iBAA0B,EAC1B,cAAsD,EACtD,WAAgC;IAEhC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,mEAAmE;QACnE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;QAEjF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBAChE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC3E,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACzE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACzE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAiBD,SAAS,2BAA2B,CAAC,EAAc;IACjD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,WAAW;YAAE,SAAS;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CACpB,UAAkB,EAClB,mBAAsC,EACtC,uBAA0C,EAC1C,SAAoB;IAEpB,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,GAAG,mBAAmB,EAAE,GAAG,uBAAuB,CAAC;SACzE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,gEAAgE;IAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAoB;QAC9B,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5D,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACpE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACjE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;YACjE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,qEAAqE;IACrE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAA8B,EAAE,CAAC;QACjE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,gDAAgD;AAEhD,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACZ,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBACZ,IAAI,EAAE,SAAS;gBACf,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CACd,MAAc,EACd,aAAqB,EACrB,SAAoB,EACpB,OAAyB,EACzB,IAAY;IAEZ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,qBAAqB,EAAE,KAAK;QAC5B,eAAe,EAAE,EAAE,GAAG,6BAA6B,EAAE;KACtD,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa,GAAG,cAAc,EAAE,MAAM,EAAE;QAC1E,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAEzC,uCAAuC;IACvC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,mIAAmI,CACpI,CAAC;IACJ,CAAC;IACD,IAAI,MAAuB,CAAC;IAC5B,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,sDAAsD,gBAAgB;iBACnE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,0CAA0C,CACxD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,6BAA6B,OAAO,CAAC,UAAU,oCAAoC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpI,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;IAChC,CAAC;IAED,+DAA+D;IAC/D,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,0BAA0B,CACxF,MAAM,EACN,OAAO,CACR,CAAC;IAEF,6EAA6E;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IACxB,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,4BAA4B,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAExE,oBAAoB;IACpB,MAAM,WAAW,GAAG,iBAAiB,CACnC,YAAY,EACZ,GAAG,EACH,iBAAiB,EACjB,cAAc,EACd,WAAW,CACZ,CAAC;IAEF,0BAA0B;IAC1B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CACxC,GAAG,EAAE,UAAU,IAAI,EAAE,EACrB,GAAG,EAAE,mBAAmB,IAAI,EAAE,EAC9B,2BAA2B,CAAC,EAAE,CAAC,EAC/B,SAAS,CACV,CAAC;IACF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,kCAAkC,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG;QAChB,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO;QACnC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC;QACjC,GAAG,CAAC,WAAW;YACb,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE;YACjF,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM;QACtE,IAAI,EAAE;YACJ,cAAc,EAAE,MAAM;YACtB,QAAQ,EAAE,EAAc;YACxB,kBAAkB,EAAE,MAAM;SAC3B;KACF,CAAC;IAEF,IAAI,CAAC;QACH,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,oDAAqD,CAAW,CAAC,OAAO,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|