@hozu/cli 0.1.0 → 0.3.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/README.md +2 -0
- package/dist/commands/add.d.ts +6 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +269 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/check.d.ts +5 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +55 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/map.d.ts +5 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +125 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/request.d.ts +24 -0
- package/dist/commands/request.d.ts.map +1 -0
- package/dist/commands/request.js +305 -0
- package/dist/commands/request.js.map +1 -0
- package/dist/commands/scaffold.d.ts +32 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +533 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/contract.d.ts +119 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +88 -1
- package/dist/main.js.map +1 -1
- package/package.json +6 -6
- package/schema/add.schema.json +69 -0
- package/schema/check.schema.json +405 -0
- package/schema/map.schema.json +383 -0
- package/schema/request.schema.json +144 -0
package/README.md
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AddOutput } from '../contract.ts';
|
|
2
|
+
export declare function runAddFeature(cwd: string, config: string | undefined, name: string | undefined, page: string | undefined, parts?: string | undefined): Promise<AddOutput>;
|
|
3
|
+
export declare function declarationsOf(source: string): Record<string, string[]>;
|
|
4
|
+
export declare function textsOf(source: string, file: string): AddOutput['texts'];
|
|
5
|
+
export declare function describeAdd(out: AddOutput): string;
|
|
6
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAqD/C,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,GAAE,MAAM,GAAG,SAAqB,GACpC,OAAO,CAAC,SAAS,CAAC,CAoMpB;AAYD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CASvE;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAmBxE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAgBlD"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
5
|
+
import { HozuCliError } from '../errors.js';
|
|
6
|
+
import { accountModel, accountServer, accountViews, model, namesOf, PARTS, server, views, } from './scaffold.js';
|
|
7
|
+
const addImport = (source, line) => {
|
|
8
|
+
const imports = [...source.matchAll(/^import[\s\S]*?from '[^']+'\n/gm)];
|
|
9
|
+
const last = imports.at(-1);
|
|
10
|
+
if (!last)
|
|
11
|
+
return null;
|
|
12
|
+
const at = last.index + last[0].length;
|
|
13
|
+
return source.slice(0, at) + line + source.slice(at);
|
|
14
|
+
};
|
|
15
|
+
const callEnd = (source, open) => {
|
|
16
|
+
let depth = 0;
|
|
17
|
+
let quote = null;
|
|
18
|
+
for (let i = open; i < source.length; i++) {
|
|
19
|
+
const c = source[i];
|
|
20
|
+
if (quote) {
|
|
21
|
+
if (c === '\\')
|
|
22
|
+
i++;
|
|
23
|
+
else if (c === quote)
|
|
24
|
+
quote = null;
|
|
25
|
+
}
|
|
26
|
+
else if (c === "'" || c === '"' || c === '`')
|
|
27
|
+
quote = c;
|
|
28
|
+
else if (c === '(')
|
|
29
|
+
depth++;
|
|
30
|
+
else if (c === ')' && --depth === 0)
|
|
31
|
+
return i + 1;
|
|
32
|
+
}
|
|
33
|
+
return -1;
|
|
34
|
+
};
|
|
35
|
+
const replacePage = (source, route, text) => {
|
|
36
|
+
const m = new RegExp(`ui\\.page\\(\\s*${route}\\s*,`).exec(source);
|
|
37
|
+
if (!m)
|
|
38
|
+
return null;
|
|
39
|
+
const end = callEnd(source, m.index + 'ui.page'.length);
|
|
40
|
+
return end < 0 ? null : source.slice(0, m.index) + text + source.slice(end);
|
|
41
|
+
};
|
|
42
|
+
const append = (source, pattern, item) => {
|
|
43
|
+
const m = pattern.exec(source);
|
|
44
|
+
if (!m)
|
|
45
|
+
return null;
|
|
46
|
+
const inner = m[1].trim().replace(/,$/, '');
|
|
47
|
+
const replaced = m[0].replace(m[1], inner ? `${inner}, ${item}` : item);
|
|
48
|
+
return source.slice(0, m.index) + replaced + source.slice(m.index + m[0].length);
|
|
49
|
+
};
|
|
50
|
+
export async function runAddFeature(cwd, config, name, page, parts = undefined) {
|
|
51
|
+
const asked = (parts ?? '')
|
|
52
|
+
.split(',')
|
|
53
|
+
.map((p) => p.trim())
|
|
54
|
+
.filter(Boolean);
|
|
55
|
+
for (const p of asked)
|
|
56
|
+
if (!PARTS.includes(p))
|
|
57
|
+
throw new HozuCliError('usage', `Unknown --with part "${p}"`, [`--with ${PARTS.join(',')}`]);
|
|
58
|
+
const w = Object.fromEntries(PARTS.map((p) => [p, asked.includes(p)]));
|
|
59
|
+
if (w.filter)
|
|
60
|
+
w.toggle = true;
|
|
61
|
+
if (w.detail && page === undefined)
|
|
62
|
+
throw new HozuCliError('usage', '--with detail needs --page, so the detail page can link back', [
|
|
63
|
+
`hozu add feature ${name ?? 'tasks'} --page / --with detail`,
|
|
64
|
+
]);
|
|
65
|
+
if (w.auth && page === undefined)
|
|
66
|
+
throw new HozuCliError('usage', '--with auth needs --page, the page that signed-in users land on', [
|
|
67
|
+
`hozu add feature ${name ?? 'notes'} --page / --with auth`,
|
|
68
|
+
]);
|
|
69
|
+
if (!name || !/^[a-z][a-zA-Z0-9]*$/.test(name))
|
|
70
|
+
throw new HozuCliError('usage', 'Give the feature a lower-case identifier', [
|
|
71
|
+
'hozu add feature tasks --page /',
|
|
72
|
+
]);
|
|
73
|
+
if (page !== undefined && !/^\/[\w/-]*$/.test(page))
|
|
74
|
+
throw new HozuCliError('usage', '--page must be a static path such as / or /tasks', [
|
|
75
|
+
'Routes with params are written by hand: route({ path: "/tasks/:id", params: z.object({ id: z.string() }), search: null })',
|
|
76
|
+
]);
|
|
77
|
+
const configPath = resolve(cwd, config ?? 'hozu.config.ts');
|
|
78
|
+
const root = dirname(configPath);
|
|
79
|
+
const dir = join(root, 'features', name);
|
|
80
|
+
if (existsSync(dir))
|
|
81
|
+
throw new HozuCliError('usage', `features/${name} already exists`, []);
|
|
82
|
+
const n = namesOf(name);
|
|
83
|
+
const out = { created: [], edited: [], manual: [], declarations: {}, texts: [] };
|
|
84
|
+
await mkdir(dir, { recursive: true });
|
|
85
|
+
const routesPath = join(root, 'routes.ts');
|
|
86
|
+
const routesSource = existsSync(routesPath) ? await readFile(routesPath, 'utf8') : '';
|
|
87
|
+
const existing = page === undefined
|
|
88
|
+
? null
|
|
89
|
+
: new RegExp(`export const (\\w+) = route\\(\\{\\s*path: '${page.replace(/[/-]/g, '\\$&')}'`).exec(routesSource);
|
|
90
|
+
const pageRoute = page === undefined ? null : (existing?.[1] ?? `${name}Page`);
|
|
91
|
+
const newRoute = page !== undefined && !existing;
|
|
92
|
+
const detailPath = page === undefined ? null : page === '/' ? `/${n.many}/:id` : `${page}/:id`;
|
|
93
|
+
const accountDir = join(root, 'features', 'account');
|
|
94
|
+
const newAccount = w.auth && !existsSync(accountDir);
|
|
95
|
+
const newLogin = newAccount && !/export const login = route\(/.test(routesSource);
|
|
96
|
+
const files = [
|
|
97
|
+
[join(dir, 'model.ts'), model(n, w)],
|
|
98
|
+
[join(dir, 'views.ts'), views(n, w, pageRoute)],
|
|
99
|
+
[join(dir, 'server.ts'), server(n, w)],
|
|
100
|
+
...(newAccount && pageRoute && page
|
|
101
|
+
? [
|
|
102
|
+
[join(accountDir, 'model.ts'), accountModel(pageRoute)],
|
|
103
|
+
[join(accountDir, 'views.ts'), accountViews(page)],
|
|
104
|
+
[join(accountDir, 'server.ts'), accountServer()],
|
|
105
|
+
]
|
|
106
|
+
: []),
|
|
107
|
+
];
|
|
108
|
+
for (const [path, text] of files) {
|
|
109
|
+
await mkdir(dirname(path), { recursive: true });
|
|
110
|
+
await writeFile(path, text);
|
|
111
|
+
out.created.push(relative(cwd, path));
|
|
112
|
+
}
|
|
113
|
+
const edit = async (file, change, manual) => {
|
|
114
|
+
const path = join(root, file);
|
|
115
|
+
const source = existsSync(path) ? await readFile(path, 'utf8') : null;
|
|
116
|
+
const next = source === null ? null : change(source);
|
|
117
|
+
if (next === null)
|
|
118
|
+
out.manual.push(`${file}: ${manual}`);
|
|
119
|
+
else {
|
|
120
|
+
await writeFile(path, next);
|
|
121
|
+
if (!out.edited.includes(relative(cwd, path)))
|
|
122
|
+
out.edited.push(relative(cwd, path));
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
await edit('server.ts', (s) => {
|
|
126
|
+
const wired = s.replace(/resolvers\(project,\s*\((?:implement)?\)\s*=>\s*\[/, `resolvers(project, (implement) => [\n ${newAccount ? '...accountResolvers(implement),\n ' : ''}...${n.resolvers}(implement),`);
|
|
127
|
+
if (wired === s)
|
|
128
|
+
return null;
|
|
129
|
+
const withFeature = addImport(wired, `import { ${n.resolvers} } from './features/${name}/server.ts'\n`);
|
|
130
|
+
return newAccount && withFeature
|
|
131
|
+
? addImport(withFeature, `import { accountResolvers } from './features/account/server.ts'\n`)
|
|
132
|
+
: withFeature;
|
|
133
|
+
}, `import { ${n.resolvers} } from './features/${name}/server.ts' and add ...${n.resolvers}(implement) to resolvers(project, (implement) => [...])`);
|
|
134
|
+
if (newAccount)
|
|
135
|
+
await edit('serve.ts', (s) => {
|
|
136
|
+
const next = s.replace(/resolvers: createResolvers\(\),/, `resolvers: createResolvers(),\n session: sessionCookie({\n name: 'sid',\n secret: process.env.SESSION_SECRET ?? '${randomBytes(24).toString('hex')}',\n secure: process.env.SESSION_SECURE === 'true',\n }),`);
|
|
137
|
+
return next === s ? null : addImport(next, `import { sessionCookie } from '@hozu/runtime-server'\n`);
|
|
138
|
+
}, "createServer({ ..., session: sessionCookie({ name: 'sid', secret: process.env.SESSION_SECRET, secure: false }) }) with sessionCookie from '@hozu/runtime-server'");
|
|
139
|
+
const newRoutes = [
|
|
140
|
+
...(newLogin ? [`export const login = route({ path: '/login', params: null, search: null })`] : []),
|
|
141
|
+
...(newRoute
|
|
142
|
+
? [`export const ${pageRoute} = route({ path: '${page}', params: null, search: null })`]
|
|
143
|
+
: []),
|
|
144
|
+
...(w.detail
|
|
145
|
+
? [
|
|
146
|
+
`export const ${n.detailRoute} = route({ path: '${detailPath}', params: z.object({ id: z.string() }), search: null })`,
|
|
147
|
+
]
|
|
148
|
+
: []),
|
|
149
|
+
];
|
|
150
|
+
if (newRoutes.length)
|
|
151
|
+
await edit('routes.ts', (source) => {
|
|
152
|
+
const withZod = w.detail && !/from 'zod'/.test(source) ? addImport(source, `import { z } from 'zod'\n`) : source;
|
|
153
|
+
return withZod === null ? null : `${withZod.trimEnd()}\n${newRoutes.join('\n')}\n`;
|
|
154
|
+
}, newRoutes.join('; '));
|
|
155
|
+
await edit(config ?? 'hozu.config.ts', (s) => {
|
|
156
|
+
let next = addImport(s, `import { ${[n.View, n.feature, ...(w.detail ? [n.Detail] : [])].sort().join(', ')} } from './features/${name}/views.ts'\n`);
|
|
157
|
+
if (next && w.detail)
|
|
158
|
+
next = addImport(next, `import { ${[n.get, n.list].sort().join(', ')} } from './features/${name}/model.ts'\n`);
|
|
159
|
+
if (next && newAccount) {
|
|
160
|
+
next = addImport(next, `import { me, Session } from './features/account/model.ts'\n`);
|
|
161
|
+
if (next)
|
|
162
|
+
next = addImport(next, `import { AccountBar, account, Login } from './features/account/views.ts'\n`);
|
|
163
|
+
if (next && !/\bsession:/.test(next))
|
|
164
|
+
next = next.replace(/(schema: \w+,\n)/, `$1 session: Session,\n`);
|
|
165
|
+
if (next)
|
|
166
|
+
next = append(next, /features:\s*\[([^\]]*)\]/, 'account');
|
|
167
|
+
}
|
|
168
|
+
if (next)
|
|
169
|
+
next = append(next, /features:\s*\[([^\]]*)\]/, n.feature);
|
|
170
|
+
const routeNames = [
|
|
171
|
+
...(newLogin ? ['login'] : []),
|
|
172
|
+
...(newRoute && pageRoute ? [pageRoute] : []),
|
|
173
|
+
...(w.detail ? [n.detailRoute] : []),
|
|
174
|
+
];
|
|
175
|
+
for (const r of routeNames)
|
|
176
|
+
if (next)
|
|
177
|
+
next = append(next, /routes:\s*\{([^}]*)\}/, r);
|
|
178
|
+
if (next && routeNames.length)
|
|
179
|
+
next =
|
|
180
|
+
next.replace(/import \{([^}]*)\} from '\.\/routes\.ts'/, (all, names) => all.replace(names, ` ${[
|
|
181
|
+
...names
|
|
182
|
+
.split(',')
|
|
183
|
+
.map((x) => x.trim())
|
|
184
|
+
.filter(Boolean),
|
|
185
|
+
...routeNames,
|
|
186
|
+
]
|
|
187
|
+
.sort()
|
|
188
|
+
.join(', ')} `)) ?? null;
|
|
189
|
+
if (next && w.detail)
|
|
190
|
+
next = next.replace(/pages:\s*\[/, (m) => `${m}\n ui.page(${n.detailRoute}, {\n views: [${n.Detail}],\n head: { query: ${n.get}, input: (params) => ({ id: params.id }), render: (item) => ({ title: item.title }) },\n entries: { query: ${n.list}, input: {}, params: (item) => ({ id: item.id }) },\n }),`);
|
|
191
|
+
if (next && newAccount)
|
|
192
|
+
next = next.replace(/pages:\s*\[/, (m) => `${m}\n ui.page(login, { views: [Login], head: { render: () => ({ title: 'Sign in' }) } }),`);
|
|
193
|
+
if (next && pageRoute) {
|
|
194
|
+
const text = w.auth
|
|
195
|
+
? `ui.page(${pageRoute}, {\n views: [AccountBar, ${n.View}],\n head: {\n query: me,\n input: () => ({}),\n render: () => ({ title: '${n.title}', noindex: true }),\n redirects: { Unauthorized: login },\n },\n })`
|
|
196
|
+
: `ui.page(${pageRoute}, { views: [${n.View}], head: { render: () => ({ title: '${n.title}' }) } })`;
|
|
197
|
+
next = newRoute
|
|
198
|
+
? next.replace(/pages:\s*\[/, (m) => `${m}\n ${text},`)
|
|
199
|
+
: replacePage(next, pageRoute, text);
|
|
200
|
+
}
|
|
201
|
+
return next?.replace(/\),\s*ui\.page\(/g, '),\n ui.page(') ?? null;
|
|
202
|
+
}, `import { ${n.View}, ${n.feature} } from './features/${name}/views.ts', add ${n.feature} to features${pageRoute ? ` and ui.page(${pageRoute}, { views: [${n.View}], head: { render: () => ({ title: '${n.title}' }) } }) to pages` : ''}`);
|
|
203
|
+
for (const file of out.created) {
|
|
204
|
+
const source = await readFile(resolve(cwd, file), 'utf8');
|
|
205
|
+
for (const [kind, names] of Object.entries(declarationsOf(source)))
|
|
206
|
+
out.declarations[kind] = [...(out.declarations[kind] ?? []), ...names];
|
|
207
|
+
out.texts.push(...textsOf(source, file));
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
211
|
+
const KINDS = {
|
|
212
|
+
event: 'events',
|
|
213
|
+
query: 'queries',
|
|
214
|
+
mutation: 'mutations',
|
|
215
|
+
fn: 'fns',
|
|
216
|
+
machine: 'machine',
|
|
217
|
+
'ui.view': 'views',
|
|
218
|
+
contract: 'contracts',
|
|
219
|
+
};
|
|
220
|
+
export function declarationsOf(source) {
|
|
221
|
+
const out = {};
|
|
222
|
+
for (const m of source.matchAll(/^export const (\w+) = (event|query|mutation|fn|machine|ui\.view|contract)\(/gm)) {
|
|
223
|
+
const kind = KINDS[m[2]];
|
|
224
|
+
out[kind] = [...(out[kind] ?? []), m[1]];
|
|
225
|
+
}
|
|
226
|
+
return out;
|
|
227
|
+
}
|
|
228
|
+
export function textsOf(source, file) {
|
|
229
|
+
const texts = [];
|
|
230
|
+
source.split('\n').forEach((line, i) => {
|
|
231
|
+
if (/^\s*((given|when|expect|data|result|input|payload):|\{ (send|done|failed):)/.test(line))
|
|
232
|
+
return;
|
|
233
|
+
const message = /^export const [A-Z_]+ = '([^']+)'$/.exec(line);
|
|
234
|
+
if (message)
|
|
235
|
+
texts.push({ file, line: i + 1, text: message[1] });
|
|
236
|
+
const label = /\blabel: '([^']+)'/.exec(line);
|
|
237
|
+
if (label)
|
|
238
|
+
texts.push({ file, line: i + 1, text: label[1] });
|
|
239
|
+
if (file.endsWith('model.ts'))
|
|
240
|
+
return;
|
|
241
|
+
const scan = line.replace(/when\(\[[^\]]*\]/g, '');
|
|
242
|
+
const found = new Set();
|
|
243
|
+
for (const lead of scan.matchAll(/\[\s*'([^']*)'\s*,/g))
|
|
244
|
+
found.add(lead[1]);
|
|
245
|
+
for (const group of scan.matchAll(/\[([^[\]]*)\]/g))
|
|
246
|
+
for (const lit of group[1].matchAll(/'([^']*)'/g))
|
|
247
|
+
if ((/[A-Za-z…]/.test(lit[1]) && !/^[a-z]+$/.test(lit[1])) || /^(done|open)$/.test(lit[1]))
|
|
248
|
+
found.add(lit[1]);
|
|
249
|
+
for (const text of found)
|
|
250
|
+
if (/[A-Za-z…]/.test(text))
|
|
251
|
+
texts.push({ file, line: i + 1, text });
|
|
252
|
+
});
|
|
253
|
+
return texts;
|
|
254
|
+
}
|
|
255
|
+
export function describeAdd(out) {
|
|
256
|
+
const lines = [
|
|
257
|
+
...out.created.map((f) => `created ${f}`),
|
|
258
|
+
...out.edited.map((f) => `edited ${f}`),
|
|
259
|
+
...out.manual.map((m) => `todo ${m}`),
|
|
260
|
+
...Object.entries(out.declarations).map(([k, names]) => `${k.padEnd(10)}${names.join(' ')}`),
|
|
261
|
+
...[...new Map(out.texts.map((t) => [`${t.file}:${t.line}`, []])).keys()].map((at) => `text ${at} ${out.texts
|
|
262
|
+
.filter((t) => `${t.file}:${t.line}` === at)
|
|
263
|
+
.map((t) => JSON.stringify(t.text))
|
|
264
|
+
.join(' ')}`),
|
|
265
|
+
'next edit the texts above to the spec (no need to print the files; hozu map shows the structure), then hozu check',
|
|
266
|
+
];
|
|
267
|
+
return `${lines.join('\n')}\n`;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACP,KAAK,EAEL,MAAM,EACN,KAAK,GAEN,MAAM,eAAe,CAAA;AAEtB,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAAY,EAAiB,EAAE;IAChE,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,CAAA;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,IAAY,EAAU,EAAE;IACvD,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QACpB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAA;iBACd,IAAI,CAAC,KAAK,KAAK;gBAAE,KAAK,GAAG,IAAI,CAAA;QACpC,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,GAAG,CAAC,CAAA;aACpD,IAAI,CAAC,KAAK,GAAG;YAAE,KAAK,EAAE,CAAA;aACtB,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,IAAY,EAAiB,EAAE;IACjF,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,mBAAmB,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACvD,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,IAAY,EAAiB,EAAE;IAC9E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACxE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,MAA0B,EAC1B,IAAwB,EACxB,IAAwB,EACxB,KAAK,GAAuB,SAAS;IAErC,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,KAAK,MAAM,CAAC,IAAI,KAAK;QACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAS,CAAC;YAC5B,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC,GAAG,EAAE,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAChG,MAAM,CAAC,GAAS,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAS,CAAA;IACpF,IAAI,CAAC,CAAC,MAAM;QAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAA;IAC7B,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,KAAK,SAAS;QAChC,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,8DAA8D,EAAE;YAC9F,oBAAoB,IAAI,IAAI,OAAO,yBAAyB;SAC7D,CAAC,CAAA;IACJ,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS;QAC9B,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,iEAAiE,EAAE;YACjG,oBAAoB,IAAI,IAAI,OAAO,uBAAuB;SAC3D,CAAC,CAAA;IACJ,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,0CAA0C,EAAE;YAC1E,iCAAiC;SAClC,CAAC,CAAA;IACJ,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,kDAAkD,EAAE;YAClF,2HAA2H;SAC5H,CAAC,CAAA;IACJ,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,gBAAgB,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IACxC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAC3F,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,MAAM,GAAG,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC3F,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrF,MAAM,QAAQ,GACZ,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,MAAM,CAAC,+CAA+C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC9F,YAAY,CACb,CAAA;IACP,MAAM,SAAS,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,CAAA;IAC9E,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAA;IAChD,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAA;IAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACjF,MAAM,KAAK,GAAuB;QAChC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,UAAU,IAAI,SAAS,IAAI,IAAI;YACjC,CAAC,CAAE;gBACC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBACvD,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;aAC1B;YAC1B,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;IACvC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoC,EAAE,MAAc,EAAE,EAAE;QACxF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACrE,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,IAAI,KAAK,IAAI;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC,CAAA;aACnD,CAAC;YACJ,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;QACrF,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,CACR,WAAW,EACX,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CACrB,oDAAoD,EACpD,4CAA4C,UAAU,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,cAAc,CACrI,CAAA;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,SAAS,uBAAuB,IAAI,eAAe,CAAC,CAAA;QACvG,OAAO,UAAU,IAAI,WAAW;YAC9B,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,mEAAmE,CAAC;YAC7F,CAAC,CAAC,WAAW,CAAA;IACjB,CAAC,EACD,YAAY,CAAC,CAAC,SAAS,uBAAuB,IAAI,0BAA0B,CAAC,CAAC,SAAS,yDAAyD,CACjJ,CAAA;IACD,IAAI,UAAU;QACZ,MAAM,IAAI,CACR,UAAU,EACV,CAAC,CAAC,EAAE,EAAE;YACJ,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CACpB,iCAAiC,EACjC,2HAA2H,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,+DAA+D,CAC1N,CAAA;YACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,wDAAwD,CAAC,CAAA;QACtG,CAAC,EACD,kKAAkK,CACnK,CAAA;IACH,MAAM,SAAS,GAAG;QAChB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,4EAA4E,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,GAAG,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,gBAAgB,SAAS,qBAAqB,IAAI,kCAAkC,CAAC;YACxF,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,CAAC,CAAC,MAAM;YACV,CAAC,CAAC;gBACE,gBAAgB,CAAC,CAAC,WAAW,qBAAqB,UAAU,0DAA0D;aACvH;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;IACD,IAAI,SAAS,CAAC,MAAM;QAClB,MAAM,IAAI,CACR,WAAW,EACX,CAAC,MAAM,EAAE,EAAE;YACT,MAAM,OAAO,GACX,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;YAClG,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QACpF,CAAC,EACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CACrB,CAAA;IACH,MAAM,IAAI,CACR,MAAM,IAAI,gBAAgB,EAC1B,CAAC,CAAC,EAAE,EAAE;QACJ,IAAI,IAAI,GAAkB,SAAS,CACjC,CAAC,EACD,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,cAAc,CAC5H,CAAA;QACD,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM;YAClB,IAAI,GAAG,SAAS,CACd,IAAI,EACJ,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,cAAc,CACvF,CAAA;QACH,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;YACvB,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,6DAA6D,CAAC,CAAA;YACrF,IAAI,IAAI;gBACN,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,4EAA4E,CAAC,CAAA;YACtG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAA;YACpE,IAAI,IAAI;gBAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,0BAA0B,EAAE,SAAS,CAAC,CAAA;QACtE,CAAC;QACD,IAAI,IAAI;YAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;QACpE,MAAM,UAAU,GAAG;YACjB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC,CAAA;QACD,KAAK,MAAM,CAAC,IAAI,UAAU;YAAE,IAAI,IAAI;gBAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAA;QACrF,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM;YAC3B,IAAI;gBACF,IAAI,CAAC,OAAO,CAAC,0CAA0C,EAAE,CAAC,GAAG,EAAE,KAAa,EAAE,EAAE,CAC9E,GAAG,CAAC,OAAO,CACT,KAAK,EACL,IAAI;oBACF,GAAG,KAAK;yBACL,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;yBACpB,MAAM,CAAC,OAAO,CAAC;oBAClB,GAAG,UAAU;iBACd;qBACE,IAAI,EAAE;qBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CACjB,CACF,IAAI,IAAI,CAAA;QACb,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM;YAClB,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,aAAa,EACb,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,iBAAiB,CAAC,CAAC,WAAW,sBAAsB,CAAC,CAAC,MAAM,4BAA4B,CAAC,CAAC,GAAG,mHAAmH,CAAC,CAAC,IAAI,8DAA8D,CAC3R,CAAA;QACH,IAAI,IAAI,IAAI,UAAU;YACpB,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,aAAa,EACb,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,2FAA2F,CAClG,CAAA;QACH,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;gBACjB,CAAC,CAAC,WAAW,SAAS,kCAAkC,CAAC,CAAC,IAAI,uGAAuG,CAAC,CAAC,KAAK,qFAAqF;gBACjQ,CAAC,CAAC,WAAW,SAAS,eAAe,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC,KAAK,WAAW,CAAA;YACtG,IAAI,GAAG,QAAQ;gBACb,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC;gBAC1D,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,EAAE,OAAO,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,IAAI,IAAI,CAAA;IACvE,CAAC,EACD,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,uBAAuB,IAAI,mBAAmB,CAAC,CAAC,OAAO,eAAe,SAAS,CAAC,CAAC,CAAC,gBAAgB,SAAS,eAAe,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1O,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QACzD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAChE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAA;QACxE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,KAAK,GAA2B;IACpC,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,WAAW;IACrB,EAAE,EAAE,KAAK;IACT,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,WAAW;CACtB,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,GAAG,GAA6B,EAAE,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAC7B,+EAA+E,CAChF,EAAE,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,CAAE,CAAA;QAC1B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,IAAY;IAClD,MAAM,KAAK,GAAuB,EAAE,CAAA;IACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,6EAA6E,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAM;QACpG,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC,CAAA;QACjE,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAA;QAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAAE,OAAM;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QAC5E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;oBAC3F,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAA;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAc;IACxC,MAAM,KAAK,GAAG;QACZ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1C,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,EAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CACvF,CAAC,EAAE,EAAE,EAAE,CACL,aAAa,EAAE,KAAK,GAAG,CAAC,KAAK;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjB;QACD,wHAAwH;KACzH,CAAA;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CheckOutput, TypeIssue } from '../contract.ts';
|
|
2
|
+
import type { Loaded } from '../load.ts';
|
|
3
|
+
export declare function typeErrors(output: string, root: string): TypeIssue[];
|
|
4
|
+
export declare function runCheck(loaded: Loaded, cwd: string, updateLock: boolean): Promise<CheckOutput>;
|
|
5
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAcxC,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAcpE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBrG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import { dirname, join, relative } from 'node:path';
|
|
5
|
+
import { runValidate } from './validate.js';
|
|
6
|
+
function typescriptBin(from) {
|
|
7
|
+
try {
|
|
8
|
+
const require = createRequire(from);
|
|
9
|
+
const manifest = require.resolve('typescript/package.json');
|
|
10
|
+
const bin = JSON.parse(readFileSync(manifest, 'utf8')).bin?.tsc;
|
|
11
|
+
return bin ? join(dirname(manifest), bin) : null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function typeErrors(output, root) {
|
|
18
|
+
const errors = [];
|
|
19
|
+
for (const line of output.split('\n')) {
|
|
20
|
+
const m = /^(.+?)\((\d+),(\d+)\): error (TS\d+): (.*)$/.exec(line.trim());
|
|
21
|
+
if (m)
|
|
22
|
+
errors.push({
|
|
23
|
+
file: relative(root, join(root, m[1])),
|
|
24
|
+
line: Number(m[2]),
|
|
25
|
+
column: Number(m[3]),
|
|
26
|
+
code: m[4],
|
|
27
|
+
message: m[5],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return errors;
|
|
31
|
+
}
|
|
32
|
+
export async function runCheck(loaded, cwd, updateLock) {
|
|
33
|
+
const root = dirname(loaded.path);
|
|
34
|
+
const tsc = typescriptBin(loaded.path);
|
|
35
|
+
let types;
|
|
36
|
+
if (!tsc)
|
|
37
|
+
types = { ok: false, skipped: true, errors: [] };
|
|
38
|
+
else {
|
|
39
|
+
const run = spawnSync(process.execPath, [tsc, '--noEmit', '--pretty', 'false', '-p', root], {
|
|
40
|
+
cwd: root,
|
|
41
|
+
encoding: 'utf8',
|
|
42
|
+
});
|
|
43
|
+
const errors = typeErrors(`${run.stdout}\n${run.stderr}`, root);
|
|
44
|
+
types = {
|
|
45
|
+
ok: run.status === 0,
|
|
46
|
+
skipped: false,
|
|
47
|
+
errors: run.status === 0 || errors.length
|
|
48
|
+
? errors
|
|
49
|
+
: [{ file: '', line: 0, column: 0, code: 'tsc', message: (run.stderr || run.stdout).trim() }],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const validate = await runValidate(loaded, undefined, cwd, updateLock);
|
|
53
|
+
return { ok: types.ok && validate.ok, types, validate };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,SAAS,EAAY,MAAM,gBAAgB,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAYxC,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAmF7D;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAyClD"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { relative } from 'node:path';
|
|
2
|
+
import { resolveSource } from '@hozu/core/ir';
|
|
3
|
+
const local = (ref) => ref.slice(ref.indexOf('.') + 1);
|
|
4
|
+
const fieldsOf = (schema) => {
|
|
5
|
+
const props = schema && typeof schema === 'object' ? schema.properties : undefined;
|
|
6
|
+
return props ? Object.keys(props) : [];
|
|
7
|
+
};
|
|
8
|
+
const freshnessText = (f) => ('seconds' in f ? `${f.kind} ${f.seconds}s` : f.kind);
|
|
9
|
+
export function runMap(loaded, cwd) {
|
|
10
|
+
const build = loaded.build(true);
|
|
11
|
+
const { ir } = build;
|
|
12
|
+
const at = (pointer) => {
|
|
13
|
+
const s = resolveSource(build.sources, pointer);
|
|
14
|
+
return s ? `${relative(cwd, s.file)}:${s.line}` : null;
|
|
15
|
+
};
|
|
16
|
+
const routes = Object.entries(ir.routes).map(([id, r]) => {
|
|
17
|
+
const page = ir.pages[id];
|
|
18
|
+
return {
|
|
19
|
+
id,
|
|
20
|
+
path: r.path,
|
|
21
|
+
search: fieldsOf(r.search ?? undefined),
|
|
22
|
+
views: page?.views ?? [],
|
|
23
|
+
head: page?.head.query?.ref ?? null,
|
|
24
|
+
at: at(`/pages/${id}`) ?? at(`/routes/${id}`),
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
const features = Object.values(ir.features).map((f) => {
|
|
28
|
+
const base = `/features/${f.id}`;
|
|
29
|
+
const m = f.machine;
|
|
30
|
+
const states = m
|
|
31
|
+
? Object.entries(m.states).map(([name, s]) => ({
|
|
32
|
+
name,
|
|
33
|
+
initial: name === m.initial,
|
|
34
|
+
final: s.final,
|
|
35
|
+
on: Object.entries(s.on).map(([event, list]) => ({
|
|
36
|
+
event: local(event),
|
|
37
|
+
targets: list.map((t) => t.target),
|
|
38
|
+
})),
|
|
39
|
+
invoke: s.invoke
|
|
40
|
+
? {
|
|
41
|
+
effect: local(s.invoke.effect),
|
|
42
|
+
done: s.invoke.done.map((t) => t.target),
|
|
43
|
+
failed: Object.fromEntries(Object.entries(s.invoke.failed).map(([e, list]) => [e, list.map((t) => t.target)])),
|
|
44
|
+
}
|
|
45
|
+
: null,
|
|
46
|
+
ignore: s.ignore.map(local),
|
|
47
|
+
after: s.after.map((a) => ({ ms: a.ms, target: a.transition.target })),
|
|
48
|
+
at: at(`${base}/machine/states/${name}/invoke`) ??
|
|
49
|
+
at(`${base}/machine/states/${name}/on/${Object.keys(s.on)[0] ?? ''}/0`) ??
|
|
50
|
+
at(`${base}/machine`),
|
|
51
|
+
}))
|
|
52
|
+
: [];
|
|
53
|
+
return {
|
|
54
|
+
id: f.id,
|
|
55
|
+
queries: Object.entries(f.queries).map(([name, q]) => ({
|
|
56
|
+
name,
|
|
57
|
+
scope: q.scope,
|
|
58
|
+
freshness: freshnessText(q.freshness),
|
|
59
|
+
errors: Object.keys(q.errors),
|
|
60
|
+
tags: q.tags.map((t) => local(t.tag)),
|
|
61
|
+
at: at(`${base}/queries/${name}`),
|
|
62
|
+
})),
|
|
63
|
+
mutations: Object.entries(f.mutations).map(([name, q]) => ({
|
|
64
|
+
name,
|
|
65
|
+
errors: Object.keys(q.errors),
|
|
66
|
+
invalidates: q.invalidates.map((t) => local(t.tag)),
|
|
67
|
+
at: at(`${base}/mutations/${name}`),
|
|
68
|
+
})),
|
|
69
|
+
events: Object.entries(f.events).map(([name, e]) => ({
|
|
70
|
+
name,
|
|
71
|
+
fields: fieldsOf(f.schemas[e.payload]),
|
|
72
|
+
at: at(`${base}/events/${name}`),
|
|
73
|
+
})),
|
|
74
|
+
fns: Object.keys(f.fns),
|
|
75
|
+
context: m ? fieldsOf(f.schemas[m.context]) : [],
|
|
76
|
+
machineAt: m ? at(`${base}/machine`) : null,
|
|
77
|
+
states,
|
|
78
|
+
views: Object.entries(f.views).map(([name, v]) => ({
|
|
79
|
+
name,
|
|
80
|
+
machine: v.machine !== null,
|
|
81
|
+
route: v.route,
|
|
82
|
+
at: at(`${base}/views/${name}`),
|
|
83
|
+
})),
|
|
84
|
+
contracts: Object.keys(f.contracts).length,
|
|
85
|
+
contractsAt: at(`${base}/contracts/${Object.keys(f.contracts)[0] ?? ''}`),
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
return { routes, features };
|
|
89
|
+
}
|
|
90
|
+
const where = (s) => (s ? ` ${s}` : '');
|
|
91
|
+
export function describeMap(out) {
|
|
92
|
+
const lines = ['routes'];
|
|
93
|
+
for (const r of out.routes)
|
|
94
|
+
lines.push(` ${r.id} ${r.path}${r.search.length ? `?${r.search.join('&')}` : ''} → ${r.views.map(local).join(', ') || '(no page)'}${r.head ? ` · head ${local(r.head)}` : ''}${where(r.at)}`);
|
|
95
|
+
for (const f of out.features) {
|
|
96
|
+
lines.push(`feature ${f.id}`);
|
|
97
|
+
for (const q of f.queries)
|
|
98
|
+
lines.push(` query ${q.name} ${q.scope} ${q.freshness}${q.errors.length ? ` !${q.errors.join(' !')}` : ''}${q.tags.length ? ` [${q.tags.join(' ')}]` : ''}${where(q.at)}`);
|
|
99
|
+
for (const q of f.mutations)
|
|
100
|
+
lines.push(` mutation ${q.name}${q.errors.length ? ` !${q.errors.join(' !')}` : ''}${q.invalidates.length ? ` ⟳${q.invalidates.join(' ')}` : ''}${where(q.at)}`);
|
|
101
|
+
if (f.events.length)
|
|
102
|
+
lines.push(` events ${f.events.map((e) => `${e.name}{${e.fields.join(',')}}`).join(' ')}`);
|
|
103
|
+
if (f.fns.length)
|
|
104
|
+
lines.push(` fns ${f.fns.join(' ')}`);
|
|
105
|
+
if (f.context.length)
|
|
106
|
+
lines.push(` context ${f.context.join(' ')}${where(f.machineAt)}`);
|
|
107
|
+
for (const s of f.states) {
|
|
108
|
+
const parts = s.on.map((t) => `${t.event}→${t.targets.join('|')}`);
|
|
109
|
+
if (s.invoke)
|
|
110
|
+
parts.push(`invoke ${s.invoke.effect} done→${s.invoke.done.join('|')} ${Object.entries(s.invoke.failed)
|
|
111
|
+
.map(([e, t]) => `${e}→${t.join('|')}`)
|
|
112
|
+
.join(' ')}`);
|
|
113
|
+
for (const a of s.after)
|
|
114
|
+
parts.push(`after ${a.ms}ms→${a.target}`);
|
|
115
|
+
if (s.ignore.length)
|
|
116
|
+
parts.push(`ignore ${s.ignore.join(' ')}`);
|
|
117
|
+
lines.push(` state ${s.name}${s.initial ? '*' : ''}${s.final ? ' (final)' : ''}: ${parts.join('; ')}${where(s.at)}`);
|
|
118
|
+
}
|
|
119
|
+
for (const v of f.views)
|
|
120
|
+
lines.push(` view ${v.name}${v.machine ? ' (machine)' : ''}${v.route ? ` route ${v.route}` : ''}${where(v.at)}`);
|
|
121
|
+
lines.push(` contracts ${f.contracts}${where(f.contractsAt)}`);
|
|
122
|
+
}
|
|
123
|
+
return `${lines.join('\n')}\n`;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RequestElement, RequestOutput } from '../contract.ts';
|
|
2
|
+
import type { Loaded } from '../load.ts';
|
|
3
|
+
interface Form {
|
|
4
|
+
action: string;
|
|
5
|
+
fields: Record<string, string>;
|
|
6
|
+
buttons: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function formsOf(html: string, at: string): Form[];
|
|
9
|
+
export declare function elementsOf(html: string, selector: string): RequestElement[];
|
|
10
|
+
export interface RequestOptions {
|
|
11
|
+
method: 'GET' | 'POST';
|
|
12
|
+
paths: string[];
|
|
13
|
+
fields: string[];
|
|
14
|
+
next: string[];
|
|
15
|
+
button: string | undefined;
|
|
16
|
+
select: string[];
|
|
17
|
+
forms: boolean;
|
|
18
|
+
session: string | undefined;
|
|
19
|
+
full: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function runRequest(loaded: Loaded, options: RequestOptions): Promise<RequestOutput>;
|
|
22
|
+
export declare function describeRequest(out: RequestOutput): string;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/commands/request.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAA;AAEhF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAqCxC,UAAU,IAAI;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,CAqCxD;AAiCD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CA+B3E;AAYD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,IAAI,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAgJhG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAyB1D"}
|