fixdog 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/cli/index.js +138 -37
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ The CLI will:
|
|
|
15
15
|
- Detect your framework (Vite or Next.js)
|
|
16
16
|
- Prompt for your project ID (get it from [app.fix.dog](https://app.fix.dog))
|
|
17
17
|
- Automatically inject the fixdog script into your project
|
|
18
|
+
- For Vite projects: Update `vite.config.ts/js/mjs` to add `projectId.fix.dog` to `allowedHosts`
|
|
18
19
|
|
|
19
20
|
### Non-interactive Mode
|
|
20
21
|
|
|
@@ -49,6 +50,20 @@ Add to your `index.html` inside `<head>`:
|
|
|
49
50
|
</script>
|
|
50
51
|
```
|
|
51
52
|
|
|
53
|
+
Also update your `vite.config.ts` (or `.js`/`.mjs`) to add the project host to `allowedHosts`:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { defineConfig } from "vite";
|
|
57
|
+
import react from "@vitejs/plugin-react";
|
|
58
|
+
|
|
59
|
+
export default defineConfig({
|
|
60
|
+
plugins: [react()],
|
|
61
|
+
server: {
|
|
62
|
+
allowedHosts: ["your-project-id.fix.dog"],
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
52
67
|
### Next.js App Router
|
|
53
68
|
|
|
54
69
|
Add to your `app/layout.tsx`:
|
package/dist/cli/index.js
CHANGED
|
@@ -18,6 +18,9 @@ const NEXT_SCRIPT_SNIPPET = (projectId) => `{process.env.NODE_ENV === "developme
|
|
|
18
18
|
src="${SCRIPT_URL}?projectId=${projectId}"
|
|
19
19
|
/>
|
|
20
20
|
)}`;
|
|
21
|
+
// ============================================
|
|
22
|
+
// Framework Detection
|
|
23
|
+
// ============================================
|
|
21
24
|
function detectFramework() {
|
|
22
25
|
if (!fs.existsSync("package.json"))
|
|
23
26
|
return null;
|
|
@@ -51,7 +54,10 @@ function detectNextRouter() {
|
|
|
51
54
|
function findFile(paths) {
|
|
52
55
|
return paths.find((p) => fs.existsSync(p)) || null;
|
|
53
56
|
}
|
|
54
|
-
|
|
57
|
+
// ============================================
|
|
58
|
+
// Vite Injections
|
|
59
|
+
// ============================================
|
|
60
|
+
function injectViteHtml(projectId) {
|
|
55
61
|
const file = findFile(["index.html", "public/index.html"]);
|
|
56
62
|
if (!file)
|
|
57
63
|
return null;
|
|
@@ -59,8 +65,61 @@ function injectVite(projectId) {
|
|
|
59
65
|
if (before.includes("fixdog"))
|
|
60
66
|
return null;
|
|
61
67
|
const after = before.replace("</head>", ` ${VITE_SNIPPET(projectId)}\n </head>`);
|
|
68
|
+
if (after === before)
|
|
69
|
+
return null;
|
|
70
|
+
return { file, before, after };
|
|
71
|
+
}
|
|
72
|
+
function injectViteConfig(projectId) {
|
|
73
|
+
const file = findFile([
|
|
74
|
+
"vite.config.ts",
|
|
75
|
+
"vite.config.js",
|
|
76
|
+
"vite.config.mjs",
|
|
77
|
+
]);
|
|
78
|
+
if (!file)
|
|
79
|
+
return null;
|
|
80
|
+
const before = fs.readFileSync(file, "utf-8");
|
|
81
|
+
const allowedHost = `${projectId}.fix.dog`;
|
|
82
|
+
// Already has this host
|
|
83
|
+
if (before.includes(allowedHost))
|
|
84
|
+
return null;
|
|
85
|
+
let after = before;
|
|
86
|
+
// Case 1: allowedHosts array exists - add to it
|
|
87
|
+
if (/allowedHosts:\s*\[/.test(before)) {
|
|
88
|
+
after = before.replace(/allowedHosts:\s*\[([^\]]*)\]/, (_, hosts) => {
|
|
89
|
+
const trimmed = hosts.trim();
|
|
90
|
+
if (trimmed) {
|
|
91
|
+
return `allowedHosts: [${trimmed}, "${allowedHost}"]`;
|
|
92
|
+
}
|
|
93
|
+
return `allowedHosts: ["${allowedHost}"]`;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Case 2: server block exists - add allowedHosts to it
|
|
97
|
+
else if (/server:\s*\{/.test(before)) {
|
|
98
|
+
after = before.replace(/server:\s*\{/, `server: {\n allowedHosts: ["${allowedHost}"],`);
|
|
99
|
+
}
|
|
100
|
+
// Case 3: plugins array exists - add server after it
|
|
101
|
+
else if (/plugins:\s*\[/.test(before)) {
|
|
102
|
+
after = before.replace(/(plugins:\s*\[[^\]]*\]),?/, `$1,\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
103
|
+
}
|
|
104
|
+
// Case 4: defineConfig exists - add server at the start
|
|
105
|
+
else if (/defineConfig\s*\(\s*\{/.test(before)) {
|
|
106
|
+
after = before.replace(/defineConfig\s*\(\s*\{/, `defineConfig({\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
107
|
+
}
|
|
108
|
+
// Case 5: export default { - add server at the start
|
|
109
|
+
else if (/export\s+default\s*\{/.test(before)) {
|
|
110
|
+
after = before.replace(/export\s+default\s*\{/, `export default {\n server: {\n allowedHosts: ["${allowedHost}"],\n },`);
|
|
111
|
+
}
|
|
112
|
+
// Can't parse - skip
|
|
113
|
+
else {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
if (after === before)
|
|
117
|
+
return null;
|
|
62
118
|
return { file, before, after };
|
|
63
119
|
}
|
|
120
|
+
// ============================================
|
|
121
|
+
// Next.js Injections
|
|
122
|
+
// ============================================
|
|
64
123
|
function injectNextApp(projectId) {
|
|
65
124
|
const file = findFile([
|
|
66
125
|
"app/layout.tsx",
|
|
@@ -74,12 +133,24 @@ function injectNextApp(projectId) {
|
|
|
74
133
|
if (before.includes("fixdog"))
|
|
75
134
|
return null;
|
|
76
135
|
let after = before;
|
|
77
|
-
|
|
78
|
-
|
|
136
|
+
// Case 1: <head> exists - inject inside it
|
|
137
|
+
if (/<head[^>]*>/.test(before)) {
|
|
138
|
+
after = before.replace(/<head([^>]*)>/, `<head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
79
139
|
}
|
|
80
|
-
|
|
140
|
+
// Case 2: <Head> (capital) exists - inject inside it
|
|
141
|
+
else if (/<Head[^>]*>/.test(before)) {
|
|
142
|
+
after = before.replace(/<Head([^>]*)>/, `<Head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
143
|
+
}
|
|
144
|
+
// Case 3: No head - add after <html>
|
|
145
|
+
else if (/<html[^>]*>/.test(before)) {
|
|
81
146
|
after = before.replace(/<html([^>]*)>/, `<html$1>\n <head>\n ${NEXT_SCRIPT_SNIPPET(projectId)}\n </head>`);
|
|
82
147
|
}
|
|
148
|
+
// Can't find injection point
|
|
149
|
+
else {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
if (after === before)
|
|
153
|
+
return null;
|
|
83
154
|
return { file, before, after };
|
|
84
155
|
}
|
|
85
156
|
function injectNextPages(projectId) {
|
|
@@ -94,16 +165,31 @@ function injectNextPages(projectId) {
|
|
|
94
165
|
const before = fs.readFileSync(file, "utf-8");
|
|
95
166
|
if (before.includes("fixdog"))
|
|
96
167
|
return null;
|
|
97
|
-
|
|
168
|
+
let after = before;
|
|
169
|
+
// Case 1: <Head> exists - inject inside it
|
|
170
|
+
if (/<Head[^>]*>/.test(before)) {
|
|
171
|
+
after = before.replace(/<Head([^>]*)>/, `<Head$1>\n ${NEXT_SCRIPT_SNIPPET(projectId)}`);
|
|
172
|
+
}
|
|
173
|
+
// Can't find injection point
|
|
174
|
+
else {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (after === before)
|
|
178
|
+
return null;
|
|
98
179
|
return { file, before, after };
|
|
99
180
|
}
|
|
181
|
+
// ============================================
|
|
182
|
+
// Diff Display
|
|
183
|
+
// ============================================
|
|
100
184
|
function showDiff(before, after) {
|
|
101
185
|
const changes = diffLines(before, after);
|
|
102
186
|
changes.forEach((part) => {
|
|
103
|
-
if (part.added)
|
|
187
|
+
if (part.added) {
|
|
104
188
|
process.stdout.write(color.green(`+ ${part.value}`));
|
|
105
|
-
|
|
189
|
+
}
|
|
190
|
+
else if (part.removed) {
|
|
106
191
|
process.stdout.write(color.red(`- ${part.value}`));
|
|
192
|
+
}
|
|
107
193
|
});
|
|
108
194
|
}
|
|
109
195
|
function parseArgs() {
|
|
@@ -114,36 +200,39 @@ function parseArgs() {
|
|
|
114
200
|
if (arg === "--projectId" || arg === "--project-id" || arg === "-p") {
|
|
115
201
|
options.projectId = args[++i];
|
|
116
202
|
}
|
|
203
|
+
else if (arg.startsWith("--projectId=") ||
|
|
204
|
+
arg.startsWith("--project-id=")) {
|
|
205
|
+
options.projectId = arg.split("=")[1];
|
|
206
|
+
}
|
|
117
207
|
else if (arg === "--yes" || arg === "-y") {
|
|
118
208
|
options.yes = true;
|
|
119
209
|
}
|
|
120
210
|
else if (arg === "--silent" || arg === "-s") {
|
|
121
211
|
options.silent = true;
|
|
122
212
|
}
|
|
123
|
-
else if (arg.startsWith("--projectId=") ||
|
|
124
|
-
arg.startsWith("--project-id=")) {
|
|
125
|
-
options.projectId = arg.split("=")[1];
|
|
126
|
-
}
|
|
127
213
|
}
|
|
128
214
|
return options;
|
|
129
215
|
}
|
|
130
216
|
async function main(options) {
|
|
131
217
|
const cliOptions = options || parseArgs();
|
|
132
|
-
|
|
218
|
+
const log = !cliOptions.silent;
|
|
219
|
+
if (log) {
|
|
133
220
|
intro(color.bgCyan(color.black(" 🐕 Fixdog Setup ")));
|
|
134
221
|
}
|
|
222
|
+
// Detect framework
|
|
135
223
|
const s = spinner();
|
|
136
224
|
s.start("Detecting framework");
|
|
137
225
|
const framework = detectFramework();
|
|
138
226
|
if (!framework) {
|
|
139
227
|
s.stop("Not detected");
|
|
140
|
-
if (
|
|
228
|
+
if (log) {
|
|
141
229
|
outro(color.red("Could not detect framework. Supported: Next.js, Vite"));
|
|
142
230
|
}
|
|
143
231
|
process.exit(1);
|
|
144
232
|
}
|
|
145
233
|
const router = framework === "next" ? detectNextRouter() : null;
|
|
146
234
|
s.stop(`Found ${framework === "next" ? "Next.js" : "Vite"}${router ? ` (${router} router)` : ""}`);
|
|
235
|
+
// Get project ID
|
|
147
236
|
let projectId;
|
|
148
237
|
if (cliOptions.projectId) {
|
|
149
238
|
projectId = cliOptions.projectId;
|
|
@@ -155,47 +244,59 @@ async function main(options) {
|
|
|
155
244
|
validate: (v) => (!v ? "Required" : undefined),
|
|
156
245
|
});
|
|
157
246
|
if (typeof input !== "string") {
|
|
158
|
-
if (
|
|
247
|
+
if (log)
|
|
159
248
|
outro(color.red("Cancelled"));
|
|
160
|
-
}
|
|
161
249
|
process.exit(1);
|
|
162
250
|
}
|
|
163
251
|
projectId = input;
|
|
164
252
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
253
|
+
// Collect all injections
|
|
254
|
+
const results = [];
|
|
255
|
+
if (framework === "vite") {
|
|
256
|
+
const htmlResult = injectViteHtml(projectId);
|
|
257
|
+
if (htmlResult)
|
|
258
|
+
results.push(htmlResult);
|
|
259
|
+
const configResult = injectViteConfig(projectId);
|
|
260
|
+
if (configResult)
|
|
261
|
+
results.push(configResult);
|
|
262
|
+
}
|
|
263
|
+
else if (framework === "next") {
|
|
264
|
+
const result = router === "app" ? injectNextApp(projectId) : injectNextPages(projectId);
|
|
265
|
+
if (result)
|
|
266
|
+
results.push(result);
|
|
267
|
+
}
|
|
268
|
+
// No changes to make
|
|
269
|
+
if (results.length === 0) {
|
|
270
|
+
if (log) {
|
|
271
|
+
outro(color.yellow("Already installed or target files not found"));
|
|
173
272
|
}
|
|
174
273
|
process.exit(0);
|
|
175
274
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
apply = true;
|
|
275
|
+
// Show diffs
|
|
276
|
+
if (log) {
|
|
277
|
+
for (const result of results) {
|
|
278
|
+
console.log(color.dim(`\nChanges to ${result.file}:\n`));
|
|
279
|
+
showDiff(result.before, result.after);
|
|
280
|
+
console.log();
|
|
281
|
+
}
|
|
184
282
|
}
|
|
185
|
-
|
|
283
|
+
// Confirm and apply
|
|
284
|
+
let apply = cliOptions.yes || cliOptions.silent;
|
|
285
|
+
if (!apply && log) {
|
|
186
286
|
const confirmed = await confirm({ message: "Apply changes?" });
|
|
187
287
|
apply = confirmed === true;
|
|
188
288
|
}
|
|
189
289
|
if (apply) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
290
|
+
for (const result of results) {
|
|
291
|
+
fs.writeFileSync(result.file, result.after);
|
|
292
|
+
}
|
|
293
|
+
if (log) {
|
|
294
|
+
outro(color.green("Done! Run your dev server."));
|
|
193
295
|
}
|
|
194
296
|
}
|
|
195
297
|
else {
|
|
196
|
-
if (
|
|
298
|
+
if (log)
|
|
197
299
|
outro(color.yellow("Cancelled"));
|
|
198
|
-
}
|
|
199
300
|
process.exit(1);
|
|
200
301
|
}
|
|
201
302
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAKA,MAAM,UAAU,GAAG,6CAA6C;AAEhE,MAAM,YAAY,GAAG,CAAC,SAAiB,KACrC,CAAA;;;;AAIW,WAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;;cAGhC;AAEd,MAAM,mBAAmB,GAAG,CAAC,SAAiB,KAC5C,CAAA;;;AAGiB,iBAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;WAEzC;AAEX,SAAS,eAAe,GAAA;AACtB,IAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;AAAE,QAAA,OAAO,IAAI;AAC/C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAChE,IAAA,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE;IAC5D,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;IAC/B,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;AAC/B,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,gBAAgB,GAAA;AACvB,IAAA,MAAM,QAAQ,GAAG;QACf,gBAAgB;QAChB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;KACpB;AACD,IAAA,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,oBAAoB;QACpB,yBAAyB;QACzB,wBAAwB;KACzB;AACD,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;AACxD,IAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,OAAO;AAC5D,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,QAAQ,CAAC,KAAe,EAAA;AAC/B,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AACpD;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/cli/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAKA,MAAM,UAAU,GAAG,6CAA6C;AAEhE,MAAM,YAAY,GAAG,CAAC,SAAiB,KACrC,CAAA;;;;AAIW,WAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;;cAGhC;AAEd,MAAM,mBAAmB,GAAG,CAAC,SAAiB,KAC5C,CAAA;;;AAGiB,iBAAA,EAAA,UAAU,cAAc,SAAS,CAAA;;WAEzC;AAEX;AACA;AACA;AAEA,SAAS,eAAe,GAAA;AACtB,IAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;AAAE,QAAA,OAAO,IAAI;AAC/C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAChE,IAAA,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE;IAC5D,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;IAC/B,IAAI,IAAI,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,MAAM;AAC/B,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,gBAAgB,GAAA;AACvB,IAAA,MAAM,QAAQ,GAAG;QACf,gBAAgB;QAChB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;KACpB;AACD,IAAA,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,oBAAoB;QACpB,yBAAyB;QACzB,wBAAwB;KACzB;AACD,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;AACxD,IAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,OAAO;AAC5D,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,QAAQ,CAAC,KAAe,EAAA;AAC/B,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AACpD;AAYA;AACA;AACA;AAEA,SAAS,cAAc,CAAC,SAAiB,EAAA;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AAC1D,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,IAAI;AAE1C,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAC1B,SAAS,EACT,CAAA,IAAA,EAAO,YAAY,CAAC,SAAS,CAAC,CAAA,WAAA,CAAa,CAC5C;IAED,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI;AACjC,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAChC;AAEA,SAAS,gBAAgB,CAAC,SAAiB,EAAA;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;AAClB,KAAA,CAAC;AACF,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,CAAA,EAAG,SAAS,UAAU;;AAG1C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;AAAE,QAAA,OAAO,IAAI;IAE7C,IAAI,KAAK,GAAG,MAAM;;AAGlB,IAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,QAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;AAClE,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;YAC5B,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAA,eAAA,EAAkB,OAAO,CAAA,GAAA,EAAM,WAAW,IAAI;YACvD;YACA,OAAO,CAAA,gBAAA,EAAmB,WAAW,CAAA,EAAA,CAAI;AAC3C,QAAA,CAAC,CAAC;IACJ;;AAEK,SAAA,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACpC,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,cAAc,EACd,CAAA,+BAAA,EAAkC,WAAW,CAAA,GAAA,CAAK,CACnD;IACH;;AAEK,SAAA,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrC,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,2BAA2B,EAC3B,CAAA,sCAAA,EAAyC,WAAW,CAAA,SAAA,CAAW,CAChE;IACH;;AAEK,SAAA,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC9C,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,wBAAwB,EACxB,CAAA,iDAAA,EAAoD,WAAW,CAAA,SAAA,CAAW,CAC3E;IACH;;AAEK,SAAA,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC7C,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,uBAAuB,EACvB,CAAA,mDAAA,EAAsD,WAAW,CAAA,SAAA,CAAW,CAC7E;IACH;;SAEK;AACH,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI;AACjC,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAChC;AAEA;AACA;AACA;AAEA,SAAS,aAAa,CAAC,SAAiB,EAAA;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,gBAAgB;QAChB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;AACpB,KAAA,CAAC;AACF,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,IAAI;IAE1C,IAAI,KAAK,GAAG,MAAM;;AAGlB,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC9B,QAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,eAAe,EACf,CAAA,kBAAA,EAAqB,mBAAmB,CAAC,SAAS,CAAC,CAAA,CAAE,CACtD;IACH;;AAEK,SAAA,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACnC,QAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,eAAe,EACf,CAAA,kBAAA,EAAqB,mBAAmB,CAAC,SAAS,CAAC,CAAA,CAAE,CACtD;IACH;;AAEK,SAAA,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACnC,QAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,eAAe,EACf,CAAA,gCAAA,EAAmC,mBAAmB,CACpD,SAAS,CACV,CAAA,eAAA,CAAiB,CACnB;IACH;;SAEK;AACH,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI;AACjC,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAChC;AAEA,SAAS,eAAe,CAAC,SAAiB,EAAA;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,yBAAyB;QACzB,wBAAwB;AACzB,KAAA,CAAC;AACF,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7C,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,QAAA,OAAO,IAAI;IAE1C,IAAI,KAAK,GAAG,MAAM;;AAGlB,IAAA,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC9B,QAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CACpB,eAAe,EACf,CAAA,kBAAA,EAAqB,mBAAmB,CAAC,SAAS,CAAC,CAAA,CAAE,CACtD;IACH;;SAEK;AACH,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI;AACjC,IAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAChC;AAEA;AACA;AACA;AAEA,SAAS,QAAQ,CAAC,MAAc,EAAE,KAAa,EAAA;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;AACxC,IAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAY,KAAI;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,CAAC;QACtD;AAAO,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,CAAC;QACpD;AACF,IAAA,CAAC,CAAC;AACJ;AAYA,SAAS,SAAS,GAAA;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,MAAM,OAAO,GAAe,EAAE;AAE9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,IAAI,EAAE;YACnE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B;AAAO,aAAA,IACL,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;AAC9B,YAAA,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAC/B;AACA,YAAA,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC;aAAO,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,EAAE;AAC1C,YAAA,OAAO,CAAC,GAAG,GAAG,IAAI;QACpB;aAAO,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,IAAI,EAAE;AAC7C,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI;QACvB;IACF;AAEA,IAAA,OAAO,OAAO;AAChB;AAEO,eAAe,IAAI,CAAC,OAAoB,EAAA;AAC7C,IAAA,MAAM,UAAU,GAAG,OAAO,IAAI,SAAS,EAAE;AACzC,IAAA,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM;IAE9B,IAAI,GAAG,EAAE;AACP,QAAA,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACvD;;AAGA,IAAA,MAAM,CAAC,GAAG,OAAO,EAAE;AACnB,IAAA,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;AAE9B,IAAA,MAAM,SAAS,GAAG,eAAe,EAAE;IACnC,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QACtB,IAAI,GAAG,EAAE;YACP,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QAC1E;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AAEA,IAAA,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI;AAC/D,IAAA,CAAC,CAAC,IAAI,CACJ,CAAA,MAAA,EAAS,SAAS,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA,EAChD,MAAM,GAAG,CAAA,EAAA,EAAK,MAAM,CAAA,QAAA,CAAU,GAAG,EACnC,CAAA,CAAE,CACH;;AAGD,IAAA,IAAI,SAAiB;AACrB,IAAA,IAAI,UAAU,CAAC,SAAS,EAAE;AACxB,QAAA,SAAS,GAAG,UAAU,CAAC,SAAS;IAClC;SAAO;AACL,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC;AACvB,YAAA,OAAO,EAAE,wBAAwB;AACjC,YAAA,WAAW,EAAE,YAAY;AACzB,YAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/C,SAAA,CAAC;AAEF,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,GAAG;gBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;QACA,SAAS,GAAG,KAAK;IACnB;;IAGA,MAAM,OAAO,GAAsB,EAAE;AAErC,IAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,QAAA,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,UAAU;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAExC,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,YAAY;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IAC9C;AAAO,SAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AAC/B,QAAA,MAAM,MAAM,GACV,MAAM,KAAK,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC;AAC1E,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAClC;;AAGA,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,IAAI,GAAG,EAAE;YACP,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;QACpE;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;;IAGA,IAAI,GAAG,EAAE;AACP,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,IAAI,CAAA,GAAA,CAAK,CAAC,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACrC,OAAO,CAAC,GAAG,EAAE;QACf;IACF;;IAGA,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM;AAE/C,IAAA,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC9D,QAAA,KAAK,GAAG,SAAS,KAAK,IAAI;IAC5B;IAEA,IAAI,KAAK,EAAE;AACT,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QAC7C;QACA,IAAI,GAAG,EAAE;YACP,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD;IACF;SAAO;AACL,QAAA,IAAI,GAAG;YAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACzC,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB;AACF;;;;"}
|