mates-fullstack 1.0.0-beta.1

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.
Files changed (202) hide show
  1. package/README.md +311 -0
  2. package/dist/arctic-auth.d.ts +101 -0
  3. package/dist/arctic-auth.d.ts.map +1 -0
  4. package/dist/arctic-auth.js +538 -0
  5. package/dist/arctic-auth.js.map +1 -0
  6. package/dist/asset-manifest.d.ts +14 -0
  7. package/dist/asset-manifest.d.ts.map +1 -0
  8. package/dist/asset-manifest.js +102 -0
  9. package/dist/asset-manifest.js.map +1 -0
  10. package/dist/browser.d.ts +18 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +25 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/build-esbuild.d.ts +29 -0
  15. package/dist/build-esbuild.d.ts.map +1 -0
  16. package/dist/build-esbuild.js +699 -0
  17. package/dist/build-esbuild.js.map +1 -0
  18. package/dist/build-prod.d.ts +126 -0
  19. package/dist/build-prod.d.ts.map +1 -0
  20. package/dist/build-prod.js +1014 -0
  21. package/dist/build-prod.js.map +1 -0
  22. package/dist/cli-new.d.ts +14 -0
  23. package/dist/cli-new.d.ts.map +1 -0
  24. package/dist/cli-new.js +637 -0
  25. package/dist/cli-new.js.map +1 -0
  26. package/dist/client.d.ts +43 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +130 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/cors.d.ts +16 -0
  31. package/dist/cors.d.ts.map +1 -0
  32. package/dist/cors.js +60 -0
  33. package/dist/cors.js.map +1 -0
  34. package/dist/ctx.d.ts +78 -0
  35. package/dist/ctx.d.ts.map +1 -0
  36. package/dist/ctx.js +280 -0
  37. package/dist/ctx.js.map +1 -0
  38. package/dist/dev-watcher.d.ts +23 -0
  39. package/dist/dev-watcher.d.ts.map +1 -0
  40. package/dist/dev-watcher.js +136 -0
  41. package/dist/dev-watcher.js.map +1 -0
  42. package/dist/docs-generator.d.ts +69 -0
  43. package/dist/docs-generator.d.ts.map +1 -0
  44. package/dist/docs-generator.js +557 -0
  45. package/dist/docs-generator.js.map +1 -0
  46. package/dist/docs-page.d.ts +20 -0
  47. package/dist/docs-page.d.ts.map +1 -0
  48. package/dist/docs-page.js +1152 -0
  49. package/dist/docs-page.js.map +1 -0
  50. package/dist/download.d.ts +78 -0
  51. package/dist/download.d.ts.map +1 -0
  52. package/dist/download.js +202 -0
  53. package/dist/download.js.map +1 -0
  54. package/dist/env-loader.d.ts +76 -0
  55. package/dist/env-loader.d.ts.map +1 -0
  56. package/dist/env-loader.js +213 -0
  57. package/dist/env-loader.js.map +1 -0
  58. package/dist/errors.d.ts +146 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +386 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/head.d.ts +31 -0
  63. package/dist/head.d.ts.map +1 -0
  64. package/dist/head.js +245 -0
  65. package/dist/head.js.map +1 -0
  66. package/dist/index.d.ts +30 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +30 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/internal-prefixes.d.ts +16 -0
  71. package/dist/internal-prefixes.d.ts.map +1 -0
  72. package/dist/internal-prefixes.js +16 -0
  73. package/dist/internal-prefixes.js.map +1 -0
  74. package/dist/internal.d.ts +25 -0
  75. package/dist/internal.d.ts.map +1 -0
  76. package/dist/internal.js +25 -0
  77. package/dist/internal.js.map +1 -0
  78. package/dist/jwt.d.ts +166 -0
  79. package/dist/jwt.d.ts.map +1 -0
  80. package/dist/jwt.js +261 -0
  81. package/dist/jwt.js.map +1 -0
  82. package/dist/log.d.ts +44 -0
  83. package/dist/log.d.ts.map +1 -0
  84. package/dist/log.js +66 -0
  85. package/dist/log.js.map +1 -0
  86. package/dist/logger.d.ts +76 -0
  87. package/dist/logger.d.ts.map +1 -0
  88. package/dist/logger.js +138 -0
  89. package/dist/logger.js.map +1 -0
  90. package/dist/main-runner.d.ts +59 -0
  91. package/dist/main-runner.d.ts.map +1 -0
  92. package/dist/main-runner.js +157 -0
  93. package/dist/main-runner.js.map +1 -0
  94. package/dist/mates-auth.d.ts +82 -0
  95. package/dist/mates-auth.d.ts.map +1 -0
  96. package/dist/mates-auth.js +323 -0
  97. package/dist/mates-auth.js.map +1 -0
  98. package/dist/middleware.d.ts +30 -0
  99. package/dist/middleware.d.ts.map +1 -0
  100. package/dist/middleware.js +67 -0
  101. package/dist/middleware.js.map +1 -0
  102. package/dist/project-resolver.d.ts +102 -0
  103. package/dist/project-resolver.d.ts.map +1 -0
  104. package/dist/project-resolver.js +271 -0
  105. package/dist/project-resolver.js.map +1 -0
  106. package/dist/rate-limit.d.ts +37 -0
  107. package/dist/rate-limit.d.ts.map +1 -0
  108. package/dist/rate-limit.js +109 -0
  109. package/dist/rate-limit.js.map +1 -0
  110. package/dist/redirect.d.ts +84 -0
  111. package/dist/redirect.d.ts.map +1 -0
  112. package/dist/redirect.js +105 -0
  113. package/dist/redirect.js.map +1 -0
  114. package/dist/renderer.d.ts +91 -0
  115. package/dist/renderer.d.ts.map +1 -0
  116. package/dist/renderer.js +630 -0
  117. package/dist/renderer.js.map +1 -0
  118. package/dist/request-logger.d.ts +12 -0
  119. package/dist/request-logger.d.ts.map +1 -0
  120. package/dist/request-logger.js +55 -0
  121. package/dist/request-logger.js.map +1 -0
  122. package/dist/rest.d.ts +25 -0
  123. package/dist/rest.d.ts.map +1 -0
  124. package/dist/rest.js +93 -0
  125. package/dist/rest.js.map +1 -0
  126. package/dist/router.d.ts +71 -0
  127. package/dist/router.d.ts.map +1 -0
  128. package/dist/router.js +222 -0
  129. package/dist/router.js.map +1 -0
  130. package/dist/rpc-registry.d.ts +84 -0
  131. package/dist/rpc-registry.d.ts.map +1 -0
  132. package/dist/rpc-registry.js +271 -0
  133. package/dist/rpc-registry.js.map +1 -0
  134. package/dist/rpc-runner.d.ts +82 -0
  135. package/dist/rpc-runner.d.ts.map +1 -0
  136. package/dist/rpc-runner.js +564 -0
  137. package/dist/rpc-runner.js.map +1 -0
  138. package/dist/sanitize.d.ts +61 -0
  139. package/dist/sanitize.d.ts.map +1 -0
  140. package/dist/sanitize.js +193 -0
  141. package/dist/sanitize.js.map +1 -0
  142. package/dist/security-headers.d.ts +114 -0
  143. package/dist/security-headers.d.ts.map +1 -0
  144. package/dist/security-headers.js +121 -0
  145. package/dist/security-headers.js.map +1 -0
  146. package/dist/server-fn.d.ts +323 -0
  147. package/dist/server-fn.d.ts.map +1 -0
  148. package/dist/server-fn.js +373 -0
  149. package/dist/server-fn.js.map +1 -0
  150. package/dist/server-public.d.ts +13 -0
  151. package/dist/server-public.d.ts.map +1 -0
  152. package/dist/server-public.js +12 -0
  153. package/dist/server-public.js.map +1 -0
  154. package/dist/server-timeout.d.ts +38 -0
  155. package/dist/server-timeout.d.ts.map +1 -0
  156. package/dist/server-timeout.js +46 -0
  157. package/dist/server-timeout.js.map +1 -0
  158. package/dist/server.d.ts +100 -0
  159. package/dist/server.d.ts.map +1 -0
  160. package/dist/server.js +1218 -0
  161. package/dist/server.js.map +1 -0
  162. package/dist/socket-router.d.ts +153 -0
  163. package/dist/socket-router.d.ts.map +1 -0
  164. package/dist/socket-router.js +612 -0
  165. package/dist/socket-router.js.map +1 -0
  166. package/dist/sso.d.ts +90 -0
  167. package/dist/sso.d.ts.map +1 -0
  168. package/dist/sso.js +261 -0
  169. package/dist/sso.js.map +1 -0
  170. package/dist/ssr-context.d.ts +49 -0
  171. package/dist/ssr-context.d.ts.map +1 -0
  172. package/dist/ssr-context.js +85 -0
  173. package/dist/ssr-context.js.map +1 -0
  174. package/dist/ssr-globals.d.ts +32 -0
  175. package/dist/ssr-globals.d.ts.map +1 -0
  176. package/dist/ssr-globals.js +1010 -0
  177. package/dist/ssr-globals.js.map +1 -0
  178. package/dist/ssr-template.d.ts +73 -0
  179. package/dist/ssr-template.d.ts.map +1 -0
  180. package/dist/ssr-template.js +507 -0
  181. package/dist/ssr-template.js.map +1 -0
  182. package/dist/stack-mapper.d.ts +25 -0
  183. package/dist/stack-mapper.d.ts.map +1 -0
  184. package/dist/stack-mapper.js +139 -0
  185. package/dist/stack-mapper.js.map +1 -0
  186. package/dist/stream.d.ts +89 -0
  187. package/dist/stream.d.ts.map +1 -0
  188. package/dist/stream.js +299 -0
  189. package/dist/stream.js.map +1 -0
  190. package/dist/upload.d.ts +69 -0
  191. package/dist/upload.d.ts.map +1 -0
  192. package/dist/upload.js +110 -0
  193. package/dist/upload.js.map +1 -0
  194. package/dist/validate.d.ts +58 -0
  195. package/dist/validate.d.ts.map +1 -0
  196. package/dist/validate.js +89 -0
  197. package/dist/validate.js.map +1 -0
  198. package/dist/verify-package.d.ts +3 -0
  199. package/dist/verify-package.d.ts.map +1 -0
  200. package/dist/verify-package.js +128 -0
  201. package/dist/verify-package.js.map +1 -0
  202. package/package.json +79 -0
@@ -0,0 +1,23 @@
1
+ export type DevWatchAction = {
2
+ /** Restart the child server process so server-side modules are re-imported. */
3
+ restart: boolean;
4
+ /** Bump reload generation / reload browser. */
5
+ reload: boolean;
6
+ /** Re-run style build before reload/restart. */
7
+ rebuildStyles: boolean;
8
+ /** Human-readable reason for logs. */
9
+ reason: string;
10
+ };
11
+ export type DevWatchEvent = DevWatchAction & {
12
+ event: "add" | "change" | "unlink" | "addDir" | "unlinkDir";
13
+ path: string;
14
+ };
15
+ export interface DevWatcherOptions {
16
+ onChange: (event: DevWatchEvent) => void | Promise<void>;
17
+ onError?: (error: Error) => void;
18
+ }
19
+ export declare function createDevWatcher(projectRoot: string, options: DevWatcherOptions): () => void;
20
+ export declare function getDevWatchPaths(projectRoot: string): string[];
21
+ export declare function shouldIgnoreWatchPath(projectRoot: string, filePath: string): boolean;
22
+ export declare function classifyDevChange(projectRoot: string, filePath: string): DevWatchAction | null;
23
+ //# sourceMappingURL=dev-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-watcher.d.ts","sourceRoot":"","sources":["../src/dev-watcher.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG;IAC3B,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG;IAC3C,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAQD,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,MAAM,IAAI,CAsCZ;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9D;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAaT;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,cAAc,GAAG,IAAI,CAiEvB"}
@@ -0,0 +1,136 @@
1
+ import path from "node:path";
2
+ import chokidar from "chokidar";
3
+ const SOURCE_EXT_RE = /\.(ts|tsx|js|jsx|mjs|cjs|json)$/i;
4
+ const STYLE_EXT_RE = /\.css$/i;
5
+ const CONFIG_RE = /(^|\/)(package\.json|tsconfig(?:\.[^/]*)?\.json|mates\.config\.(?:ts|js|mjs|cjs)|vite\.config\.(?:ts|js|mjs|cjs)|postcss\.config\.(?:js|mjs|cjs)|tailwind\.config\.(?:js|mjs|cjs|ts))$/i;
6
+ const ENV_RE = /(^|\/)\.env(?:\..*)?$/i;
7
+ export function createDevWatcher(projectRoot, options) {
8
+ const watcher = chokidar.watch(getDevWatchPaths(projectRoot), {
9
+ cwd: projectRoot,
10
+ ignoreInitial: true,
11
+ atomic: true,
12
+ awaitWriteFinish: {
13
+ stabilityThreshold: 100,
14
+ pollInterval: 25,
15
+ },
16
+ ignored: (filePath) => shouldIgnoreWatchPath(projectRoot, filePath),
17
+ });
18
+ const handler = (event, changedPath) => {
19
+ const action = classifyDevChange(projectRoot, changedPath);
20
+ if (!action)
21
+ return;
22
+ void options.onChange({
23
+ ...action,
24
+ event,
25
+ path: normalizeRel(changedPath),
26
+ });
27
+ };
28
+ // chokidar v4 FSWatcher extends EventEmitter with a generic event map
29
+ // that @types/node v20 EventEmitter doesn't fully satisfy for `.on()`.
30
+ // Cast avoids TS2576 without suppressing other type checks.
31
+ const ev = watcher;
32
+ ev.on("add", (filePath) => handler("add", filePath))
33
+ .on("change", (filePath) => handler("change", filePath))
34
+ .on("unlink", (filePath) => handler("unlink", filePath))
35
+ .on("addDir", (filePath) => handler("addDir", filePath))
36
+ .on("unlinkDir", (filePath) => handler("unlinkDir", filePath))
37
+ .on("error", (err) => options.onError?.(err));
38
+ return () => {
39
+ void closeWatcher(watcher);
40
+ };
41
+ }
42
+ export function getDevWatchPaths(projectRoot) {
43
+ return [
44
+ path.join(projectRoot, "client"),
45
+ path.join(projectRoot, "server"),
46
+ path.join(projectRoot, "shared"),
47
+ path.join(projectRoot, "public"),
48
+ path.join(projectRoot, ".env"),
49
+ path.join(projectRoot, ".env.*"),
50
+ path.join(projectRoot, "package.json"),
51
+ path.join(projectRoot, "tsconfig*.json"),
52
+ path.join(projectRoot, "mates.config.*"),
53
+ path.join(projectRoot, "vite.config.*"),
54
+ path.join(projectRoot, "postcss.config.*"),
55
+ path.join(projectRoot, "tailwind.config.*"),
56
+ ];
57
+ }
58
+ export function shouldIgnoreWatchPath(projectRoot, filePath) {
59
+ const rel = normalizeRel(path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath);
60
+ return rel
61
+ .split("/")
62
+ .some((part) => part === "node_modules" ||
63
+ part === "dist" ||
64
+ part === ".mates-dev" ||
65
+ part === "coverage");
66
+ }
67
+ export function classifyDevChange(projectRoot, filePath) {
68
+ const rel = normalizeRel(path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath);
69
+ if (!rel || shouldIgnoreWatchPath(projectRoot, rel))
70
+ return null;
71
+ if (ENV_RE.test(rel) || CONFIG_RE.test(rel)) {
72
+ return {
73
+ restart: true,
74
+ reload: true,
75
+ rebuildStyles: isStyleConfig(rel),
76
+ reason: `${rel} changed`,
77
+ };
78
+ }
79
+ if (rel.startsWith("client/")) {
80
+ return {
81
+ restart: false,
82
+ reload: true,
83
+ rebuildStyles: STYLE_EXT_RE.test(rel),
84
+ reason: `${rel} changed`,
85
+ };
86
+ }
87
+ if (rel.startsWith("server/api/") && SOURCE_EXT_RE.test(rel)) {
88
+ return {
89
+ restart: true,
90
+ reload: true,
91
+ rebuildStyles: false,
92
+ reason: `${rel} changed (RPC stubs)`,
93
+ };
94
+ }
95
+ if (rel.startsWith("server/") && SOURCE_EXT_RE.test(rel)) {
96
+ return {
97
+ restart: true,
98
+ reload: true,
99
+ rebuildStyles: false,
100
+ reason: `${rel} changed`,
101
+ };
102
+ }
103
+ if (rel.startsWith("shared/") &&
104
+ (SOURCE_EXT_RE.test(rel) || STYLE_EXT_RE.test(rel))) {
105
+ return {
106
+ restart: true,
107
+ reload: true,
108
+ rebuildStyles: STYLE_EXT_RE.test(rel),
109
+ reason: `${rel} changed`,
110
+ };
111
+ }
112
+ if (rel.startsWith("public/")) {
113
+ return {
114
+ restart: false,
115
+ reload: true,
116
+ rebuildStyles: false,
117
+ reason: `${rel} changed`,
118
+ };
119
+ }
120
+ return null;
121
+ }
122
+ async function closeWatcher(watcher) {
123
+ try {
124
+ await watcher.close();
125
+ }
126
+ catch {
127
+ /* ignore */
128
+ }
129
+ }
130
+ function isStyleConfig(rel) {
131
+ return /(^|\/)(postcss\.config\.|tailwind\.config\.)/i.test(rel);
132
+ }
133
+ function normalizeRel(filePath) {
134
+ return filePath.split(path.sep).join("/").replace(/^\.\//, "");
135
+ }
136
+ //# sourceMappingURL=dev-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-watcher.js","sourceRoot":"","sources":["../src/dev-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * mates-fullstack — docs-generator.ts
3
+ *
4
+ * Generates interactive API documentation for all RPC functions in server/api/
5
+ * by statically analysing TypeScript source files with ts-morph.
6
+ *
7
+ * ts-morph is an optional peer dependency. If it is not installed this module
8
+ * returns [] gracefully — the server never crashes.
9
+ *
10
+ * Usage:
11
+ * import { generateDocs } from "./docs-generator.js";
12
+ * const docs = await generateDocs("/abs/path/to/server/api", "/abs/path/to/shared/types");
13
+ */
14
+ export interface FieldDoc {
15
+ /** Property name */
16
+ name: string;
17
+ /** Human-readable type string, e.g. "string", "number", "User[]" */
18
+ type: string;
19
+ /** true if not optional (no ?) */
20
+ required: boolean;
21
+ /** From @param JSDoc tag, if present */
22
+ description?: string;
23
+ }
24
+ export type TypeConfidence = "explicit" | "inferred" | "unknown";
25
+ export interface TypeShape {
26
+ kind: "object" | "array" | "primitive" | "union" | "unknown";
27
+ /** E.g. "User", "string", "number[]" */
28
+ typeName: string;
29
+ /** Whether this came from an annotation, inference, or could not be known. */
30
+ confidence: TypeConfidence;
31
+ /** Object fields. For arrays, fields describe the array item when known. */
32
+ fields?: FieldDoc[];
33
+ /** Only for kind="array" — the element type name */
34
+ itemType?: string;
35
+ }
36
+ export interface RouteDoc {
37
+ /** /api/users/getUsers */
38
+ url: string;
39
+ /** getUsers */
40
+ fnName: string;
41
+ /** Absolute path to the source file */
42
+ filePath: string;
43
+ /** Relative to apiDir, e.g. "users.ts" */
44
+ fileRelPath: string;
45
+ /** From JSDoc /** ... *‌/ */
46
+ description: string;
47
+ /** True for .ts/.tsx source files where TypeScript type extraction applies. */
48
+ typed: boolean;
49
+ /** First non-ctx argument name. */
50
+ firstArgName: string | null;
51
+ /** First non-ctx argument type. Null means there is no argument. */
52
+ payload: TypeShape | null;
53
+ /** Return type unwrapped from Promise<T> (null for void/undefined) */
54
+ response: TypeShape | null;
55
+ /** Human-readable function signature. */
56
+ signature: string;
57
+ /** @tags from JSDoc, if present */
58
+ tags: string[];
59
+ }
60
+ export declare function clearDocsCache(): void;
61
+ export declare function isTsMorphAvailable(projectRoot?: string | null): Promise<boolean>;
62
+ /**
63
+ * Parse server/api/ with ts-morph and return a RouteDoc for every registered
64
+ * RPC function. Results are cached for 5 seconds (TTL covers dev hot-reload).
65
+ *
66
+ * Returns [] immediately if ts-morph is not installed.
67
+ */
68
+ export declare function generateDocs(apiDir: string, sharedTypesDir: string | null, projectRoot?: string | null): Promise<RouteDoc[]>;
69
+ //# sourceMappingURL=docs-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-generator.d.ts","sourceRoot":"","sources":["../src/docs-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC7D,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,cAAc,CAAC;IAC3B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,KAAK,EAAE,OAAO,CAAC;IACf,mCAAmC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oEAAoE;IACpE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAwBD,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAMD,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAElB;AAmCD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAqFrB"}