@threadlabs/markupkit 0.0.0-stage → 0.2.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.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -2
  3. package/components/breadcrumbs.html +9 -0
  4. package/components/nav.html +51 -0
  5. package/components/pager.html +13 -0
  6. package/dist/application.d.ts +31 -0
  7. package/dist/application.d.ts.map +1 -0
  8. package/dist/application.js +488 -0
  9. package/dist/application.js.map +1 -0
  10. package/dist/browser.d.ts +13 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +151 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/build.d.ts +5 -0
  15. package/dist/build.d.ts.map +1 -0
  16. package/dist/build.js +351 -0
  17. package/dist/build.js.map +1 -0
  18. package/dist/bundle-worker.d.ts +2 -0
  19. package/dist/bundle-worker.d.ts.map +1 -0
  20. package/dist/bundle-worker.js +48 -0
  21. package/dist/bundle-worker.js.map +1 -0
  22. package/dist/bundle.d.ts +23 -0
  23. package/dist/bundle.d.ts.map +1 -0
  24. package/dist/bundle.js +34 -0
  25. package/dist/bundle.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +68 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/client.d.ts +40 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +447 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/component-module.d.ts +20 -0
  35. package/dist/component-module.d.ts.map +1 -0
  36. package/dist/component-module.js +82 -0
  37. package/dist/component-module.js.map +1 -0
  38. package/dist/config.d.ts +36 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +111 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/csp.d.ts +23 -0
  43. package/dist/csp.d.ts.map +1 -0
  44. package/dist/csp.js +91 -0
  45. package/dist/csp.js.map +1 -0
  46. package/dist/description.d.ts +45 -0
  47. package/dist/description.d.ts.map +1 -0
  48. package/dist/description.js +28 -0
  49. package/dist/description.js.map +1 -0
  50. package/dist/document.d.ts +48 -0
  51. package/dist/document.d.ts.map +1 -0
  52. package/dist/document.js +65 -0
  53. package/dist/document.js.map +1 -0
  54. package/dist/index.d.ts +13 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +9 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/links.d.ts +8 -0
  59. package/dist/links.d.ts.map +1 -0
  60. package/dist/links.js +90 -0
  61. package/dist/links.js.map +1 -0
  62. package/dist/private-api.d.ts +12 -0
  63. package/dist/private-api.d.ts.map +1 -0
  64. package/dist/private-api.js +158 -0
  65. package/dist/private-api.js.map +1 -0
  66. package/dist/private-client.d.ts +11 -0
  67. package/dist/private-client.d.ts.map +1 -0
  68. package/dist/private-client.js +18 -0
  69. package/dist/private-client.js.map +1 -0
  70. package/dist/private-readers.d.ts +26 -0
  71. package/dist/private-readers.d.ts.map +1 -0
  72. package/dist/private-readers.js +107 -0
  73. package/dist/private-readers.js.map +1 -0
  74. package/dist/provider-preparation.d.ts +20 -0
  75. package/dist/provider-preparation.d.ts.map +1 -0
  76. package/dist/provider-preparation.js +82 -0
  77. package/dist/provider-preparation.js.map +1 -0
  78. package/dist/providers.d.ts +14 -0
  79. package/dist/providers.d.ts.map +1 -0
  80. package/dist/providers.js +127 -0
  81. package/dist/providers.js.map +1 -0
  82. package/dist/read-channel.d.ts +30 -0
  83. package/dist/read-channel.d.ts.map +1 -0
  84. package/dist/read-channel.js +65 -0
  85. package/dist/read-channel.js.map +1 -0
  86. package/dist/resource.d.ts +31 -0
  87. package/dist/resource.d.ts.map +1 -0
  88. package/dist/resource.js +117 -0
  89. package/dist/resource.js.map +1 -0
  90. package/dist/routes.d.ts +90 -0
  91. package/dist/routes.d.ts.map +1 -0
  92. package/dist/routes.js +536 -0
  93. package/dist/routes.js.map +1 -0
  94. package/dist/serve.d.ts +4 -0
  95. package/dist/serve.d.ts.map +1 -0
  96. package/dist/serve.js +221 -0
  97. package/dist/serve.js.map +1 -0
  98. package/dist/server.d.ts +211 -0
  99. package/dist/server.d.ts.map +1 -0
  100. package/dist/server.js +734 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/types.d.ts +504 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +2 -0
  105. package/dist/types.js.map +1 -0
  106. package/package.json +80 -4
@@ -0,0 +1,488 @@
1
+ import { basename, dirname, extname, join } from "node:path";
2
+ import { fileURLToPath, pathToFileURL } from "node:url";
3
+ import { existsSync } from "node:fs";
4
+ import { readFile } from "node:fs/promises";
5
+ import { compileComponentStylesForBuild, parseComponentResource } from "@nextwebwg/html-next";
6
+ import { loadNodeComponents } from "@nextwebwg/html-next/node-loader";
7
+ import { createRenderer } from "@nextwebwg/html-next/server";
8
+ import { createServer, isRunnableDevEnvironment } from "vite";
9
+ import { MarkupKitError, rootAlias } from "./config.js";
10
+ import { sitePolicy } from "./csp.js";
11
+ import { authoredHead, documentHTML, redirectPage } from "./document.js";
12
+ import { breadth, discoverApplication, matchRoute, parameter, validSegment } from "./routes.js";
13
+ import { applicationResource, pageDefinition, withoutSettings } from "./resource.js";
14
+ import { createProviderModules } from "./providers.js";
15
+ import { serverReaders } from "./private-readers.js";
16
+ import { privateReadResponse } from "./private-api.js";
17
+ import { createNavigation, failurePage, mime, pageAction, pageResponse, prerenderedActions, renderRoute, requestReadContext, respond, serverFailure } from "./server.js";
18
+ // Built-in components need no link: a resource that uses one gets it added after its content, so
19
+ // diagnostics keep their line numbers. The import map below resolves it from this package.
20
+ const builtins = [["mk-nav", "@threadlabs/markupkit/components/nav.html"], ["mk-breadcrumbs", "@threadlabs/markupkit/components/breadcrumbs.html"],
21
+ ["mk-pager", "@threadlabs/markupkit/components/pager.html"]];
22
+ /** MarkupKit's import map: @/ is the project root, as in Nuxt, and built-ins resolve from this package. */
23
+ function importMap(root) {
24
+ return { imports: { "@/": pathToFileURL(root).href + "/", "@threadlabs/markupkit/components/": new URL("../components/", import.meta.url).href } };
25
+ }
26
+ function packageResource(path) {
27
+ let directory = dirname(path);
28
+ while (!existsSync(join(directory, "package.json")) && dirname(directory) !== directory)
29
+ directory = dirname(directory);
30
+ return { url: pathToFileURL(path).href, trustRoot: pathToFileURL(directory + "/").href };
31
+ }
32
+ // Classic scripts inlined into each document head run before first paint, e.g. to apply a saved theme:
33
+ // a plugin's headScript, then app/head.js, each in its own element so neither can break the other.
34
+ export async function headScripts(options, root) {
35
+ const path = join(root, "app/head.js");
36
+ const file = existsSync(path) ? await readFile(path, "utf8") : undefined;
37
+ const scripts = [];
38
+ for (const [script, name, source] of [[options.headScript, "headScript", undefined], [file, "app/head.js", path]]) {
39
+ if (script === undefined)
40
+ continue;
41
+ if (/<!--|<\/?script/i.test(script)) {
42
+ throw new MarkupKitError(`${name} cannot contain <!--, <script, or </script, which would end or nest its inline script.`, source);
43
+ }
44
+ scripts.push(script);
45
+ }
46
+ return scripts;
47
+ }
48
+ // Every page gets the head scripts, the not-found page included, so it cannot flash either.
49
+ export function notFoundPage(scripts, policy) {
50
+ const head = { html: authoredHead + "<title>Page not found</title>", scripts, ...(policy === undefined ? {} : { csp: policy }) };
51
+ const body = "<main><h1>Page not found</h1></main>";
52
+ return { head, body, html: documentHTML(body, head) };
53
+ }
54
+ /** The application, plus what a build reads from it: each route's component graph and the concrete page URLs. */
55
+ export async function createApplicationInternals(input = {}, moduleServer, assets, policy) {
56
+ const { options, config, discovery: { routes, notFound: notFoundRoute, error: errorRoute, sources, files, watched }, server: { endpoints, middleware }, redirects, pageRedirects, canonicalOrigin } = await discoverApplication(input);
57
+ const generated = await generate(options, config, routes, endpoints, redirects, files);
58
+ const scripts = await headScripts(options, config.root);
59
+ const csp = policy ?? config.csp;
60
+ const ownsServer = moduleServer === undefined;
61
+ const map = importMap(config.root);
62
+ const server = moduleServer ?? await createServer({ root: config.root, configFile: false, appType: "custom", resolve: { alias: rootAlias(config.root) },
63
+ mode: "development", publicDir: false, server: { middlewareMode: true, watch: null, hmr: false },
64
+ optimizeDeps: { noDiscovery: true, include: [] }, logLevel: "silent" });
65
+ const environment = server.environments.ssr;
66
+ if (environment === undefined || !isRunnableDevEnvironment(environment)) {
67
+ if (ownsServer)
68
+ await server.close();
69
+ throw new MarkupKitError("Vite requires a runnable Node loader environment.");
70
+ }
71
+ const module = async (layer) => layer.server === undefined ? {} :
72
+ typeof layer.server === "string" ? await environment.runner.import(layer.server) : layer.server;
73
+ const renderer = createRenderer();
74
+ const privateLifetime = new AbortController();
75
+ const privateSources = new Map();
76
+ const providers = createProviderModules(config.root, {
77
+ cacheDir: server.config.cacheDir,
78
+ async resolve(specifier, importer) {
79
+ const resolved = await server.environments.client.pluginContainer.resolveId(specifier, importer);
80
+ return resolved === null || resolved.external ? undefined : resolved.id.split("?")[0];
81
+ },
82
+ watch: file => { server.watcher.add(file); },
83
+ });
84
+ // Diagnostics name a loader's file, or its component when a plugin supplies the loader module.
85
+ const origin = (layer) => typeof layer.server === "string" ? layer.server : layer.component;
86
+ // Materialize entries once per application so loaders and navigation see the same catalog.
87
+ const unenumerated = [];
88
+ let catalog;
89
+ const concreteRoutes = () => catalog ??= (async () => {
90
+ const paths = new Map();
91
+ for (const route of routes) {
92
+ const loaded = await module(route);
93
+ if (loaded.actions !== undefined && route.render !== "server")
94
+ throw prerenderedActions(route.pattern, origin(route));
95
+ // A server-rendered dynamic page renders whatever its URL names, so it needs no entries().
96
+ if (route.params.length > 0 && typeof loaded.entries !== "function") {
97
+ if (route.render !== "server")
98
+ unenumerated.push(route);
99
+ continue;
100
+ }
101
+ const entries = loaded.entries === undefined ? [{}] : await loaded.entries();
102
+ if (!Array.isArray(entries) || entries.length === 0)
103
+ throw new MarkupKitError("entries() must return a nonempty array.", origin(route));
104
+ for (const entry of entries) {
105
+ if (entry === null || typeof entry !== "object" || Object.keys(entry).sort().join(",") !== [...route.params].sort().join(",")) {
106
+ throw new MarkupKitError(`Each entry must provide exactly these parameters: ${route.params.join(", ")}.`, origin(route));
107
+ }
108
+ const segments = route.segments.flatMap(segment => {
109
+ const name = parameter(segment);
110
+ if (name === undefined)
111
+ return [segment];
112
+ const value = entry[name];
113
+ if (breadth(segment) === 1) {
114
+ if (!validSegment(value))
115
+ throw new MarkupKitError(`Parameter ${name} must be a safe nonempty URL segment.`, origin(route));
116
+ return [encodeURIComponent(value)];
117
+ }
118
+ // [...name] takes at least one segment and [[...name]] any number, as a list.
119
+ if (!Array.isArray(value) || !value.every(validSegment) || (value.length === 0 && breadth(segment) === 2)) {
120
+ throw new MarkupKitError(`Parameter ${name} must be a ${breadth(segment) === 2 ? "nonempty " : ""}list of safe nonempty URL segments.`, origin(route));
121
+ }
122
+ return value.map(encodeURIComponent);
123
+ });
124
+ const path = config.base + (segments.length === 0 ? "" : segments.join("/") + "/");
125
+ if (paths.has(path))
126
+ throw new MarkupKitError(`Static route collision at ${path}.`, route.component);
127
+ const page = pageRedirects.get(path);
128
+ if (page !== undefined)
129
+ throw new MarkupKitError(`The page redirect mk:redirect-from ${page.from} is the URL of ${route.component}.`, page.component);
130
+ if (redirects.has(path))
131
+ throw new MarkupKitError(`The redirects option also redirects ${path}, which is this page's URL.`, route.component);
132
+ const matched = matchRoute(routes, path, config.base);
133
+ if (matched?.route !== route)
134
+ throw new MarkupKitError(`Static route collision with ${matched?.route.pattern} at ${path}.`, route.component);
135
+ paths.set(path, route);
136
+ }
137
+ }
138
+ return paths;
139
+ })();
140
+ const navigation = createNavigation(config.base, routes, concreteRoutes);
141
+ // Vite owns module caching and dependency invalidation. Per-render results never enter
142
+ // a shared cache; HTML Next owns the DOM worker and declarative component semantics.
143
+ const graph = async (route) => {
144
+ const layers = [...route.layouts, route];
145
+ const packages = new Map();
146
+ const resources = new Map();
147
+ const layerURLs = new Set(layers.map(layer => pathToFileURL(layer.component).href));
148
+ const resolveCSS = server.config.createResolver({ extensions: [".css"], mainFields: ["style"], conditions: ["style", "development|production"], preferRelative: true, tryIndex: false });
149
+ const loaded = await loadNodeComponents(layers.map(layer => pathToFileURL(layer.component).href), {
150
+ readStylesheet: async (url) => ({ url, source: await readFile(fileURLToPath(url), "utf8") }),
151
+ resolveStylesheet: async (specifier, parentURL) => {
152
+ const resolved = await resolveCSS(specifier, fileURLToPath(parentURL));
153
+ return resolved === undefined ? undefined
154
+ : pathToFileURL(resolved.replace(/[?#].*$/, "")).href + (/[?#].*$/.exec(resolved)?.[0] ?? "");
155
+ },
156
+ stylesheetAssetURL: url => url.startsWith("file:") ? `/@fs/${fileURLToPath(url)}${new URL(url).search}${new URL(url).hash}` : url,
157
+ // The graph resolver is synchronous. Prepare its bare imports while asynchronously
158
+ // reading each carrier, using Vite's ESM resolution from the consuming application.
159
+ importMap: map,
160
+ readComponent: async (url) => {
161
+ let source = sources.get(fileURLToPath(url)) ?? await readFile(fileURLToPath(url), "utf8");
162
+ for (const [tag, href] of builtins)
163
+ if (new RegExp(`<${tag}[\\s/>]`).test(source))
164
+ source += `\n<link rel="component" href="${href}">`;
165
+ const parsed = layerURLs.has(url) ? applicationResource(source, url) : parseComponentResource(source, url);
166
+ if ("configuration" in parsed)
167
+ resources.set(url, parsed);
168
+ const imports = [...parsed.dependencies, ...parsed.definitions.flatMap(definition => (definition.module ?? definition.controller) === undefined ? [] : [(definition.module ?? definition.controller)])];
169
+ for (const specifier of imports) {
170
+ if (/^(?:[A-Za-z][A-Za-z\d+.-]*:|\/|\.\.?\/)/.test(specifier) || Object.keys(map.imports).some(key => specifier.startsWith(key)))
171
+ continue;
172
+ const resolved = await server.environments.client.pluginContainer.resolveId(specifier, fileURLToPath(url));
173
+ if (resolved === null || resolved.external)
174
+ throw new MarkupKitError(`Cannot resolve component import ${specifier}.`, url);
175
+ packages.set(`${url}\0${specifier}`, packageResource(resolved.id));
176
+ }
177
+ return { url, source };
178
+ },
179
+ resolvePackage: (specifier, parentURL) => {
180
+ const resolved = packages.get(`${parentURL}\0${specifier}`);
181
+ if (resolved === undefined)
182
+ throw new MarkupKitError(`Cannot resolve component import ${specifier}.`, parentURL);
183
+ return resolved;
184
+ },
185
+ });
186
+ const definitions = layers.map(layer => {
187
+ if (layer === route)
188
+ return pageDefinition(resources.get(pathToFileURL(layer.component).href), layer.component);
189
+ const roots = loaded.roots.filter(id => loaded.nodes.get(id).url === pathToFileURL(layer.component).href);
190
+ if (roots.length !== 1)
191
+ throw new MarkupKitError("A page or layout must declare exactly one root component.", layer.component);
192
+ return withoutSettings(loaded.nodes.get(roots[0]).definition);
193
+ });
194
+ if (definitions.at(-1).contract.tag !== route.pageName) {
195
+ throw new MarkupKitError("Page component name changed; rediscover routes before rendering.", route.component);
196
+ }
197
+ for (const definition of definitions.slice(0, -1)) {
198
+ if (!definition.slots?.some(slot => slot.name === "page"))
199
+ throw new MarkupKitError('Layout requires a slot named "page".', definition.source.file);
200
+ }
201
+ const carriers = new Map();
202
+ for (const node of loaded.nodes.values()) {
203
+ const carrier = carriers.get(node.url) ?? { count: 0, explicit: false };
204
+ carrier.count += 1;
205
+ carrier.explicit ||= node.module !== undefined || node.controller !== undefined;
206
+ carriers.set(node.url, carrier);
207
+ }
208
+ const siblings = new Map();
209
+ const sibling = (file, suffix = "") => {
210
+ const stem = file.slice(0, -extname(file).length) + suffix;
211
+ const candidates = [stem + ".js", stem + ".ts"].filter(path => existsSync(path));
212
+ if (candidates.length > 1)
213
+ throw new MarkupKitError(`${suffix === "" ? "Component" : suffix === ".client" ? "Client" : "Server"} sibling module is ambiguous: ${candidates.map(path => basename(path)).join(", ")}; ${suffix === "" ? "select one with an explicit module attribute" : `keep one ${suffix.slice(1)} companion`}.`, file);
214
+ return candidates[0];
215
+ };
216
+ const companion = (url) => {
217
+ let found = siblings.get(url);
218
+ if (found !== undefined)
219
+ return found;
220
+ found = (async () => {
221
+ const carrier = carriers.get(url);
222
+ if (carrier.count > 1 && carrier.explicit)
223
+ return undefined;
224
+ const file = fileURLToPath(url);
225
+ const found = sibling(file);
226
+ if (found === undefined)
227
+ return undefined;
228
+ if (carrier.count > 1) {
229
+ throw new MarkupKitError("A sibling module is ambiguous for a file declaring several components; set module on the template it belongs to.", file);
230
+ }
231
+ return found;
232
+ })();
233
+ siblings.set(url, found);
234
+ return found;
235
+ };
236
+ const components = await providers.resolve(await Promise.all([...loaded.nodes.values()].map(async (node) => {
237
+ let module = node.module === undefined
238
+ ? node.controller !== undefined || node.imported || !node.url.startsWith("file:") ? undefined : await companion(node.url)
239
+ : fileURLToPath(node.module.url);
240
+ let client;
241
+ let privateModule;
242
+ let readers;
243
+ if (node.controller === undefined && !node.imported && node.url.startsWith("file:")) {
244
+ const carrier = carriers.get(node.url);
245
+ if (module !== undefined && /\.client\.[jt]s$/.test(module)) {
246
+ client = module;
247
+ module = undefined;
248
+ }
249
+ else if (module !== undefined || !carrier.explicit) {
250
+ client = sibling(module ?? fileURLToPath(node.url), ".client");
251
+ if (client !== undefined && module === undefined && carrier.count > 1)
252
+ throw new MarkupKitError("A client sibling is ambiguous for a file declaring several components; set module on the template it belongs to.", fileURLToPath(node.url));
253
+ }
254
+ const candidate = sibling(module ?? fileURLToPath(node.url), ".server");
255
+ if (candidate !== undefined && (module !== undefined || carrier.count === 1)) {
256
+ const found = serverReaders(await environment.runner.import(candidate), candidate);
257
+ if (found !== undefined && Object.keys(found).length > 0) {
258
+ if (module === undefined)
259
+ throw new MarkupKitError("Private readers require a common module containing their input selectors.", candidate);
260
+ privateModule = candidate;
261
+ readers = Object.keys(found);
262
+ }
263
+ }
264
+ }
265
+ return { definition: withoutSettings(node.definition), styles: compileComponentStylesForBuild(node.definition.css, node.definition),
266
+ ...(node.controller === undefined ? {} : { controller: fileURLToPath(node.controller.url) }),
267
+ ...(client === undefined ? {} : { client }),
268
+ ...(privateModule === undefined ? {} : { server: privateModule }), ...(readers === undefined ? {} : { privateReaderNames: readers }),
269
+ ...(module === undefined ? {} : { module }) };
270
+ })));
271
+ for (const component of components)
272
+ if (component.server !== undefined && component.binding !== undefined)
273
+ privateSources.set(component.binding.source, {
274
+ definition: component.definition, common: () => environment.runner.import(component.module),
275
+ readers: async () => serverReaders(await environment.runner.import(component.server), component.server),
276
+ });
277
+ return { components, definitions: components.map(component => component.definition), layers: layers.map((layer, i) => ({ definition: definitions[i],
278
+ module: () => module(layer), origin: origin(layer) })) };
279
+ };
280
+ // One policy for the whole site, from every component a page, layout, the not-found page, or the error page uses.
281
+ // ponytail: built from every route's graph once per application; the development server rebuilds the application on a change.
282
+ let computed;
283
+ const site = () => computed ??= (async () => {
284
+ if (csp === false)
285
+ return undefined;
286
+ const seen = new Set();
287
+ const definitions = [];
288
+ for (const route of [...routes, ...notFoundRoute === undefined ? [] : [notFoundRoute], ...errorRoute === undefined ? [] : [errorRoute]]) {
289
+ const key = [...route.layouts, route].map(layer => layer.component).join("\0");
290
+ if (seen.has(key))
291
+ continue;
292
+ seen.add(key);
293
+ definitions.push(...(await graph(route)).definitions);
294
+ }
295
+ return sitePolicy(csp, definitions, scripts);
296
+ })();
297
+ const builtinNotFound = async (pathname) => ({ status: 404, pathname, ...notFoundPage(scripts, await site()), css: "", components: [], layers: [] });
298
+ const redirected = async (pathname, location, status, headers) => ({ status, pathname, location, ...redirectPage(location, await site()), css: "", components: [], layers: [], ...(headers === undefined ? {} : { headers }) });
299
+ const builtinFailure = async (pathname) => ({ pathname, ...failurePage(serverFailure, scripts, await site()), css: "", components: [], layers: [] });
300
+ // A matched route; without one, the not-found page, or for a failure the error page, through its layouts.
301
+ // request makes it a request-time render.
302
+ const renderPage = async (matched, url, request, signal, failure, action) => {
303
+ const fallback = failure === undefined ? notFoundRoute : errorRoute;
304
+ if (matched === undefined && fallback === undefined)
305
+ return failure === undefined ? builtinNotFound(url.pathname) : builtinFailure(url.pathname);
306
+ const { route, params } = matched ?? { route: fallback, params: {} };
307
+ const { layers, definitions, components } = await graph(route);
308
+ const rendered = await renderRoute({ base: config.base, canonicalOrigin, route, params, url, ...(request === undefined ? {} : { request }), signal, layers,
309
+ definitions, providers: Object.fromEntries(components.flatMap(component => component.binding === undefined ? [] : [[component.definition.contract.tag, component.binding]])),
310
+ clientModules: components.filter(component => component.client !== undefined).map(component => component.definition.contract.tag),
311
+ services: options.services,
312
+ privateReaders: Object.fromEntries(components.flatMap(component => component.server === undefined ? [] : [[component.definition.contract.tag,
313
+ async () => serverReaders(await environment.runner.import(component.server), component.server)]])),
314
+ render: renderer.render, scripts, ...(await site().then(site => site === undefined ? {} : { policy: site })), navigation, ...(failure === undefined ? {} : { failure }),
315
+ ...(action === undefined ? {} : { action }) });
316
+ if (rendered.kind === "redirect")
317
+ return redirected(url.pathname, rendered.location, rendered.status, rendered.headers);
318
+ if (rendered.kind === "notFound") {
319
+ // The not-found and error pages' own notFound() falls back to the built-in page.
320
+ const page = matched === undefined ? builtinNotFound(url.pathname) : await renderPage(undefined, url, undefined, signal);
321
+ return { ...page, headers: rendered.headers };
322
+ }
323
+ return { status: failure?.status ?? (matched === undefined ? 404 : rendered.status), pathname: url.pathname, body: rendered.body, css: rendered.css, head: rendered.head,
324
+ html: documentHTML(rendered.body, rendered.head), components, layers: rendered.layers, headers: rendered.headers,
325
+ ...(rendered.prepared === undefined ? {} : { prepared: rendered.prepared }) };
326
+ };
327
+ /**
328
+ * A failure answers with app/error.html and a safe message; the error itself goes to the console. The
329
+ * development server, which supplies the module server, shows the error instead.
330
+ */
331
+ const failed = async (error, request) => {
332
+ const report = (error) => { if (!ownsServer || request.signal.aborted || privateLifetime.signal.aborted)
333
+ throw error; console.error(error); };
334
+ report(error);
335
+ const { pathname } = new URL(request.url);
336
+ // A failed page has no payload, so the browser loads its document, the error page.
337
+ if (pathname.startsWith(config.base + "_markupkit/pages/"))
338
+ return new Response(null, { status: 500 });
339
+ // The error page shares the site's layouts, so a failing layout fails it too; the built-in page answers then.
340
+ const page = await (pathname.startsWith("//") ? builtinFailure(pathname) : renderPage(undefined, new URL(pathname, config.origin), undefined, request.signal, serverFailure)
341
+ .catch((again) => { report(again); return builtinFailure(pathname); }));
342
+ return pageResponse(page, request, false, assets?.(page));
343
+ };
344
+ const pipeline = {
345
+ base: config.base, routes, endpoints,
346
+ read(request) {
347
+ request = new Request(request, { signal: AbortSignal.any([request.signal, privateLifetime.signal]) });
348
+ return privateReadResponse(request, config.base, privateSources, url => requestReadContext(request, url, config.base, matchRoute(routes, url.pathname, config.base)?.params ?? {}, options.services));
349
+ },
350
+ redirects: new Map([...redirects].map(([from, location]) => [from, { location, status: 308 }])),
351
+ // The unbuilt application regenerates them on each change, so readers always fetch them afresh.
352
+ files: new Map([...generated].map(([pathname, file]) => [pathname, { ...file, headers: { "cache-control": "no-cache" } }])),
353
+ endpoint: async (route) => await environment.runner.import(route.file),
354
+ ...(middleware === undefined ? {} : { middleware: async () => {
355
+ const handler = (await environment.runner.import(middleware)).default;
356
+ if (typeof handler !== "function")
357
+ throw new MarkupKitError("Middleware must export a default function.", middleware);
358
+ return handler;
359
+ } }),
360
+ async page(route, params, request, payload) {
361
+ const url = new URL(request.url);
362
+ // A prerendered page renders as the build renders it: at its canonical URL, without the request.
363
+ const server = route.render === "server";
364
+ let action;
365
+ if (request.method === "POST") {
366
+ const loaded = await module(route);
367
+ // As the build does, so development names the page too.
368
+ if (loaded.actions !== undefined && !server)
369
+ throw prerenderedActions(route.pattern, origin(route));
370
+ const found = pageAction(loaded, url);
371
+ if (found instanceof Response)
372
+ return found;
373
+ action = found;
374
+ }
375
+ const page = await renderPage({ route, params }, server ? url : new URL(url.pathname, config.origin), server ? request : undefined, request.signal, undefined, action);
376
+ return pageResponse(page, request, payload, assets?.(page));
377
+ },
378
+ async notFound(request, payload) {
379
+ const { pathname } = new URL(request.url);
380
+ if (payload)
381
+ return new Response(null, { status: 404 });
382
+ const page = await (pathname.startsWith("//") ? builtinNotFound(pathname) : renderPage(undefined, new URL(pathname, config.origin), undefined, request.signal));
383
+ return pageResponse(page, request, false, assets?.(page));
384
+ },
385
+ };
386
+ const application = {
387
+ ...config, routes, ...(notFoundRoute === undefined ? {} : { notFound: notFoundRoute }), ...(errorRoute === undefined ? {} : { error: errorRoute }),
388
+ navigation: navigation.navigation, navigationTree: navigation.navigationTree,
389
+ files, generated, watchFiles: watched, endpoints, ...(middleware === undefined ? {} : { middleware }),
390
+ async entries() {
391
+ const paths = await concreteRoutes();
392
+ const missing = unenumerated[0];
393
+ if (missing !== undefined)
394
+ throw new MarkupKitError(`Static entries() must enumerate parameters: ${missing.params.join(", ")}.`, origin(missing));
395
+ // Server-rendered pages render on request, so a build lists only prerendered ones.
396
+ return [...paths].filter(([, route]) => route.render !== "server").map(([path]) => path).sort();
397
+ },
398
+ async render(pathname, signal = new AbortController().signal) {
399
+ signal.throwIfAborted();
400
+ // A path starting with // would name another origin; no page lives there, for documents or payloads.
401
+ if (pathname.startsWith("//"))
402
+ return builtinNotFound(pathname);
403
+ const url = new URL(pathname, config.origin);
404
+ if (url.origin !== config.origin || url.search || url.hash)
405
+ throw new MarkupKitError("Static rendering requires an application pathname without a query or fragment.");
406
+ // The redirects option precedes pages, with or without the trailing slash.
407
+ const configured = redirects.get(url.pathname.endsWith("/") ? url.pathname : url.pathname + "/");
408
+ if (configured !== undefined)
409
+ return redirected(url.pathname, configured, 308);
410
+ return renderPage(matchRoute(routes, url.pathname, config.base), url, undefined, signal);
411
+ },
412
+ // Not a method of `this`: runtimes are handed the function itself, as in Deno.serve(application.fetch).
413
+ fetch: request => respond(pipeline, request).catch((error) => failed(error, request)),
414
+ async close() {
415
+ privateLifetime.abort();
416
+ try {
417
+ await Promise.all([renderer.close(), ...ownsServer ? [server.close()] : []]);
418
+ }
419
+ finally {
420
+ await providers.close();
421
+ }
422
+ },
423
+ };
424
+ return { application, graph, catalog: concreteRoutes, policy: site, redirects };
425
+ }
426
+ /**
427
+ * Each plugin's generate hook, run once every page has compiled, by deployment pathname. A path is an application
428
+ * path, as a redirect's is, and it claims a URL no page, redirect, endpoint, public file, page asset, other plugin's
429
+ * file, or MarkupKit's own output has.
430
+ */
431
+ async function generate(options, config, routes, endpoints, redirects, assets) {
432
+ const generated = new Map();
433
+ const owners = new Map();
434
+ const pages = new Set(routes.filter(route => route.params.length === 0).map(route => config.base + route.pattern.slice(1)));
435
+ const handlers = new Set(endpoints.filter(route => route.params.length === 0).map(route => config.base + route.pattern.slice(1)));
436
+ for (const plugin of options.plugins ?? []) {
437
+ if (plugin.generate === undefined)
438
+ continue;
439
+ let files;
440
+ try {
441
+ files = await plugin.generate({ root: config.root, base: config.base });
442
+ }
443
+ catch (error) {
444
+ const failure = new MarkupKitError(`Plugin ${plugin.name} failed in generate: ${error instanceof Error ? error.message : String(error)}`);
445
+ failure.cause = error;
446
+ throw failure;
447
+ }
448
+ for (const [path, value] of Object.entries(files)) {
449
+ const fail = (problem) => { throw new MarkupKitError(`Plugin ${plugin.name} generates ${path}, ${problem}.`); };
450
+ if (!/^\/(?!\/)/.test(path) || path.endsWith("/") || !path.slice(1).split("/").every(validSegment))
451
+ fail("which is no file path: it starts with /, names a file, and has no empty, . or .. segment");
452
+ const pathname = new URL(config.base + path.slice(1), config.origin).pathname;
453
+ const relative = decodeURIComponent(pathname.slice(config.base.length));
454
+ if (relative.split("/")[0] === "_markupkit")
455
+ fail("which is in _markupkit, reserved for MarkupKit's own files");
456
+ if (relative === "404.html" || (relative === "robots.txt" && options.robots !== undefined && options.robots !== false))
457
+ fail(`which MarkupKit generates`);
458
+ const owner = owners.get(pathname);
459
+ if (owner !== undefined)
460
+ fail(`which plugin ${owner} also generates`);
461
+ if (pages.has(pathname + "/"))
462
+ fail("which is a page's URL");
463
+ if (redirects.has(pathname + "/"))
464
+ fail("which a redirect answers");
465
+ if (handlers.has(pathname))
466
+ fail("which an endpoint answers");
467
+ if (assets.has(relative))
468
+ fail("which is a file a page references");
469
+ if (existsSync(join(config.root, "public", relative)))
470
+ fail("which is a file in public/");
471
+ const file = typeof value === "string" || value instanceof Uint8Array ? { contents: value } : value;
472
+ if (value === null || typeof value !== "object" && typeof value !== "string" || !(typeof file.contents === "string" || file.contents instanceof Uint8Array) ||
473
+ (file.type !== undefined && (typeof file.type !== "string" || file.type === "")))
474
+ fail("whose value is no string, Uint8Array, or { contents, type }");
475
+ owners.set(pathname, plugin.name);
476
+ generated.set(pathname, { contents: file.contents, type: file.type ?? mime[extname(relative)] ?? "application/octet-stream" });
477
+ }
478
+ }
479
+ return generated;
480
+ }
481
+ /**
482
+ * assets supplies a serving adapter's browser modules and stylesheets for fetch(), and policy the csp
483
+ * option it applies in place of the configured one, as the development server adds what Vite needs.
484
+ */
485
+ export async function createApplication(input = {}, moduleServer, assets, policy) {
486
+ return (await createApplicationInternals(input, moduleServer, assets, policy)).application;
487
+ }
488
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAA4B,MAAM,sBAAsB,CAAC;AACxH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAsB,MAAM,MAAM,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAmB,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAgC,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAiD,MAAM,aAAa,CAAC;AAIxN,iGAAiG;AACjG,2FAA2F;AAC3F,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,2CAA2C,CAAC,EAAE,CAAC,gBAAgB,EAAE,mDAAmD,CAAC;IAChJ,CAAC,UAAU,EAAE,6CAA6C,CAAC,CAAU,CAAC;AAExE,2GAA2G;AAC3G,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,mCAAmC,EAAE,IAAI,GAAG,CAAC,gBAAgB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACrJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxH,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,uGAAuG;AACvG,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,IAAY;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAU,EAAE,CAAC;QAC3H,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,wFAAwF,EAAE,MAAM,CAAC,CAAC;QACpI,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,OAA0B,EAAE,MAAuB;IAC9E,MAAM,IAAI,GAAiB,EAAE,IAAI,EAAE,YAAY,GAAG,+BAA+B,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC/I,MAAM,IAAI,GAAG,sCAAsC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AACxD,CAAC;AASD,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAAK,GAAuB,EAAE,EAAE,YAA4B,EAC3G,MAA2C,EAAE,MAA6C;IAC1F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvO,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;IACjC,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS,CAAC;IAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,YAAY,IAAI,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACrJ,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE;QAChG,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;IAC5C,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,EAAE,CAAC;QACxE,IAAI,UAAU;YAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,EAAE,KAAiB,EAAyB,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAClH,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmC,CAAC;IAClE,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE;QACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;QAChC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ;YAC/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAO,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAClG,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7C,CAAC,CAAC;IACH,+FAA+F;IAC/F,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAEhH,2FAA2F;IAC3F,MAAM,YAAY,GAAuB,EAAE,CAAC;IAC5C,IAAI,OAAmE,CAAC;IACxE,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;QACnD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtH,2FAA2F;YAC3F,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACpE,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxD,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,yCAAyC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxI,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9H,MAAM,IAAI,cAAc,CAAC,qDAAqD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3H,CAAC;gBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAChD,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;oBAChC,IAAI,IAAI,KAAK,SAAS;wBAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBACzC,MAAM,KAAK,GAAY,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;4BAAE,MAAM,IAAI,cAAc,CAAC,aAAa,IAAI,uCAAuC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC5H,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrC,CAAC;oBACD,8EAA8E;oBAC9E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC1G,MAAM,IAAI,cAAc,CAAC,aAAa,IAAI,cAAc,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,qCAAqC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzJ,CAAC;oBACD,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;gBACnF,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,cAAc,CAAC,6BAA6B,IAAI,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACrG,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,IAAI,KAAK,SAAS;oBAAE,MAAM,IAAI,cAAc,CAAC,sCAAsC,IAAI,CAAC,IAAI,kBAAkB,KAAK,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtJ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,cAAc,CAAC,uCAAuC,IAAI,6BAA6B,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC7I,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,OAAO,EAAE,KAAK,KAAK,KAAK;oBAAE,MAAM,IAAI,cAAc,CAAC,+BAA+B,OAAO,EAAE,KAAK,CAAC,OAAO,OAAO,IAAI,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC7I,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAEzE,uFAAuF;IACvF,qFAAqF;IACrF,MAAM,KAAK,GAAG,KAAK,EAAE,KAAuB,EAAuB,EAAE;QACnE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8C,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkD,CAAC;QAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACzL,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE;YAChG,cAAc,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YAC1F,iBAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;gBAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS;oBACvC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,kBAAkB,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG;YACjI,mFAAmF;YACnF,oFAAoF;YACpF,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBAC3B,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3F,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ;oBAAE,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;wBAAE,MAAM,IAAI,iCAAiC,IAAI,IAAI,CAAC;gBACvI,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC3G,IAAI,eAAe,IAAI,MAAM;oBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC;gBACzM,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;oBAChC,IAAI,yCAAyC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;wBAAE,SAAS;oBAC3I,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAO,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5G,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ;wBAAE,MAAM,IAAI,cAAc,CAAC,mCAAmC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC3H,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,SAAS,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrE,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;YACzB,CAAC;YACD,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;gBACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC;gBAC5D,IAAI,QAAQ,KAAK,SAAS;oBAAE,MAAM,IAAI,cAAc,CAAC,mCAAmC,SAAS,GAAG,EAAE,SAAS,CAAC,CAAC;gBACjH,OAAO,QAAQ,CAAC;YAClB,CAAC;SACF,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACrC,IAAI,KAAK,KAAK,KAAK;gBAAE,OAAO,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACjH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,GAAG,KAAK,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3G,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,2DAA2D,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC/H,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAE,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,cAAc,CAAC,kEAAkE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChH,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,sCAAsC,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtJ,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;QACzE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACxE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YACnB,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC;YAChF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuC,CAAC;QAChE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,MAAM,GAAG,EAAE,EAAsB,EAAE;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YAC3D,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,cAAc,CAAC,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,iCAAiC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,IAAI,CAAC,CAAC;YACzU,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,GAAW,EAA+B,EAAE;YAC7D,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACtC,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;gBAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBACnC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,SAAS,CAAC;gBAC1C,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,cAAc,CAAC,kHAAkH,EAAE,IAAI,CAAC,CAAC;gBACrJ,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,EAAE,CAAC;YACL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YACvG,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS;gBACpC,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;gBACzH,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,MAA0B,CAAC;YAC/B,IAAI,aAAiC,CAAC;YACtC,IAAI,OAAsC,CAAC;YAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;gBACxC,IAAI,MAAM,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,MAAM,CAAC;oBAAC,MAAM,GAAG,SAAS,CAAC;gBAAC,CAAC;qBAChG,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACnD,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC/D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC;wBAAE,MAAM,IAAI,cAAc,CAAC,kHAAkH,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/O,CAAC;gBACD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxE,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC7E,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;oBACnF,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzD,IAAI,MAAM,KAAK,SAAS;4BAAE,MAAM,IAAI,cAAc,CAAC,2EAA2E,EAAE,SAAS,CAAC,CAAC;wBAC3I,aAAa,GAAG,SAAS,CAAC;wBAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,8BAA8B,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;gBACjI,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5F,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3C,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC;gBACpI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC,CAAC,CAAC;QACL,KAAK,MAAM,SAAS,IAAI,UAAU;YAAE,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS;gBAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;oBACtJ,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAO,CAAC;oBAC5F,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAO,CAAC,EAAE,SAAS,CAAC,MAAO,CAAE;iBAC3G,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAE;gBAClJ,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC,CAAC;IAEF,kHAAkH;IAClH,8HAA8H;IAC9H,IAAI,QAAyD,CAAC;IAC9D,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,KAAK,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,WAAW,GAA0B,EAAE,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACxI,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,EAAE,CAAC;IAGL,MAAM,eAAe,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5K,MAAM,UAAU,GAAG,KAAK,EAAE,QAAgB,EAAE,QAAgB,EAAE,MAAsB,EAAE,OAAiB,EAAiB,EAAE,CACxH,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChK,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5K,0GAA0G;IAC1G,0CAA0C;IAC1C,MAAM,UAAU,GAAG,KAAK,EAAE,OAA8F,EAAE,GAAQ,EAChI,OAA4B,EAAE,MAAmB,EAAE,OAAiB,EAAE,MAAmB,EAAiB,EAAE;QAC5G,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;QACpE,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjJ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,KAAK,EAAE,QAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACtE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM;YACxJ,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5K,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjI,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;oBAC1I,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAO,CAAC,EAAE,SAAS,CAAC,MAAO,CAAE,CAAC,CAAC,CAAC,CAAC;YACvG,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;YACvK,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxH,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,iFAAiF;YACjF,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACzH,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI;YACtK,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO;YAChH,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC,CAAC;IACF;;;OAGG;IACH,MAAM,MAAM,GAAG,KAAK,EAAE,KAAc,EAAE,OAAgB,EAAqB,EAAE;QAC3E,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvJ,MAAM,CAAC,KAAK,CAAC,CAAC;QACd,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,mFAAmF;QACnF,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACvG,8GAA8G;QAC9G,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC;aACzK,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;IACF,MAAM,QAAQ,GAA+B;QAC3C,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS;QACpC,IAAI,CAAC,OAAO;YACV,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACtG,OAAO,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAClH,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAY,EAAE,CAAC,CAAC,CAAC;QACxG,gGAAgG;QAChG,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3H,QAAQ,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAmB;QACtF,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,OAAO,GAAG,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAA2B,EAAC,OAAO,CAAC;gBAC/F,IAAI,OAAO,OAAO,KAAK,UAAU;oBAAE,MAAM,IAAI,cAAc,CAAC,4CAA4C,EAAE,UAAU,CAAC,CAAC;gBACtH,OAAO,OAAqB,CAAC;YAC/B,CAAC,EAAE,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;YACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,iGAAiG;YACjG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;YACzC,IAAI,MAA8B,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnC,wDAAwD;gBACxD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM;oBAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpG,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACtC,IAAI,KAAK,YAAY,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC5C,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACvK,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO;YAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,OAAO;gBAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAChK,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;IACF,MAAM,WAAW,GAAgB;QAC/B,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAClJ,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc;QAC5E,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;QACrG,KAAK,CAAC,OAAO;YACX,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,cAAc,CAAC,+CAA+C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAClJ,mFAAmF;YACnF,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAClG,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC,MAAM;YAC1D,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,qGAAqG;YACrG,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;gBAAE,MAAM,IAAI,cAAc,CAAC,gFAAgF,CAAC,CAAC;YACvK,2EAA2E;YAC3E,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YACjG,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAC/E,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3F,CAAC;QACD,wGAAwG;QACxG,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9F,KAAK,CAAC,KAAK;YACT,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;oBAC7E,CAAC;gBAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QACtC,CAAC;KACF,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAClF,CAAC;AAGD;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CAAC,OAA2B,EAAE,MAAiF,EAAE,MAAmC,EACzK,SAAmC,EAAE,SAAsC,EAAE,MAAmC;IAChH,MAAM,SAAS,GAAc,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClI,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,SAAS;QAC5C,IAAI,KAAwC,CAAC;QAC7C,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAChF,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,UAAU,MAAM,CAAC,IAAI,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1I,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,MAAM,OAAO,CAAC;QAChB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,CAAC,OAAe,EAAS,EAAE,GAAG,MAAM,IAAI,cAAc,CAAC,UAAU,MAAM,CAAC,IAAI,cAAc,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/H,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;gBAAE,IAAI,CAAC,0FAA0F,CAAC,CAAC;YACrM,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YAC9E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACxE,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY;gBAAE,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAChH,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC;gBAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC1J,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,KAAK,iBAAiB,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC7D,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;gBAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACpE,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACpE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1F,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAA+C,CAAC;YAC9I,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,YAAY,UAAU,CAAC;gBACzJ,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;gBAAE,IAAI,CAAC,6DAA6D,CAAC,CAAC;YACxJ,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAA+B,EAAE,IAAI,EAAG,IAAI,CAAC,IAA2B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;QAChL,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAK,GAAuB,EAAE,EAAE,YAA4B,EAClG,MAA2C,EAAE,MAA6C;IAC1F,OAAO,CAAC,MAAM,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type Plugin } from "vite";
2
+ import type { ClientOptions } from "./client.js";
3
+ import type { BrowserDefinition } from "./types.js";
4
+ export declare function stylesheetSources(components: readonly BrowserDefinition[]): ReadonlyMap<string, string>;
5
+ /**
6
+ * A page's browser modules: each component compiled to direct DOM code that also adopts its
7
+ * server-rendered root, and the page's entry, `entry`, which registers them with client.ts. A page
8
+ * ships only the generated-runtime helpers its components use; controllers and declared reads are
9
+ * imported by the components that own them, and the page's stylesheets by its entry.
10
+ */
11
+ export declare function browserSources(components: readonly BrowserDefinition[], options: ClientOptions, entry: string, css?: readonly string[]): ReadonlyMap<string, string>;
12
+ export declare function browserPlugin(sources: ReadonlyMap<string, string>, inputs?: Set<string>): Plugin;
13
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAepD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBvG;AAQD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,SAAS,MAAM,EAAO,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAgFxK;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAehG"}