@stackbox/cms 0.0.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -7
- package/dist/AGENTS.md +215 -0
- package/dist/blocks.d.ts +6 -13
- package/dist/blocks.d.ts.map +1 -1
- package/dist/blocks.js +2 -0
- package/dist/blocks.js.map +1 -1
- package/dist/build.d.ts +14 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +145 -0
- package/dist/build.js.map +1 -0
- package/dist/cache.d.ts +14 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +93 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/link.d.ts +3 -7
- package/dist/link.d.ts.map +1 -1
- package/dist/link.js +12 -19
- package/dist/link.js.map +1 -1
- package/dist/pages.d.ts +15 -46
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +2 -0
- package/dist/pages.js.map +1 -1
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +155 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/blog/index.d.ts +6 -5
- package/dist/plugins/blog/index.d.ts.map +1 -1
- package/dist/plugins/blog/index.js +16 -0
- package/dist/plugins/blog/index.js.map +1 -1
- package/dist/plugins/random-quote/assets/quotes.json +230 -0
- package/dist/plugins/random-quote/index.d.ts +3 -1
- package/dist/plugins/random-quote/index.d.ts.map +1 -1
- package/dist/plugins/random-quote/index.js +15 -1
- package/dist/plugins/random-quote/index.js.map +1 -1
- package/dist/plugins/sitemap/index.d.ts +14 -0
- package/dist/plugins/sitemap/index.d.ts.map +1 -0
- package/dist/plugins/sitemap/index.js +119 -0
- package/dist/plugins/sitemap/index.js.map +1 -0
- package/dist/render-head.d.ts +2 -2
- package/dist/render-head.d.ts.map +1 -1
- package/dist/render-page.d.ts +2 -4
- package/dist/render-page.d.ts.map +1 -1
- package/dist/render-page.js +7 -3
- package/dist/render-page.js.map +1 -1
- package/dist/site.d.ts +10 -17
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +138 -7
- package/dist/site.js.map +1 -1
- package/dist/slot-content.d.ts +3 -19
- package/dist/slot-content.d.ts.map +1 -1
- package/dist/slot-content.js.map +1 -1
- package/dist/slot-handle.d.ts +7 -25
- package/dist/slot-handle.d.ts.map +1 -1
- package/dist/slot-handle.js +29 -14
- package/dist/slot-handle.js.map +1 -1
- package/dist/stackbox/context.d.ts +2 -51
- package/dist/stackbox/context.d.ts.map +1 -1
- package/dist/stackbox/context.js.map +1 -1
- package/dist/templates.d.ts +7 -57
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +277 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +13 -3
- package/src/plugins/blog/AGENTS.md +5 -1
- package/src/plugins/blog/index.ts +22 -5
- package/src/plugins/random-quote/AGENTS.md +30 -7
- package/src/plugins/random-quote/index.ts +17 -1
- package/src/plugins/random-quote/public_assets/widget.css +5 -0
- package/src/plugins/sitemap/AGENTS.md +82 -0
- package/src/plugins/sitemap/index.ts +156 -0
- package/AGENTS.md +0 -87
- package/dist/modules/blog/module.d.ts +0 -20
- package/dist/modules/blog/module.d.ts.map +0 -1
- package/dist/modules/blog/module.js +0 -52
- package/dist/modules/blog/module.js.map +0 -1
- package/dist/modules/blog/posts.d.ts +0 -15
- package/dist/modules/blog/posts.d.ts.map +0 -1
- package/dist/modules/blog/posts.js +0 -46
- package/dist/modules/blog/posts.js.map +0 -1
- package/dist/plugins/blog/module.d.ts +0 -20
- package/dist/plugins/blog/module.d.ts.map +0 -1
- package/dist/plugins/blog/module.js +0 -52
- package/dist/plugins/blog/module.js.map +0 -1
- package/dist/plugins/blog/plugin.d.ts +0 -20
- package/dist/plugins/blog/plugin.d.ts.map +0 -1
- package/dist/plugins/blog/plugin.js +0 -52
- package/dist/plugins/blog/plugin.js.map +0 -1
- package/dist/plugins/random-quote/module.d.ts +0 -9
- package/dist/plugins/random-quote/module.d.ts.map +0 -1
- package/dist/plugins/random-quote/module.js +0 -31
- package/dist/plugins/random-quote/module.js.map +0 -1
- package/dist/plugins/random-quote/plugin.d.ts +0 -8
- package/dist/plugins/random-quote/plugin.d.ts.map +0 -1
- package/dist/plugins/random-quote/plugin.js +0 -31
- package/dist/plugins/random-quote/plugin.js.map +0 -1
- package/dist/plugins/random-quote/quotes.json +0 -230
- package/dist/public/_sb/plugins/random-quote/quotes.json +0 -230
- package/src/plugins/random-quote/public_assets/quotes.json +0 -230
- /package/{dist/plugins/random-quote/public_assets → src/plugins/random-quote/assets}/quotes.json +0 -0
package/dist/site.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { buildPageCacheKey, cacheControlFresh, cacheControlStale, collectPageCacheConfigs, createMemoryCache, isCacheEntryFresh, isPageCacheDisabled, isSuccessfulRender, resolvePageCacheTtlMs, } from "./cache.js";
|
|
1
2
|
import { isPage } from "./pages.js";
|
|
2
3
|
import { renderPage } from "./render-page.js";
|
|
3
4
|
import { servePluginAsset } from "./link.js";
|
|
5
|
+
import { assertPlugin, } from "./plugin.js";
|
|
4
6
|
import { normalizePathname } from "./routing.js";
|
|
5
7
|
import { createContext } from "./stackbox/context.js";
|
|
6
8
|
export class SiteError extends Error {
|
|
@@ -49,6 +51,38 @@ function buildPageMap(pages) {
|
|
|
49
51
|
}
|
|
50
52
|
return map;
|
|
51
53
|
}
|
|
54
|
+
function assertUniquePluginNames(plugins) {
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
for (const plugin of plugins) {
|
|
57
|
+
if (seen.has(plugin.name)) {
|
|
58
|
+
throw new SiteError(`createSite(siteConfig, options): duplicate plugin name "${plugin.name}"`);
|
|
59
|
+
}
|
|
60
|
+
seen.add(plugin.name);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function collectPluginRoutes(plugins, site, pagePaths) {
|
|
64
|
+
const routes = new Map();
|
|
65
|
+
for (const plugin of plugins) {
|
|
66
|
+
if (!plugin.routes) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const declared = plugin.routes({ site });
|
|
70
|
+
if (declared instanceof Promise) {
|
|
71
|
+
throw new SiteError(`createSite(siteConfig, options): plugin "${plugin.name}" routes must return synchronously`);
|
|
72
|
+
}
|
|
73
|
+
for (const route of declared) {
|
|
74
|
+
const path = normalizePathname(route.path);
|
|
75
|
+
if (pagePaths.has(path)) {
|
|
76
|
+
throw new SiteError(`createSite(siteConfig, options): plugin route "${path}" conflicts with a page path`);
|
|
77
|
+
}
|
|
78
|
+
if (routes.has(path)) {
|
|
79
|
+
throw new SiteError(`createSite(siteConfig, options): duplicate plugin route "${path}"`);
|
|
80
|
+
}
|
|
81
|
+
routes.set(path, route.fetch);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return routes;
|
|
85
|
+
}
|
|
52
86
|
export function createSite(siteConfig, options) {
|
|
53
87
|
if (!isSiteConfig(siteConfig)) {
|
|
54
88
|
throw new SiteError("createSite(siteConfig, options): siteConfig must be from createSiteConfig()");
|
|
@@ -62,32 +96,128 @@ export function createSite(siteConfig, options) {
|
|
|
62
96
|
throw new SiteError("createSite(siteConfig, options): every page must be from createPage()");
|
|
63
97
|
}
|
|
64
98
|
}
|
|
99
|
+
const plugins = options.plugins ?? [];
|
|
100
|
+
if (!Array.isArray(plugins)) {
|
|
101
|
+
throw new SiteError("createSite(siteConfig, options): plugins must be an array of createPlugin() results");
|
|
102
|
+
}
|
|
103
|
+
for (const plugin of plugins) {
|
|
104
|
+
try {
|
|
105
|
+
assertPlugin(plugin, "createSite(siteConfig, options)");
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw new SiteError(error instanceof Error ? error.message : String(error));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
assertUniquePluginNames(plugins);
|
|
65
112
|
assertUniquePaths(pages);
|
|
66
113
|
const pageMap = buildPageMap(pages);
|
|
114
|
+
const pagePaths = new Set(pageMap.keys());
|
|
115
|
+
const siteShell = {
|
|
116
|
+
__kind: "site",
|
|
117
|
+
siteConfig,
|
|
118
|
+
pages,
|
|
119
|
+
plugins,
|
|
120
|
+
async fetch() {
|
|
121
|
+
return new globalThis.Response("Site not ready", { status: 500 });
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
const pluginRoutes = collectPluginRoutes(plugins, siteShell, pagePaths);
|
|
125
|
+
const cacheAdapter = options.cacheAdapter ?? createMemoryCache();
|
|
126
|
+
const hooks = options.hooks;
|
|
127
|
+
const inFlightRenders = new Map();
|
|
128
|
+
async function applyBeforeResponse(response, request, ctx, page) {
|
|
129
|
+
if (!hooks?.beforeResponse) {
|
|
130
|
+
return response;
|
|
131
|
+
}
|
|
132
|
+
return hooks.beforeResponse(response, { request, page, ctx });
|
|
133
|
+
}
|
|
134
|
+
async function renderAndStore(key, page, ctx, ttlMs) {
|
|
135
|
+
const existing = inFlightRenders.get(key);
|
|
136
|
+
if (existing) {
|
|
137
|
+
return existing;
|
|
138
|
+
}
|
|
139
|
+
const promise = (async () => {
|
|
140
|
+
const html = await renderPage(page, siteConfig, ctx, hooks);
|
|
141
|
+
if (isSuccessfulRender(html)) {
|
|
142
|
+
await cacheAdapter.set(key, {
|
|
143
|
+
html,
|
|
144
|
+
expiresAt: Date.now() + ttlMs,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return html;
|
|
148
|
+
})();
|
|
149
|
+
inFlightRenders.set(key, promise);
|
|
150
|
+
try {
|
|
151
|
+
return await promise;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
if (inFlightRenders.get(key) === promise) {
|
|
155
|
+
inFlightRenders.delete(key);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function startBackgroundRefresh(key, page, ctx, ttlMs) {
|
|
160
|
+
if (inFlightRenders.has(key)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
void renderAndStore(key, page, ctx, ttlMs).catch(() => {
|
|
164
|
+
// Keep serving the last good HTML on refresh failure.
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
async function respondWithHtml(html, method, cacheControl, ctx) {
|
|
168
|
+
const headers = { "Cache-Control": cacheControl };
|
|
169
|
+
if (method === "HEAD") {
|
|
170
|
+
return ctx.res.html("", { status: 200, headers });
|
|
171
|
+
}
|
|
172
|
+
return ctx.res.html(html, { status: 200, headers });
|
|
173
|
+
}
|
|
67
174
|
return {
|
|
68
175
|
__kind: "site",
|
|
69
176
|
siteConfig,
|
|
70
177
|
pages,
|
|
178
|
+
plugins,
|
|
71
179
|
async fetch(request, env = {}) {
|
|
72
180
|
const ctx = createContext(request, env);
|
|
73
181
|
const method = ctx.req.method;
|
|
182
|
+
const pathname = normalizePathname(ctx.req.url.pathname);
|
|
183
|
+
const pluginRoute = pluginRoutes.get(pathname);
|
|
184
|
+
if (pluginRoute) {
|
|
185
|
+
return pluginRoute(request, ctx);
|
|
186
|
+
}
|
|
74
187
|
if (method !== "GET" && method !== "HEAD") {
|
|
75
188
|
return ctx.res.text("Method Not Allowed", { status: 405 });
|
|
76
189
|
}
|
|
77
|
-
const
|
|
78
|
-
const pluginAsset = servePluginAsset(pathname, method);
|
|
190
|
+
const pluginAsset = servePluginAsset(pathname, method, plugins);
|
|
79
191
|
if (pluginAsset) {
|
|
80
192
|
return pluginAsset;
|
|
81
193
|
}
|
|
82
194
|
const page = pageMap.get(pathname);
|
|
83
195
|
if (!page) {
|
|
84
|
-
return ctx.res.notFound();
|
|
196
|
+
return applyBeforeResponse(await ctx.res.notFound(), request, ctx);
|
|
197
|
+
}
|
|
198
|
+
const cacheKey = buildPageCacheKey(pathname, ctx.req.url.search);
|
|
199
|
+
const cacheConfigs = collectPageCacheConfigs(page, siteConfig);
|
|
200
|
+
const hookAllowsCache = hooks?.shouldCache
|
|
201
|
+
? hooks.shouldCache(request)
|
|
202
|
+
: true;
|
|
203
|
+
async function respondForPage(html, cacheControl) {
|
|
204
|
+
return applyBeforeResponse(await respondWithHtml(html, method, cacheControl, ctx), request, ctx, page);
|
|
205
|
+
}
|
|
206
|
+
if (isPageCacheDisabled(cacheConfigs) || !hookAllowsCache) {
|
|
207
|
+
const html = await renderPage(page, siteConfig, ctx, hooks);
|
|
208
|
+
return respondForPage(html, "no-store");
|
|
209
|
+
}
|
|
210
|
+
const ttlMs = resolvePageCacheTtlMs(cacheConfigs);
|
|
211
|
+
const cached = await cacheAdapter.get(cacheKey);
|
|
212
|
+
if (cached && isCacheEntryFresh(cached)) {
|
|
213
|
+
return respondForPage(cached.html, cacheControlFresh(ttlMs));
|
|
85
214
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return
|
|
215
|
+
if (cached) {
|
|
216
|
+
startBackgroundRefresh(cacheKey, page, ctx, ttlMs);
|
|
217
|
+
return respondForPage(cached.html, cacheControlStale(ttlMs));
|
|
89
218
|
}
|
|
90
|
-
|
|
219
|
+
const html = await renderAndStore(cacheKey, page, ctx, ttlMs);
|
|
220
|
+
return respondForPage(html, cacheControlFresh(ttlMs));
|
|
91
221
|
},
|
|
92
222
|
};
|
|
93
223
|
}
|
|
@@ -97,6 +227,7 @@ export function isSite(value) {
|
|
|
97
227
|
value.__kind === "site" &&
|
|
98
228
|
isSiteConfig(value.siteConfig) &&
|
|
99
229
|
Array.isArray(value.pages) &&
|
|
230
|
+
Array.isArray(value.plugins) &&
|
|
100
231
|
typeof value.fetch === "function");
|
|
101
232
|
}
|
|
102
233
|
//# sourceMappingURL=site.js.map
|
package/dist/site.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"site.js","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"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"}
|
package/dist/slot-content.d.ts
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import type { SlotDefinition, SlotNamesFrom } from "./templates.js";
|
|
4
|
-
export type DefaultSlotContent = Block | string;
|
|
2
|
+
import type { Stackbox as SB } from "./types.js";
|
|
5
3
|
/** Accepts any block or HTML string (default slot content). */
|
|
6
|
-
export declare const anySlotContentSchema: z.ZodType<DefaultSlotContent>;
|
|
4
|
+
export declare const anySlotContentSchema: z.ZodType<SB.DefaultSlotContent>;
|
|
7
5
|
/** Accepts only HTML strings. */
|
|
8
6
|
export declare const stringSlotContentSchema: z.ZodString;
|
|
9
7
|
/** Accepts only CMS blocks. */
|
|
10
|
-
export declare const blockSlotContentSchema: z.ZodType<Block>;
|
|
11
|
-
export type SlotContentFromDefinition<D extends SlotDefinition> = D extends {
|
|
12
|
-
options: {
|
|
13
|
-
schema: infer Schema extends z.ZodTypeAny;
|
|
14
|
-
};
|
|
15
|
-
} ? z.input<Schema> : DefaultSlotContent;
|
|
16
|
-
export type PageSlotsInput<S extends readonly SlotDefinition[], Required extends string> = {
|
|
17
|
-
[K in Required]: SlotContentFromDefinition<Extract<S[number], {
|
|
18
|
-
name: K;
|
|
19
|
-
}>>[];
|
|
20
|
-
} & Partial<{
|
|
21
|
-
[K in Exclude<SlotNamesFrom<S>, Required>]: SlotContentFromDefinition<Extract<S[number], {
|
|
22
|
-
name: K;
|
|
23
|
-
}>>[];
|
|
24
|
-
}>;
|
|
8
|
+
export declare const blockSlotContentSchema: z.ZodType<SB.Block>;
|
|
25
9
|
export declare function validateSlotContentItem(slotName: string, item: unknown, schema: z.ZodTypeAny | undefined): void;
|
|
26
10
|
export declare class SlotContentValidationError extends Error {
|
|
27
11
|
constructor(slotName: string, message: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-content.d.ts","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"slot-content.d.ts","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAGhE,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,uBAAuB,aAAe,CAAC;AAEpD,+BAA+B;AAC/B,eAAO,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAEtD,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,IAAI,CAkBN;AAED,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAMxD"}
|
package/dist/slot-content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-content.js","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"slot-content.js","sourceRoot":"","sources":["../src/slot-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAqC,GAAG,CAAC,KAAK,CAAC;IAC9E,GAAG,CAAC,MAAM,EAAE;IACZ,GAAG,CAAC,MAAM,CAAW,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;AAEpD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAwB,GAAG,CAAC,MAAM,CACnE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAC1B,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,IAAa,EACb,MAAgC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,MAAM,CAAC,KAAK,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,0BAA0B,CAClC,QAAQ,EACR,+BAA+B,CAChC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,QAAgB,EAAE,OAAe;QAC3C,KAAK,CAAC,SAAS,QAAQ,gCAAgC,OAAO,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,CAAC,IAAI,CAAC;QACb,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
package/dist/slot-handle.d.ts
CHANGED
|
@@ -1,32 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type HSHtml } from "@hyperspan/html";
|
|
2
2
|
import type { z } from "zod";
|
|
3
|
-
import type {
|
|
4
|
-
import { type DefaultSlotContent, type SlotContentFromDefinition } from "./slot-content.js";
|
|
5
|
-
import type { SlotDefinition, SlotNamesFrom } from "./templates.js";
|
|
3
|
+
import type { Stackbox as SB } from "./types.js";
|
|
6
4
|
export declare class RenderError extends Error {
|
|
7
5
|
constructor(message: string);
|
|
8
6
|
}
|
|
9
7
|
export declare const SLOT_SENTINEL_PREFIX = "<!--__STACKBOX_SLOT__:";
|
|
10
8
|
export declare function slotSentinel(name: string): string;
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
readonly definition: D;
|
|
17
|
-
readonly content: readonly TContent[];
|
|
18
|
-
render(): SlotRenderValue;
|
|
19
|
-
};
|
|
20
|
-
export type TemplateSlotsFrom<S extends readonly SlotDefinition[]> = {
|
|
21
|
-
[K in SlotNamesFrom<S>]: Slot<SlotContentFromDefinition<Extract<S[number], {
|
|
22
|
-
name: K;
|
|
23
|
-
}>>, Extract<S[number], {
|
|
24
|
-
name: K;
|
|
25
|
-
}>>;
|
|
26
|
-
};
|
|
27
|
-
export declare function renderSlotContent(slotName: string, items: readonly unknown[], ctx: RenderContext, schema: z.ZodTypeAny | undefined): Promise<HSHtml>;
|
|
28
|
-
export declare function createStubSlot<D extends SlotDefinition>(definition: D): Slot<DefaultSlotContent, D>;
|
|
29
|
-
export declare function createPageSlot<D extends SlotDefinition>(definition: D, content: readonly SlotContentFromDefinition<D>[], ctx: RenderContext): Slot<SlotContentFromDefinition<D>, D>;
|
|
30
|
-
export declare function buildStubSlots<S extends readonly SlotDefinition[]>(definitions: S): TemplateSlotsFrom<S>;
|
|
31
|
-
export declare function buildPageSlots(page: SitePage, ctx: RenderContext): Record<string, Slot>;
|
|
9
|
+
export declare function renderSlotContent(slotName: string, items: readonly unknown[], ctx: SB.RenderContext, schema: z.ZodTypeAny | undefined): Promise<HSHtml>;
|
|
10
|
+
export declare function createStubSlot<D extends SB.SlotDefinition>(definition: D): SB.Slot<SB.DefaultSlotContent, D>;
|
|
11
|
+
export declare function createPageSlot<D extends SB.SlotDefinition>(definition: D, content: readonly SB.SlotContentFromDefinition<D>[], ctx: SB.RenderContext): SB.Slot<SB.SlotContentFromDefinition<D>, D>;
|
|
12
|
+
export declare function buildStubSlots<S extends readonly SB.SlotDefinition[]>(definitions: S): SB.TemplateSlotsFrom<S>;
|
|
13
|
+
export declare function buildPageSlots(page: SB.SitePage, ctx: SB.RenderContext): Record<string, SB.Slot>;
|
|
32
14
|
//# sourceMappingURL=slot-handle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-handle.d.ts","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"slot-handle.d.ts","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAKjD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AA0BD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,GAAG,EAAE,EAAE,CAAC,aAAa,EACrB,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,EAAE,CAAC,cAAc,EAC3B,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,CASlD;AAED,wBAAgB,cAAc,CAC5B,CAAC,SAAS,EAAE,CAAC,cAAc,EAE3B,UAAU,EAAE,CAAC,EACb,OAAO,EAAE,SAAS,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EACnD,GAAG,EAAE,EAAE,CAAC,aAAa,GACpB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAU7C;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,cAAc,EAAE,EACnE,WAAW,EAAE,CAAC,GACb,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAQzB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,GAAG,EAAE,EAAE,CAAC,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAUzB"}
|
package/dist/slot-handle.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { html } from "@hyperspan/html";
|
|
1
|
+
import { html, renderAsync } from "@hyperspan/html";
|
|
2
2
|
import { isBlock } from "./blocks.js";
|
|
3
3
|
import { validateSlotContentItem, } from "./slot-content.js";
|
|
4
4
|
export class RenderError extends Error {
|
|
@@ -11,21 +11,36 @@ export const SLOT_SENTINEL_PREFIX = "<!--__STACKBOX_SLOT__:";
|
|
|
11
11
|
export function slotSentinel(name) {
|
|
12
12
|
return `${SLOT_SENTINEL_PREFIX}${name}-->`;
|
|
13
13
|
}
|
|
14
|
+
async function renderSlotItemHtml(slotName, item, ctx, schema) {
|
|
15
|
+
try {
|
|
16
|
+
validateSlotContentItem(slotName, item, schema);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw new RenderError(err instanceof Error ? err.message : String(err));
|
|
20
|
+
}
|
|
21
|
+
if (typeof item === "string") {
|
|
22
|
+
return item;
|
|
23
|
+
}
|
|
24
|
+
if (isBlock(item)) {
|
|
25
|
+
const rendered = await item.render(ctx);
|
|
26
|
+
return renderAsync(rendered);
|
|
27
|
+
}
|
|
28
|
+
throw new RenderError("invalid slot content; expected block or HTML string");
|
|
29
|
+
}
|
|
14
30
|
export function renderSlotContent(slotName, items, ctx, schema) {
|
|
15
|
-
return Promise.all(items.map(async (item) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return item.render(ctx);
|
|
31
|
+
return Promise.all(items.map(async (item, index) => {
|
|
32
|
+
let htmlString = await renderSlotItemHtml(slotName, item, ctx, schema);
|
|
33
|
+
const hook = ctx.hooks?.renderSlotItem;
|
|
34
|
+
if (hook && ctx.page) {
|
|
35
|
+
htmlString = await hook(htmlString, {
|
|
36
|
+
item: item,
|
|
37
|
+
slot: slotName,
|
|
38
|
+
index,
|
|
39
|
+
page: ctx.page,
|
|
40
|
+
ctx: ctx.ctx,
|
|
41
|
+
});
|
|
27
42
|
}
|
|
28
|
-
|
|
43
|
+
return html.raw(htmlString);
|
|
29
44
|
})).then((chunks) => html `${chunks}`);
|
|
30
45
|
}
|
|
31
46
|
export function createStubSlot(definition) {
|
package/dist/slot-handle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-handle.js","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"slot-handle.js","sourceRoot":"","sources":["../src/slot-handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
maxAge?: number;
|
|
4
|
-
domain?: string;
|
|
5
|
-
path?: string;
|
|
6
|
-
expires?: Date;
|
|
7
|
-
httpOnly?: boolean;
|
|
8
|
-
secure?: boolean;
|
|
9
|
-
sameSite?: "lax" | "strict" | true;
|
|
10
|
-
};
|
|
11
|
-
type Cookies = {
|
|
12
|
-
_req: globalThis.Request;
|
|
13
|
-
_responseHeaders: Headers | undefined;
|
|
14
|
-
_parsedCookies: Record<string, string>;
|
|
15
|
-
_encrypt: ((str: string) => string) | undefined;
|
|
16
|
-
_decrypt: ((str: string) => string) | undefined;
|
|
17
|
-
get: (name: string) => string | undefined;
|
|
18
|
-
set: (name: string, value: string, options?: CookieOptions) => void;
|
|
19
|
-
delete: (name: string) => void;
|
|
20
|
-
};
|
|
21
|
-
type Request = {
|
|
22
|
-
url: URL;
|
|
23
|
-
raw: globalThis.Request;
|
|
24
|
-
method: string;
|
|
25
|
-
headers: Headers;
|
|
26
|
-
query: URLSearchParams;
|
|
27
|
-
cookies: Cookies;
|
|
28
|
-
text: () => Promise<string>;
|
|
29
|
-
json: <T = unknown>() => Promise<T>;
|
|
30
|
-
formData: () => Promise<FormData>;
|
|
31
|
-
urlencoded: () => Promise<URLSearchParams>;
|
|
32
|
-
};
|
|
33
|
-
type Response = {
|
|
34
|
-
cookies: Cookies;
|
|
35
|
-
headers: Headers;
|
|
36
|
-
status: number | undefined;
|
|
37
|
-
html: (html: string, options?: ResponseInit) => Promise<globalThis.Response>;
|
|
38
|
-
json: (json: unknown, options?: ResponseInit) => Promise<globalThis.Response>;
|
|
39
|
-
text: (text: string, options?: ResponseInit) => Promise<globalThis.Response>;
|
|
40
|
-
redirect: (url: string, options?: ResponseInit) => Promise<globalThis.Response>;
|
|
41
|
-
error: (error: Error, options?: ResponseInit) => Promise<globalThis.Response>;
|
|
42
|
-
notFound: (options?: ResponseInit) => Promise<globalThis.Response>;
|
|
43
|
-
merge: (response: globalThis.Response) => Promise<globalThis.Response>;
|
|
44
|
-
};
|
|
45
|
-
interface Context<TEnv extends Record<string, unknown> = Record<string, unknown>> {
|
|
46
|
-
env: TEnv;
|
|
47
|
-
req: Request;
|
|
48
|
-
res: Response;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
export declare function createContext<TEnv extends Record<string, unknown> = Record<string, unknown>>(raw: globalThis.Request, env?: TEnv): Stackbox.Context<TEnv>;
|
|
1
|
+
import type { Stackbox as SB } from "../types.js";
|
|
2
|
+
export declare function createContext<TEnv extends Record<string, unknown> = Record<string, unknown>>(raw: globalThis.Request, env?: TEnv): SB.Context<TEnv>;
|
|
52
3
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,aAAa,CAAC;AA+JlD,wBAAgB,aAAa,CAC3B,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAyBnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/stackbox/context.ts"],"names":[],"mappings":"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"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -1,63 +1,13 @@
|
|
|
1
1
|
import { type HSHtml } from "@hyperspan/html";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
import type { PageRenderView } from "./pages.js";
|
|
5
|
-
import { type TemplateSlotsFrom } from "./slot-handle.js";
|
|
6
|
-
export type SlotOptions = {
|
|
7
|
-
required?: boolean;
|
|
8
|
-
primary?: true;
|
|
9
|
-
schema?: z.ZodTypeAny;
|
|
10
|
-
};
|
|
11
|
-
export type SlotDefinition = {
|
|
12
|
-
name: string;
|
|
13
|
-
options?: SlotOptions;
|
|
14
|
-
};
|
|
15
|
-
export type SlotMeta = {
|
|
16
|
-
isDefault: boolean;
|
|
17
|
-
required: boolean;
|
|
18
|
-
schema?: z.ZodTypeAny;
|
|
19
|
-
};
|
|
20
|
-
export type TemplateRenderContext<S extends readonly SlotDefinition[] = readonly SlotDefinition[]> = {
|
|
21
|
-
head?: HSHtml;
|
|
22
|
-
siteConfig: SiteConfig;
|
|
23
|
-
page: PageRenderView;
|
|
24
|
-
slots: TemplateSlotsFrom<S>;
|
|
25
|
-
};
|
|
26
|
-
/** Widened render signature stored on descriptors at runtime. */
|
|
27
|
-
export type TemplateRenderFn = (ctx: {
|
|
28
|
-
head?: HSHtml;
|
|
29
|
-
siteConfig: SiteConfig;
|
|
30
|
-
page: PageRenderView;
|
|
31
|
-
slots: Record<string, import("./slot-handle.js").Slot>;
|
|
32
|
-
}) => HSHtml;
|
|
33
|
-
export type TemplateDescriptor<Slots extends string = string, RequiredSlots extends Slots = never, Definitions extends readonly SlotDefinition[] = readonly SlotDefinition[]> = {
|
|
34
|
-
readonly __kind: "template";
|
|
35
|
-
siteConfig: SiteConfig;
|
|
36
|
-
formatPageTitle: (title: string) => string;
|
|
37
|
-
render: TemplateRenderFn;
|
|
38
|
-
slots: Record<Slots, SlotMeta>;
|
|
39
|
-
requiredSlots: readonly RequiredSlots[];
|
|
40
|
-
readonly __definitions?: Definitions;
|
|
41
|
-
};
|
|
42
|
-
export type SlotNamesFrom<S extends readonly SlotDefinition[]> = S[number]["name"];
|
|
43
|
-
export type RequiredSlotNamesFrom<S extends readonly SlotDefinition[]> = Extract<S[number], {
|
|
44
|
-
options: {
|
|
45
|
-
required: true;
|
|
46
|
-
};
|
|
47
|
-
} | {
|
|
48
|
-
options: {
|
|
49
|
-
primary: true;
|
|
50
|
-
};
|
|
51
|
-
}>["name"];
|
|
52
|
-
export declare function isTemplate(value: unknown): value is TemplateDescriptor;
|
|
2
|
+
import type { Stackbox as SB } from "./types.js";
|
|
3
|
+
export declare function isTemplate(value: unknown): value is SB.TemplateDescriptor;
|
|
53
4
|
export declare class TemplateBuildError extends Error {
|
|
54
5
|
constructor(message: string);
|
|
55
6
|
}
|
|
56
|
-
export declare function createTemplate<const S extends readonly SlotDefinition[]>(def: {
|
|
57
|
-
siteConfig: SiteConfig;
|
|
7
|
+
export declare function createTemplate<const S extends readonly SB.SlotDefinition[]>(def: {
|
|
8
|
+
siteConfig: SB.SiteConfig;
|
|
58
9
|
slots: S;
|
|
59
|
-
title?: (pageTitle: string, siteConfig: SiteConfig) => string;
|
|
60
|
-
render: (ctx: TemplateRenderContext<S>) => HSHtml;
|
|
61
|
-
}): TemplateDescriptor<SlotNamesFrom<S>, RequiredSlotNamesFrom<S>, S>;
|
|
62
|
-
export type { Slot, TemplateSlotsFrom } from "./slot-handle.js";
|
|
10
|
+
title?: (pageTitle: string, siteConfig: SB.SiteConfig) => string;
|
|
11
|
+
render: (ctx: SB.TemplateRenderContext<S>) => HSHtml;
|
|
12
|
+
}): SB.TemplateDescriptor<SB.SlotNamesFrom<S>, SB.RequiredSlotNamesFrom<S>, S>;
|
|
63
13
|
//# sourceMappingURL=templates.d.ts.map
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOtD,OAAO,KAAK,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAYzE;AAiBD,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAgED,wBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,cAAc,EAAE,EACzE,GAAG,EAAE;IACH,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,MAAM,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;CACtD,GACA,EAAE,CAAC,kBAAkB,CACtB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EACnB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAC3B,CAAC,CACF,CAmDA"}
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA+B,CAAC,MAAM,KAAK,UAAU;QACtD,YAAY,CAAE,KAA+B,CAAC,UAAU,CAAC;QACzD,OAAQ,KAA+B,CAAC,eAAe,KAAK,UAAU;QACtE,OAAQ,KAA+B,CAAC,MAAM,KAAK,UAAU;QAC7D,OAAQ,KAA+B,CAAC,KAAK,KAAK,QAAQ;QACzD,KAA+B,CAAC,KAAK,KAAK,IAAI;QAC/C,KAAK,CAAC,OAAO,CAAE,KAA+B,CAAC,aAAa,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAiB,EACjB,UAAyB;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;IAC7C,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC;AASD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,SAAS,uBAAuB,CAC9B,WAAyC;IAEzC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAAC,wCAAwC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;QACxC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,kBAAkB,CAC1B,2DAA2D,YAAY,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,SAA4B;IAE5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,kBAAkB,CAC1B,SAAS,IAAI,gCAAgC,IAAI,WAAW,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAsB;IAClC,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,qBAAqB;CAC7B,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,GAKC;IAMD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,kBAAkB,CAC1B,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK;QAC/B,CAAC,CAAC,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,KAAM,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC;QAC9D,CAAC,CAAC,CAAC,SAAiB,EAAE,EAAE,CACpB,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,cAAc,GAAG,MAAM,CAC3B,GAAG,CAAC,MAAM,CAAC;QACT,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;KACjB,CAAC,CACH,CAAC;IAEF,oBAAoB,CAClB,cAAc,EACd,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CACnC,CAAC;IAEF,MAAM,KAAK,GAAG,EAA8C,CAAC;IAC7D,MAAM,aAAa,GAAkC,EAAE,CAAC;IAExD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,IAA2B,CAAC,GAAG;YACzC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;QACF,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAmC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAmB;QAC3B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,eAAe;QACf,MAAM,EAAE,GAAG,CAAC,MAA6B;QACzC,KAAK;QACL,aAAa;QACb,aAAa,EAAE,GAAG,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC"}
|