@zphhpzzph/vue-route-gen 1.0.0 → 2.0.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 +709 -36
- package/dist/extract-meta.d.ts +33 -0
- package/dist/extract-meta.d.ts.map +1 -0
- package/dist/extract-meta.js +137 -0
- package/dist/extract-meta.js.map +1 -0
- package/dist/hooks.d.ts +45 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +30 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +327 -24
- package/dist/index.js.map +1 -1
- package/dist/vite.d.ts +51 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +242 -0
- package/dist/vite.js.map +1 -0
- package/package.json +27 -7
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RouteRecordRaw, RouteRecordRedirectOption, _RouteRecordProps } from 'vue-router';
|
|
2
|
+
type RouteRecordProps = _RouteRecordProps;
|
|
3
|
+
/**
|
|
4
|
+
* Route configuration override interface
|
|
5
|
+
* Supports all RouteRecordRaw fields for complete customization
|
|
6
|
+
*/
|
|
7
|
+
export interface RouteConfigOverride {
|
|
8
|
+
path?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
alias?: string | string[];
|
|
11
|
+
redirect?: RouteRecordRedirectOption;
|
|
12
|
+
props?: RouteRecordProps;
|
|
13
|
+
meta?: Record<string, any>;
|
|
14
|
+
children?: RouteRecordRaw[];
|
|
15
|
+
beforeEnter?: any;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse Vue SFC and extract complete route configuration
|
|
20
|
+
* Supports both <route> custom block and defineRoute() macro
|
|
21
|
+
*
|
|
22
|
+
* @param filePath - Path to the Vue SFC file
|
|
23
|
+
* @returns Route configuration override, or undefined if no custom config
|
|
24
|
+
* @throws Error if both <route> block and defineRoute() are present
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractRouteConfig(filePath: string): RouteConfigOverride | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Parse Vue SFC and extract metadata from <route> custom block
|
|
29
|
+
* @deprecated Use extractRouteConfig() instead for full configuration support
|
|
30
|
+
*/
|
|
31
|
+
export declare function extractRouteMeta(filePath: string): Record<string, any>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=extract-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-meta.d.ts","sourceRoot":"","sources":["../src/extract-meta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/F,KAAK,gBAAgB,GAAG,iBAAiB,CAAC;AAE1C;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAiDpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAStE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { parse } from '@vue/compiler-sfc';
|
|
3
|
+
/**
|
|
4
|
+
* Parse Vue SFC and extract complete route configuration
|
|
5
|
+
* Supports both <route> custom block and defineRoute() macro
|
|
6
|
+
*
|
|
7
|
+
* @param filePath - Path to the Vue SFC file
|
|
8
|
+
* @returns Route configuration override, or undefined if no custom config
|
|
9
|
+
* @throws Error if both <route> block and defineRoute() are present
|
|
10
|
+
*/
|
|
11
|
+
export function extractRouteConfig(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
14
|
+
const { descriptor } = parse(content);
|
|
15
|
+
// Detect conflict between <route> block and defineRoute()
|
|
16
|
+
const hasRouteBlock = descriptor.customBlocks.some((b) => b.type === 'route');
|
|
17
|
+
const hasDefineRoute = descriptor.scriptSetup?.content.includes('defineRoute');
|
|
18
|
+
if (hasRouteBlock && hasDefineRoute) {
|
|
19
|
+
throw new Error(`[vue-route-gen] Error in ${filePath}:\n` +
|
|
20
|
+
'Cannot use both <route> custom block and defineRoute() macro.\n' +
|
|
21
|
+
'Please choose one method:\n' +
|
|
22
|
+
' - Use <route> block in template section\n' +
|
|
23
|
+
' - Use defineRoute() in <script setup>\n\n' +
|
|
24
|
+
'Example:\n' +
|
|
25
|
+
' <route>{ "path": "/custom" }</route>\n' +
|
|
26
|
+
' OR\n' +
|
|
27
|
+
' <script setup>\n' +
|
|
28
|
+
' defineRoute({ path: "/custom" })\n' +
|
|
29
|
+
' </script>');
|
|
30
|
+
}
|
|
31
|
+
// Extract from <route> block
|
|
32
|
+
if (hasRouteBlock) {
|
|
33
|
+
const routeBlock = descriptor.customBlocks.find((b) => b.type === 'route');
|
|
34
|
+
return parseRouteConfig(routeBlock.content);
|
|
35
|
+
}
|
|
36
|
+
// Extract from defineRoute() call
|
|
37
|
+
if (hasDefineRoute) {
|
|
38
|
+
const defineRouteCall = extractDefineRouteCall(descriptor.scriptSetup.content);
|
|
39
|
+
if (defineRouteCall) {
|
|
40
|
+
return evaluateDefineRouteCall(defineRouteCall, descriptor.scriptSetup.content);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// Re-throw conflict errors as they are user errors
|
|
47
|
+
if (error instanceof Error && error.message.includes('Cannot use both')) {
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
// Warn about other errors but don't fail the build
|
|
51
|
+
console.warn(`[vue-route-gen] Failed to extract route config from ${filePath}:`, error);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse Vue SFC and extract metadata from <route> custom block
|
|
57
|
+
* @deprecated Use extractRouteConfig() instead for full configuration support
|
|
58
|
+
*/
|
|
59
|
+
export function extractRouteMeta(filePath) {
|
|
60
|
+
try {
|
|
61
|
+
const config = extractRouteConfig(filePath);
|
|
62
|
+
return config?.meta ?? {};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
// If config extraction fails (e.g., conflict), return empty meta
|
|
66
|
+
console.warn(`Failed to extract meta from ${filePath}:`, error);
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extract defineRoute() call content from script setup
|
|
72
|
+
*/
|
|
73
|
+
function extractDefineRouteCall(scriptContent) {
|
|
74
|
+
// Match: const xxx = defineRoute(...) or defineRoute(...)
|
|
75
|
+
// Support both variable assignment and direct call
|
|
76
|
+
const patterns = [
|
|
77
|
+
// const/let/var xxx = defineRoute(...)
|
|
78
|
+
/(?:const|let|var)\s+\w+\s*=\s*defineRoute\s*\(([\s\S]*?)\)\s*(?:;|$)/,
|
|
79
|
+
// Direct defineRoute(...) call
|
|
80
|
+
/defineRoute\s*\(([\s\S]*?)\)\s*(?:;|$)/,
|
|
81
|
+
];
|
|
82
|
+
for (const pattern of patterns) {
|
|
83
|
+
const match = scriptContent.match(pattern);
|
|
84
|
+
if (match) {
|
|
85
|
+
return match[1];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Evaluate defineRoute() call content with constant replacement
|
|
92
|
+
* Phase 1 MVP: Simple evaluation without complex constant resolution
|
|
93
|
+
*/
|
|
94
|
+
function evaluateDefineRouteCall(callContent, scriptContent) {
|
|
95
|
+
try {
|
|
96
|
+
// Phase 1 MVP: Direct evaluation without constant replacement
|
|
97
|
+
// Future enhancement: Parse imports and replace constants
|
|
98
|
+
return parseRouteConfig(callContent);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.warn('[vue-route-gen] Failed to evaluate defineRoute() call:', error);
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parse route configuration from content
|
|
107
|
+
* Supports both JSON and JavaScript object literal syntax
|
|
108
|
+
*/
|
|
109
|
+
function parseRouteConfig(content) {
|
|
110
|
+
const trimmed = content.trim();
|
|
111
|
+
try {
|
|
112
|
+
// Try parsing as JSON first
|
|
113
|
+
const parsed = JSON.parse(trimmed);
|
|
114
|
+
return parsed;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// If JSON parsing fails, try evaluating as JavaScript object literal
|
|
118
|
+
try {
|
|
119
|
+
// Use Function constructor for safe evaluation
|
|
120
|
+
const fn = new Function(`return (${trimmed});`);
|
|
121
|
+
return fn();
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.warn('[vue-route-gen] Failed to parse route config:', error);
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Parse the content of <route> custom block
|
|
131
|
+
* The content should be valid JSON or JavaScript object literal
|
|
132
|
+
* @deprecated Use parseRouteConfig() instead
|
|
133
|
+
*/
|
|
134
|
+
function parseRouteBlockContent(content) {
|
|
135
|
+
return parseRouteConfig(content) ?? {};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=extract-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-meta.js","sourceRoot":"","sources":["../src/extract-meta.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { RouteLocationNormalizedLoaded, Router, RouteParams as VueRouteParams, LocationQuery } from 'vue-router';
|
|
2
|
+
/**
|
|
3
|
+
* Type-safe route location for navigation
|
|
4
|
+
*/
|
|
5
|
+
export interface TypedRouteLocation<TName extends string = string, TParams = Record<string, any>> {
|
|
6
|
+
name?: TName;
|
|
7
|
+
path?: string;
|
|
8
|
+
params?: TParams & VueRouteParams;
|
|
9
|
+
query?: LocationQuery;
|
|
10
|
+
hash?: string;
|
|
11
|
+
state?: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Type-safe router push/replace method
|
|
15
|
+
*/
|
|
16
|
+
export type TypedNavigationMethod = <TName extends string, TParams extends Record<string, any> = Record<string, any>>(location: TypedRouteLocation<TName, TParams>) => ReturnType<Router['push']>;
|
|
17
|
+
/**
|
|
18
|
+
* Enhanced Router with typed navigation methods
|
|
19
|
+
*/
|
|
20
|
+
export interface TypedRouter extends Omit<Router, 'push' | 'replace'> {
|
|
21
|
+
/**
|
|
22
|
+
* Programmatically navigate to a new URL with type safety
|
|
23
|
+
*/
|
|
24
|
+
push: TypedNavigationMethod;
|
|
25
|
+
/**
|
|
26
|
+
* Programmatically replace the current location with type safety
|
|
27
|
+
*/
|
|
28
|
+
replace: TypedNavigationMethod;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Enhanced RouteLocationNormalized with typed params
|
|
32
|
+
*/
|
|
33
|
+
export interface TypedRoute<TName extends string = string, TParams extends Record<string, any> = Record<string, any>> extends Omit<RouteLocationNormalizedLoaded, 'params' | 'name'> {
|
|
34
|
+
name: TName;
|
|
35
|
+
params: TParams & VueRouteParams;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Creates a typed useRoute hook with the given route parameters type
|
|
39
|
+
*/
|
|
40
|
+
export declare function createTypedUseRoute<TName extends string, TParams extends Record<string, any>>(): () => TypedRoute<TName, TParams>;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a typed useRouter hook with route parameter type checking
|
|
43
|
+
*/
|
|
44
|
+
export declare function createTypedUseRouter(): () => TypedRouter;
|
|
45
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,MAAM,EACN,WAAW,IAAI,cAAc,EAC7B,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,kBAAkB,CACjC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAE7B,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IAClC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,KAAK,SAAS,MAAM,EACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEzD,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,KACzC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACnE;;OAEG;IACH,IAAI,EAAE,qBAAqB,CAAC;IAC5B;;OAEG;IACH,OAAO,EAAE,qBAAqB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CACzB,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACzD,SAAQ,IAAI,CAAC,6BAA6B,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9D,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,SAAS,MAAM,EACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,WAEP,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAIvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,UACL,WAAW,CAkBzC"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a typed useRoute hook with the given route parameters type
|
|
3
|
+
*/
|
|
4
|
+
export function createTypedUseRoute() {
|
|
5
|
+
return function useRoute() {
|
|
6
|
+
const { useRoute: vueUseRoute } = require('vue-router');
|
|
7
|
+
return vueUseRoute();
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a typed useRouter hook with route parameter type checking
|
|
12
|
+
*/
|
|
13
|
+
export function createTypedUseRouter() {
|
|
14
|
+
return function useRouter() {
|
|
15
|
+
const { useRouter: vueUseRouter } = require('vue-router');
|
|
16
|
+
const router = vueUseRouter();
|
|
17
|
+
const typedPush = (location) => {
|
|
18
|
+
return router.push(location);
|
|
19
|
+
};
|
|
20
|
+
const typedReplace = (location) => {
|
|
21
|
+
return router.replace(location);
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
...router,
|
|
25
|
+
push: typedPush,
|
|
26
|
+
replace: typedReplace,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAyDA;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAIjC,OAAO,SAAS,QAAQ;QACtB,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACxD,OAAO,WAAW,EAAgC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,SAAS,SAAS;QACvB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,MAAM,SAAS,GAA0B,CAAC,QAAQ,EAAE,EAAE;YACpD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAe,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,MAAM,YAAY,GAA0B,CAAC,QAAQ,EAAE,EAAE;YACvD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAe,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RouteConfigOverride } from './extract-meta.js';
|
|
1
2
|
export interface GenerateRoutesOptions {
|
|
2
3
|
pagesDir?: string;
|
|
3
4
|
outFile?: string;
|
|
@@ -7,12 +8,21 @@ export interface RouteEntry {
|
|
|
7
8
|
name: string;
|
|
8
9
|
importPath: string;
|
|
9
10
|
children: RouteEntry[];
|
|
11
|
+
params?: string[];
|
|
12
|
+
meta?: Record<string, any>;
|
|
13
|
+
configOverride?: RouteConfigOverride;
|
|
10
14
|
}
|
|
11
15
|
export interface RouteData {
|
|
12
16
|
routes: RouteEntry[];
|
|
13
17
|
routeNameList: readonly string[];
|
|
14
18
|
routePathList: readonly string[];
|
|
15
19
|
routePathByName: [string, string][];
|
|
20
|
+
routeParamsByName: [string, string[]][];
|
|
21
|
+
routeKeyData: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
path: string;
|
|
24
|
+
defaultName: string;
|
|
25
|
+
}>;
|
|
16
26
|
}
|
|
17
27
|
export declare function generateRoutes({ pagesDir, outFile, }?: GenerateRoutesOptions): boolean;
|
|
18
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAyDnG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACpC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACxC,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAgrBD,wBAAgB,cAAc,CAAC,EAC7B,QAAmD,EACnD,OAAgE,GACjE,GAAE,qBAA0B,GAAG,OAAO,CAiCtC"}
|