eddev 2.3.30 → 2.4.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 (113) hide show
  1. package/dist/app/entry/ssr-root-client.d.ts +0 -2
  2. package/dist/app/entry/ssr-root-client.d.ts.map +1 -1
  3. package/dist/app/lib/blocks/block-debugger.d.ts.map +1 -1
  4. package/dist/app/lib/blocks/block-debugger.js +19 -2
  5. package/dist/app/lib/devtools/components/panels/StructurePanel.js +1 -1
  6. package/dist/app/lib/routing/components/BrowserRouter.d.ts.map +1 -1
  7. package/dist/app/lib/routing/components/BrowserRouter.js +10 -7
  8. package/dist/app/server/assets.d.ts +45 -0
  9. package/dist/app/server/assets.d.ts.map +1 -0
  10. package/dist/app/server/assets.js +15 -0
  11. package/dist/app/server/index.d.ts +4 -0
  12. package/dist/app/server/index.d.ts.map +1 -1
  13. package/dist/app/server/index.js +3 -0
  14. package/dist/app/server/proxy-wp-admin.d.ts +6 -2
  15. package/dist/app/server/proxy-wp-admin.d.ts.map +1 -1
  16. package/dist/app/server/proxy-wp-admin.js +29 -57
  17. package/dist/app/server/render-ssr-page.d.ts +2 -6
  18. package/dist/app/server/render-ssr-page.d.ts.map +1 -1
  19. package/dist/app/server/render-ssr-page.js +9 -8
  20. package/dist/app/server/rpc-handler.d.ts +14 -0
  21. package/dist/app/server/rpc-handler.d.ts.map +1 -0
  22. package/dist/app/server/rpc-handler.js +63 -0
  23. package/dist/app/server/server-app.d.ts +22 -0
  24. package/dist/app/server/server-app.d.ts.map +1 -0
  25. package/dist/app/server/server-app.js +186 -0
  26. package/dist/app/server/server-context.d.ts +5 -5
  27. package/dist/app/server/server-context.d.ts.map +1 -1
  28. package/dist/app/server/server-context.js +9 -8
  29. package/dist/app/server/utils/fetch-origin.d.ts +13 -0
  30. package/dist/app/server/utils/fetch-origin.d.ts.map +1 -0
  31. package/dist/app/server/utils/fetch-origin.js +21 -0
  32. package/dist/app/server/utils/request.d.ts +20 -0
  33. package/dist/app/server/utils/request.d.ts.map +1 -0
  34. package/dist/app/server/utils/request.js +60 -0
  35. package/dist/node/cli/cli-worker.d.ts +10 -6
  36. package/dist/node/cli/cli-worker.d.ts.map +1 -1
  37. package/dist/node/cli/cli-worker.js +7 -14
  38. package/dist/node/cli/cli.js +37 -43
  39. package/dist/node/cli/display/CLIApp.d.ts +2 -4
  40. package/dist/node/cli/display/CLIApp.d.ts.map +1 -1
  41. package/dist/node/cli/display/CLIApp.js +2 -3
  42. package/dist/node/cli/version.d.ts +1 -1
  43. package/dist/node/cli/version.d.ts.map +1 -1
  44. package/dist/node/cli/version.js +1 -1
  45. package/dist/node/compiler/app-codegen.d.ts +18 -0
  46. package/dist/node/compiler/app-codegen.d.ts.map +1 -0
  47. package/dist/node/compiler/app-codegen.js +473 -0
  48. package/dist/node/compiler/build-serverless.d.ts +16 -0
  49. package/dist/node/compiler/build-serverless.d.ts.map +1 -0
  50. package/dist/node/compiler/build-serverless.js +40 -0
  51. package/dist/node/compiler/bundler.spa.d.ts +33 -0
  52. package/dist/node/compiler/bundler.spa.d.ts.map +1 -0
  53. package/dist/node/compiler/bundler.spa.js +59 -0
  54. package/dist/node/compiler/dev-css-links.d.ts +25 -0
  55. package/dist/node/compiler/dev-css-links.d.ts.map +1 -0
  56. package/dist/node/compiler/dev-css-links.js +87 -0
  57. package/dist/node/compiler/dev-server.d.ts +2 -0
  58. package/dist/node/compiler/dev-server.d.ts.map +1 -1
  59. package/dist/node/compiler/dev-server.js +46 -61
  60. package/dist/node/compiler/get-vite-config.d.ts +37 -6
  61. package/dist/node/compiler/get-vite-config.d.ts.map +1 -1
  62. package/dist/node/compiler/get-vite-config.js +113 -121
  63. package/dist/node/compiler/serverless-app.d.ts +35 -0
  64. package/dist/node/compiler/serverless-app.d.ts.map +1 -0
  65. package/dist/node/compiler/serverless-app.js +332 -0
  66. package/dist/node/compiler/transforms/block-meta.d.ts +10 -0
  67. package/dist/node/compiler/transforms/block-meta.d.ts.map +1 -0
  68. package/dist/node/compiler/transforms/block-meta.js +27 -0
  69. package/dist/node/compiler/transforms/component-names.d.ts +19 -0
  70. package/dist/node/compiler/transforms/component-names.d.ts.map +1 -0
  71. package/dist/node/compiler/transforms/component-names.js +45 -0
  72. package/dist/node/compiler/transforms/index.d.ts +36 -0
  73. package/dist/node/compiler/transforms/index.d.ts.map +1 -0
  74. package/dist/node/compiler/transforms/index.js +80 -0
  75. package/dist/node/compiler/transforms/types.d.ts +48 -0
  76. package/dist/node/compiler/transforms/types.d.ts.map +1 -0
  77. package/dist/node/compiler/transforms/types.js +1 -0
  78. package/dist/node/project/config.d.ts +1 -1
  79. package/dist/node/project/config.d.ts.map +1 -1
  80. package/dist/node/project/config.js +1 -1
  81. package/dist/node/project/env.js +1 -1
  82. package/dist/node/project/project-log.d.ts +7 -0
  83. package/dist/node/project/project-log.d.ts.map +1 -0
  84. package/dist/node/project/project-log.js +6 -0
  85. package/dist/node/project/project.d.ts +2 -2
  86. package/dist/node/project/project.d.ts.map +1 -1
  87. package/dist/node/project/project.js +3 -3
  88. package/dist/node/utils/fs.d.ts +70 -69
  89. package/dist/node/utils/fs.d.ts.map +1 -1
  90. package/dist/node/utils/http-to-https-redirect.d.ts +10 -0
  91. package/dist/node/utils/http-to-https-redirect.d.ts.map +1 -0
  92. package/dist/node/utils/http-to-https-redirect.js +49 -0
  93. package/dist/node/utils/self-signed-cert.d.ts.map +1 -1
  94. package/dist/node/utils/self-signed-cert.js +13 -0
  95. package/package.json +12 -13
  96. package/skills/eddev/docs/devtool/cli.mdx +10 -8
  97. package/tsconfig.node.json +17 -5
  98. package/types.env.d.ts +1 -1
  99. package/dist/node/compiler/build-vinxi.d.ts +0 -9
  100. package/dist/node/compiler/build-vinxi.d.ts.map +0 -1
  101. package/dist/node/compiler/build-vinxi.js +0 -39
  102. package/dist/node/compiler/bundler.admin.d.ts +0 -14
  103. package/dist/node/compiler/bundler.admin.d.ts.map +0 -1
  104. package/dist/node/compiler/bundler.admin.js +0 -37
  105. package/dist/node/compiler/bundler.frontend.d.ts +0 -15
  106. package/dist/node/compiler/bundler.frontend.d.ts.map +0 -1
  107. package/dist/node/compiler/bundler.frontend.js +0 -51
  108. package/dist/node/compiler/vinxi-app.d.ts +0 -23
  109. package/dist/node/compiler/vinxi-app.d.ts.map +0 -1
  110. package/dist/node/compiler/vinxi-app.js +0 -261
  111. package/dist/node/compiler/vinxi-codegen.d.ts +0 -13
  112. package/dist/node/compiler/vinxi-codegen.d.ts.map +0 -1
  113. package/dist/node/compiler/vinxi-codegen.js +0 -764
@@ -1,37 +0,0 @@
1
- import { relative } from "path";
2
- import { build, defineConfig, mergeConfig } from "vite";
3
- import { createConsole } from "../utils/stateful-log.js";
4
- import { getViteConfig } from "./get-vite-config.js";
5
- const console = createConsole("Admin Bundle", "admin");
6
- export const adminLog = console;
7
- export class AdminBundler {
8
- project;
9
- opts;
10
- constructor(project, opts) {
11
- this.project = project;
12
- this.opts = opts;
13
- }
14
- async start() {
15
- console.info(`Creating ${this.opts.mode} WordPress admin build...`);
16
- const baseConfig = getViteConfig({
17
- console,
18
- mode: this.opts.mode,
19
- publicUrl: this.project.publicUrl,
20
- rootDir: this.project.rootDir,
21
- outDir: relative(this.project.rootDir, "./dist/cms/"),
22
- serverless: false,
23
- target: "cms",
24
- client: true,
25
- });
26
- console.verbose("Vite config:", baseConfig);
27
- await build(mergeConfig(baseConfig, defineConfig({
28
- build: {
29
- watch: this.opts.watch
30
- ? {
31
- buildDelay: 200,
32
- }
33
- : undefined,
34
- },
35
- })));
36
- }
37
- }
@@ -1,15 +0,0 @@
1
- import { Project } from "../project/project.js";
2
- export declare const frontendLog: import("../utils/stateful-log.js").StatefulLog<unknown>;
3
- type Options = {
4
- mode: "development" | "production";
5
- watch?: boolean;
6
- bundleAnalysis?: boolean;
7
- };
8
- export declare class FrontendBundler {
9
- project: Project;
10
- opts: Options;
11
- constructor(project: Project, opts: Options);
12
- start(): Promise<void>;
13
- }
14
- export {};
15
- //# sourceMappingURL=bundler.frontend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundler.frontend.d.ts","sourceRoot":"","sources":["../../../src/node/compiler/bundler.frontend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAQ/C,eAAO,MAAM,WAAW,yDAAU,CAAA;AAElC,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,qBAAa,eAAe;IAEjB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;gBADb,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO;IAGhB,KAAK;CAwCZ"}
@@ -1,51 +0,0 @@
1
- import { relative } from "path";
2
- import { build, defineConfig, mergeConfig } from "vite";
3
- import { createConsole } from "../utils/stateful-log.js";
4
- import { getViteConfig } from "./get-vite-config.js";
5
- import rollupVisualizer from "rollup-plugin-visualizer";
6
- const console = createConsole("Frontend Bundler", "spa");
7
- export const frontendLog = console;
8
- export class FrontendBundler {
9
- project;
10
- opts;
11
- constructor(project, opts) {
12
- this.project = project;
13
- this.opts = opts;
14
- }
15
- async start() {
16
- console.info(`Creating ${this.opts.mode} SPA build...`);
17
- const config = {
18
- build: {
19
- watch: this.opts.watch
20
- ? {
21
- buildDelay: 200,
22
- }
23
- : undefined,
24
- },
25
- };
26
- let outDir = relative(this.project.rootDir, "./dist/frontend/");
27
- if (this.opts.bundleAnalysis) {
28
- outDir = relative(this.project.rootDir, "./dist/frontend-analysis/");
29
- // @ts-ignore
30
- const visualizer = rollupVisualizer.default;
31
- config.plugins = [
32
- visualizer({
33
- emitFile: true,
34
- filename: "stats.html",
35
- template: "sunburst",
36
- }),
37
- ];
38
- }
39
- const baseConfig = getViteConfig({
40
- console,
41
- mode: this.opts.mode,
42
- publicUrl: this.project.publicUrl,
43
- rootDir: this.project.rootDir,
44
- outDir: outDir,
45
- serverless: false,
46
- target: "frontend",
47
- client: true,
48
- });
49
- await build(mergeConfig(baseConfig, defineConfig(config)));
50
- }
51
- }
@@ -1,23 +0,0 @@
1
- import { EDConfig } from "../project/config.js";
2
- import { StatefulLog } from "../utils/stateful-log.js";
3
- export type AppArgs = {
4
- mode: "development" | "production";
5
- publicUrl: string;
6
- rootDir: string;
7
- origin: string;
8
- log?: StatefulLog<any>;
9
- preset?: string;
10
- routes?: CustomRoute[];
11
- rpcBases?: string[];
12
- config: EDConfig;
13
- };
14
- type HTTPMethod = "GET" | "POST" | "PUT" | "OPTIONS" | "HEAD";
15
- type CustomRouteFunction = (req: Request) => Response;
16
- type CustomRouteModule = Record<HTTPMethod, CustomRouteFunction>;
17
- type CustomRoute = {
18
- pattern: string;
19
- handler: () => Promise<CustomRouteModule>;
20
- };
21
- export declare function createVinxiApp(args: AppArgs): any;
22
- export {};
23
- //# sourceMappingURL=vinxi-app.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vinxi-app.d.ts","sourceRoot":"","sources":["../../../src/node/compiler/vinxi-app.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAKtD,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,EAAE,QAAQ,CAAA;CACjB,CAAA;AAED,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAA;AAC7D,KAAK,mBAAmB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAA;AACrD,KAAK,iBAAiB,GAAG,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;AAEhE,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,OAiQ3C"}
@@ -1,261 +0,0 @@
1
- import { joinURL } from "ufo";
2
- // @ts-ignore
3
- import { createApp } from "vinxi";
4
- import tsconfigPaths from "vite-tsconfig-paths";
5
- import { StatefulLog } from "../utils/stateful-log.js";
6
- import { getCacheConfig } from "./cache-config.js";
7
- import { corePlugins, envPlugin } from "./get-vite-config.js";
8
- import { getVinxiFolder } from "./vinxi-codegen.js";
9
- export function createVinxiApp(args) {
10
- const log = args.log ?? new StatefulLog({ label: "Build" });
11
- const folder = "./.eddev/" +
12
- getVinxiFolder({
13
- mode: args.mode,
14
- serverless: true,
15
- });
16
- const cacheConfig = getCacheConfig(args.origin, args.config);
17
- const serverlessDataRoute = (expiration) => cacheConfig.serverless.isr
18
- ? {
19
- isr: {
20
- expiration,
21
- allowQuery: [],
22
- passQuery: false,
23
- },
24
- headers: {
25
- "Vercel-Cache-Tag": "data",
26
- },
27
- cache: {
28
- varies: ["Authorization", "woocommerce-session"],
29
- },
30
- }
31
- : {
32
- isr: false,
33
- cache: false,
34
- };
35
- const serverlessPageRoute = (expiration) => cacheConfig.serverless.isr
36
- ? {
37
- isr: {
38
- expiration,
39
- allowQuery: [],
40
- passQuery: false,
41
- },
42
- headers: {
43
- "Vercel-Cache-Tag": "data",
44
- },
45
- cache: {
46
- maxAge: expiration,
47
- // swr: true,
48
- staleMaxAge: 3600,
49
- },
50
- }
51
- : {
52
- isr: false,
53
- cache: false,
54
- };
55
- return createApp({
56
- server: {
57
- // experimental: {
58
- // websocket: true,
59
- // },
60
- compatibilityDate: "2025-05-21",
61
- preset: args.preset,
62
- routeRules: {
63
- "/wp-content/uploads/**": {
64
- proxy: joinURL(args.origin, "wp-content/uploads/**"),
65
- static: true,
66
- headers: {
67
- "Cache-Control": "max-age=86400",
68
- "CDN-Cache-Control": "max-age=86400",
69
- "Vercel-CDN-Cache-Control": "max-age=86400",
70
- },
71
- cache: {
72
- maxAge: 86400,
73
- varies: [],
74
- },
75
- },
76
- // "/favicon.ico": {
77
- // proxy: joinURL(args.origin, "favicon.ico"),
78
- // isr: {
79
- // expiration: 86400,
80
- // allowQuery: [],
81
- // passQuery: false,
82
- // },
83
- // },
84
- // "/robots.txt": {
85
- // isr: {
86
- // expiration: 86400,
87
- // allowQuery: [],
88
- // passQuery: false,
89
- // },
90
- // },
91
- // "/sitemap.xml": {
92
- // cache: {
93
- // maxAge: 3600,
94
- // },
95
- // },
96
- // "/sitemap*.xml": {
97
- // cache: {
98
- // maxAge: 3600,
99
- // },
100
- // },
101
- "/wp-content/plugins/**": {
102
- proxy: joinURL(args.origin, "wp-content/plugins/**"),
103
- headers: {
104
- "Cache-Control": "max-age=86400",
105
- "CDN-Cache-Control": "max-age=86400",
106
- "Vercel-CDN-Cache-Control": "max-age=86400",
107
- },
108
- },
109
- "/wp-content/**": { proxy: joinURL(args.origin, "wp-content/**") },
110
- "/wp-includes/**": { proxy: joinURL(args.origin, "wp-includes/**") },
111
- "/_data/route/**": serverlessDataRoute(cacheConfig.pageDataTTL ?? 0),
112
- "/_data/query/**": serverlessDataRoute(cacheConfig.queryHooksTTL ?? 0),
113
- "/_data/mutation/**": {
114
- isr: false,
115
- cache: false,
116
- },
117
- "/_data/submit-gf": {
118
- isr: false,
119
- cache: false,
120
- },
121
- ...args.rpcBases?.reduce((acc, base) => {
122
- return {
123
- ...acc,
124
- ["/" + base.replace(/(^\/|\/$)/g, "") + "/**/*"]: {
125
- isr: false,
126
- // swr: false,
127
- },
128
- };
129
- }, {}),
130
- "/": serverlessPageRoute(cacheConfig.pageDataTTL ?? 0),
131
- "/**/*": serverlessPageRoute(cacheConfig.pageDataTTL ?? 0),
132
- },
133
- vercel: {
134
- config: {
135
- bypassToken: process.env.VERCEL_BYPASS_TOKEN,
136
- },
137
- },
138
- },
139
- routers: [
140
- ...args.config.serverless.themeAssets.map((folder) => {
141
- const folderName = folder
142
- .split("/")
143
- .filter((p) => !p.includes("*") && p !== ".")
144
- .join("/");
145
- return {
146
- name: "public_" + folderName,
147
- type: "static",
148
- dir: args.rootDir + "/" + folderName,
149
- base: joinURL(args.publicUrl, folderName),
150
- };
151
- }),
152
- {
153
- name: "bypass-api",
154
- type: "http",
155
- base: "/_bypass",
156
- handler: `${folder}/handler.bypass.ts`,
157
- target: "server",
158
- plugins: () => [
159
- tsconfigPaths(),
160
- envPlugin({
161
- rootDir: args.rootDir,
162
- console: log,
163
- mode: args.mode,
164
- publicUrl: args.publicUrl,
165
- serverless: true,
166
- target: "frontend",
167
- client: false,
168
- }),
169
- ],
170
- },
171
- // {
172
- // name: "wp-proxy",
173
- // type: "http",
174
- // base: "/wp-",
175
- // handler: `${folder}/handler.wp-proxy.ts`,
176
- // target: "server",
177
- // plugins: () => [
178
- // ...corePlugins({
179
- // rootDir: args.rootDir,
180
- // console: log,
181
- // mode: args.mode,
182
- // publicUrl: args.publicUrl,
183
- // serverless: true,
184
- // target: "frontend",
185
- // }),
186
- // ],
187
- // },
188
- {
189
- name: "client",
190
- type: "client",
191
- handler: `${folder}/entry.client.tsx`,
192
- target: "browser",
193
- plugins: () => [
194
- ...corePlugins({
195
- rootDir: args.rootDir,
196
- console: log,
197
- mode: args.mode,
198
- publicUrl: args.publicUrl,
199
- serverless: true,
200
- target: "frontend",
201
- client: true,
202
- }),
203
- ],
204
- base: "/_build",
205
- },
206
- {
207
- name: "admin",
208
- type: "client",
209
- handler: `${folder}/entry.admin.tsx`,
210
- target: "browser",
211
- plugins: () => [
212
- ...corePlugins({
213
- rootDir: args.rootDir,
214
- console: log,
215
- mode: args.mode,
216
- publicUrl: args.publicUrl,
217
- serverless: true,
218
- target: "cms",
219
- client: true,
220
- }),
221
- ],
222
- base: "/_admin",
223
- },
224
- // ...((args.rpcBases ?? []).map((base) => ({
225
- // name: "trpc" + base.replace(/^\//, "-"),
226
- // type: "http",
227
- // base: "/" + base.replace(/^\//, ""),
228
- // handler: `${folder}/handler.trpc-api.ts`,
229
- // target: "server",
230
- // plugins: () => [
231
- // tsconfigPaths(),
232
- // envPlugin({
233
- // rootDir: args.rootDir,
234
- // console: log,
235
- // mode: args.mode,
236
- // publicUrl: args.publicUrl,
237
- // serverless: true,
238
- // target: "frontend",
239
- // }),
240
- // ],
241
- // })) as RouterSchemaInput[]),
242
- {
243
- name: "ssr",
244
- type: "http",
245
- handler: `${folder}/handler.ssr-page.ts`,
246
- target: "server",
247
- plugins: () => [
248
- ...corePlugins({
249
- rootDir: args.rootDir,
250
- console: log,
251
- mode: args.mode,
252
- publicUrl: args.publicUrl,
253
- serverless: true,
254
- target: "frontend",
255
- client: false,
256
- }),
257
- ],
258
- },
259
- ],
260
- });
261
- }
@@ -1,13 +0,0 @@
1
- import { Project } from "../project/project.js";
2
- import { FSCodegen } from "../utils/fs-codegen.js";
3
- type Options = {
4
- mode: "development" | "production";
5
- serverless: boolean;
6
- project: Project;
7
- endpoint?: string;
8
- };
9
- export declare function getVinxiFolder(opts: Pick<Options, "mode" | "serverless">): string;
10
- export declare function runVinxiCodegen(opts: Options): Promise<void>;
11
- export declare function createVinxiCodegen(opts: Options): FSCodegen;
12
- export {};
13
- //# sourceMappingURL=vinxi-codegen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vinxi-codegen.d.ts","sourceRoot":"","sources":["../../../src/node/compiler/vinxi-codegen.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,aAAa,GAAG,YAAY,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,UAExE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,OAAO,iBAIlD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,aAmwB/C"}