@withl5e/l5e 0.2.2 → 0.2.4
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/dist/entry-server.js +175 -10
- package/dist/entry-server.js.map +1 -1
- package/dist/{generateMetadata-DLMaI0EO.js → generateMetadata-CIFVlViV.js} +4 -4
- package/dist/{generateMetadata-DLMaI0EO.js.map → generateMetadata-CIFVlViV.js.map} +1 -1
- package/dist/index-BlfNBupp.js +318 -0
- package/dist/index-BlfNBupp.js.map +1 -0
- package/dist/index.js +37 -36
- package/dist/index.js.map +1 -1
- package/dist/island/runtime.js +9 -8
- package/dist/island/runtime.js.map +1 -1
- package/dist/island.js +36 -23
- package/dist/island.js.map +1 -1
- package/dist/{jsx-runtime-DVQ9eOji.js → jsx-runtime-Bokflh8Q.js} +68 -55
- package/dist/jsx-runtime-Bokflh8Q.js.map +1 -0
- package/dist/jsx-runtime.js +12 -10
- package/dist/middleware.js +3 -5
- package/dist/render-DTXfJu0d.js +202 -0
- package/dist/render-DTXfJu0d.js.map +1 -0
- package/dist/seo.js +2 -2
- package/dist/server.js +250 -244
- package/dist/server.js.map +1 -1
- package/dist/vite-plugin.js +110 -108
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +20 -1
- package/src/core/entry-server.ts +83 -8
- package/src/core/index.ts +0 -2
- package/src/core/jsx-runtime.ts +33 -0
- package/src/core/render.ts +36 -0
- package/src/core/request.ts +11 -10
- package/src/core/server.ts +23 -9
- package/src/core/vite-plugin.ts +25 -0
- package/src/island/ClientIsland.ts +36 -1
- package/src/island/runtime.ts +10 -3
- package/src/island/types.ts +1 -0
- package/src/middleware/index.ts +0 -48
- package/dist/entry-server-DJzzhCmz.js +0 -224
- package/dist/entry-server-DJzzhCmz.js.map +0 -1
- package/dist/index-BIt7MJT9.js +0 -163
- package/dist/index-BIt7MJT9.js.map +0 -1
- package/dist/jsx-runtime-DVQ9eOji.js.map +0 -1
package/dist/island.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"island.js","sources":["../src/island/ClientIsland.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"island.js","sources":["../src/island/ClientIsland.ts"],"sourcesContent":["import {\n jsxFactory,\n registerIsland,\n registerSsrIsland,\n type JSXChild,\n type JSXNode,\n} from '../core/jsx-runtime';\n\n/**\n * Derive component name from `from` path.\n * \"./react/Counter\" → \"Counter\"\n * \"~/features/newsfeed/react/NewsfeedApp\" → \"NewsfeedApp\"\n */\nfunction deriveComponentName(from: string): string {\n const segments = from.split('/');\n let filename = segments[segments.length - 1];\n filename = filename.replace(/\\.(tsx?|jsx?)$/, '');\n return filename;\n}\nexport type MountStrategy = 'load' | 'idle' | 'visible' | 'media' | 'none';\nexport interface ClientIslandProps {\n from: string;\n props?: Record<string, any>;\n mount?: MountStrategy | string;\n mountOpts?: string;\n class?: string;\n id?: string;\n children?: JSXChild | JSXChild[];\n\n /**\n * Opt-in: server-render the component into the placeholder and hydrate on the\n * client (instead of the default client-only mount). Component must be\n * SSR-safe (no top-level browser access) and props must be JSON-serializable.\n */\n ssr?: boolean;\n\n /** INTERNAL — injected by vite-plugin. Format: \"[name]_[hash]\" */\n __key?: string;\n /** INTERNAL — injected by vite-plugin. Manifest-compatible source path with extension */\n __src?: string;\n}\n\nexport function ClientIsland(attrs: ClientIslandProps): JSXNode {\n const {\n from,\n props = {},\n mount = 'load',\n mountOpts,\n class: className,\n id,\n children,\n ssr,\n __key,\n __src,\n } = attrs;\n\n const componentName = deriveComponentName(from);\n\n // Register island in render context (like useClientJs)\n // server.ts will use this to generate per-page window.__L5E_ISLANDS__\n // (needed for BOTH client-only mount AND ssr hydration — the client still\n // loads the component chunk via this registry).\n if (__key && __src) {\n registerIsland(__key, __src, componentName);\n }\n\n const dataAttrs: Record<string, string> = {\n 'data-island': __key || 'unresolved',\n 'data-island-name': componentName,\n 'data-island-props': JSON.stringify(props),\n 'data-island-mount': mount,\n };\n\n if (mountOpts) {\n dataAttrs['data-island-opts'] = mountOpts;\n }\n\n // SSR opt-in: register a pending server render and embed a unique token as the\n // placeholder body. entry-server replaces the token with renderToString() output\n // after the synchronous render pass, then normalizes data-island-ssr to \"1\".\n // The attribute value holds the token so the post-pass can target this exact\n // island (and strip the attribute on render failure → clean client-only fallback).\n if (ssr && __src) {\n const token = registerSsrIsland(__src, componentName, props);\n if (token) {\n return jsxFactory('div', {\n ...dataAttrs,\n 'data-island-ssr': token,\n ...(id ? { id } : {}),\n class: className ? `l5e-island ${className}` : 'l5e-island',\n // Raw token comment as body; replaced with SSR HTML in entry-server.\n setHtml: `<!--${token}-->`,\n });\n }\n }\n\n return jsxFactory(\n 'div',\n {\n ...dataAttrs,\n ...(id ? { id } : {}),\n class: className ? `l5e-island ${className}` : 'l5e-island',\n },\n children,\n );\n}\n"],"names":["deriveComponentName","from","segments","filename","ClientIsland","attrs","props","mount","mountOpts","className","id","children","ssr","__key","__src","componentName","registerIsland","dataAttrs","token","registerSsrIsland","jsxFactory"],"mappings":";AAaA,SAASA,EAAoBC,GAAsB;AACjD,QAAMC,IAAWD,EAAK,MAAM,GAAG;AAC/B,MAAIE,IAAWD,EAASA,EAAS,SAAS,CAAC;AAC3C,SAAAC,IAAWA,EAAS,QAAQ,kBAAkB,EAAE,GACzCA;AACT;AAwBO,SAASC,EAAaC,GAAmC;AAC9D,QAAM;AAAA,IACJ,MAAAJ;AAAA,IACA,OAAAK,IAAQ,CAAA;AAAA,IACR,OAAAC,IAAQ;AAAA,IACR,WAAAC;AAAA,IACA,OAAOC;AAAA,IACP,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,KAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,EAAA,IACET,GAEEU,IAAgBf,EAAoBC,CAAI;AAM9C,EAAIY,KAASC,KACXE,EAAeH,GAAOC,GAAOC,CAAa;AAG5C,QAAME,IAAoC;AAAA,IACxC,eAAeJ,KAAS;AAAA,IACxB,oBAAoBE;AAAA,IACpB,qBAAqB,KAAK,UAAUT,CAAK;AAAA,IACzC,qBAAqBC;AAAA,EAAA;AAYvB,MATIC,MACFS,EAAU,kBAAkB,IAAIT,IAQ9BI,KAAOE,GAAO;AAChB,UAAMI,IAAQC,EAAkBL,GAAOC,GAAeT,CAAK;AAC3D,QAAIY;AACF,aAAOE,EAAW,OAAO;AAAA,QACvB,GAAGH;AAAA,QACH,mBAAmBC;AAAA,QACnB,GAAIR,IAAK,EAAE,IAAAA,EAAA,IAAO,CAAA;AAAA,QAClB,OAAOD,IAAY,cAAcA,CAAS,KAAK;AAAA;AAAA,QAE/C,SAAS,OAAOS,CAAK;AAAA,MAAA,CACtB;AAAA,EAEL;AAEA,SAAOE;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAGH;AAAA,MACH,GAAIP,IAAK,EAAE,IAAAA,EAAA,IAAO,CAAA;AAAA,MAClB,OAAOD,IAAY,cAAcA,CAAS,KAAK;AAAA,IAAA;AAAA,IAEjDE;AAAA,EAAA;AAEJ;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AsyncLocalStorage as a } from "async_hooks";
|
|
2
|
-
const
|
|
2
|
+
const i = {
|
|
3
3
|
CRITICAL: 0,
|
|
4
4
|
// charset, viewport - must be first
|
|
5
5
|
HIGH: 10,
|
|
@@ -102,12 +102,13 @@ function w({
|
|
|
102
102
|
}) {
|
|
103
103
|
return e.setHtml !== void 0 ? { [c]: !0, content: e.setHtml?.toString() || "" } : t;
|
|
104
104
|
}
|
|
105
|
-
const
|
|
105
|
+
const s = new a();
|
|
106
106
|
function u(t) {
|
|
107
107
|
return {
|
|
108
108
|
clientJsRegistry: [],
|
|
109
109
|
cssRegistry: [],
|
|
110
110
|
islandRegistry: [],
|
|
111
|
+
ssrIslands: [],
|
|
111
112
|
cacheTags: /* @__PURE__ */ new Set(),
|
|
112
113
|
headRegistry: [],
|
|
113
114
|
metadataStack: [],
|
|
@@ -117,91 +118,101 @@ function u(t) {
|
|
|
117
118
|
}
|
|
118
119
|
function y(t) {
|
|
119
120
|
if (typeof t == "string" && t.length > 0) {
|
|
120
|
-
const e =
|
|
121
|
+
const e = s.getStore();
|
|
121
122
|
e && e.clientJsRegistry.push({ path: t, from: "Unknown" });
|
|
122
123
|
}
|
|
123
124
|
return "";
|
|
124
125
|
}
|
|
125
126
|
function S(t, e, o) {
|
|
126
|
-
const
|
|
127
|
-
|
|
127
|
+
const r = s.getStore();
|
|
128
|
+
r && (r.islandRegistry.some((n) => n.key === t) || r.islandRegistry.push({ key: t, src: e, name: o }));
|
|
128
129
|
}
|
|
129
130
|
function v() {
|
|
130
|
-
const t =
|
|
131
|
+
const t = s.getStore();
|
|
131
132
|
return t ? t.islandRegistry.slice() : [];
|
|
132
133
|
}
|
|
133
|
-
function L(t) {
|
|
134
|
+
function L(t, e, o) {
|
|
135
|
+
const r = s.getStore();
|
|
136
|
+
if (!r) return "";
|
|
137
|
+
const n = `__L5E_SSR_${r.ssrIslands.length}__`;
|
|
138
|
+
return r.ssrIslands.push({ token: n, src: t, name: e, props: o }), n;
|
|
139
|
+
}
|
|
140
|
+
function R() {
|
|
141
|
+
const t = s.getStore();
|
|
142
|
+
return t ? t.ssrIslands.slice() : [];
|
|
143
|
+
}
|
|
144
|
+
function k(t) {
|
|
134
145
|
if (typeof t == "string" && t.length > 0) {
|
|
135
|
-
const e =
|
|
146
|
+
const e = s.getStore();
|
|
136
147
|
e && e.cssRegistry.push({ path: t, from: "Unknown" });
|
|
137
148
|
}
|
|
138
149
|
return "";
|
|
139
150
|
}
|
|
140
|
-
function
|
|
141
|
-
const
|
|
142
|
-
return o && (
|
|
151
|
+
function b(t, e, o) {
|
|
152
|
+
const r = u(e);
|
|
153
|
+
return o && (r.viewName = o), s.run(r, () => Promise.resolve(t()));
|
|
143
154
|
}
|
|
144
|
-
function
|
|
145
|
-
const e =
|
|
155
|
+
function h(t) {
|
|
156
|
+
const e = s.getStore();
|
|
146
157
|
e && (e.viewName = t);
|
|
147
158
|
}
|
|
148
|
-
function
|
|
149
|
-
const t =
|
|
159
|
+
function x() {
|
|
160
|
+
const t = s.getStore();
|
|
150
161
|
return t ? t.clientJsRegistry.slice() : [];
|
|
151
162
|
}
|
|
152
|
-
function
|
|
153
|
-
const t =
|
|
163
|
+
function C() {
|
|
164
|
+
const t = s.getStore();
|
|
154
165
|
return t ? Array.from(t.cacheTags) : [];
|
|
155
166
|
}
|
|
156
167
|
function p(t) {
|
|
157
|
-
const e =
|
|
168
|
+
const e = s.getStore();
|
|
158
169
|
e && (Array.isArray(t) ? t.forEach((o) => {
|
|
159
170
|
typeof o == "string" && o.trim() && e.cacheTags.add(o.trim());
|
|
160
|
-
}) : typeof t == "string" && t.trim() ? e.cacheTags.add(t.trim()) : typeof t == "object" && t !== null && Object.entries(t).forEach(([o,
|
|
161
|
-
|
|
171
|
+
}) : typeof t == "string" && t.trim() ? e.cacheTags.add(t.trim()) : typeof t == "object" && t !== null && Object.entries(t).forEach(([o, r]) => {
|
|
172
|
+
r && typeof o == "string" && o.trim() && e.cacheTags.add(o.trim());
|
|
162
173
|
}));
|
|
163
174
|
}
|
|
164
|
-
function
|
|
165
|
-
const t =
|
|
175
|
+
function G() {
|
|
176
|
+
const t = s.getStore();
|
|
166
177
|
return t ? t.cssRegistry.slice() : [];
|
|
167
178
|
}
|
|
168
|
-
function
|
|
179
|
+
function l({
|
|
169
180
|
children: t,
|
|
170
|
-
priority: e =
|
|
181
|
+
priority: e = i.LOW
|
|
171
182
|
// Default priority
|
|
172
183
|
}) {
|
|
173
|
-
const o =
|
|
184
|
+
const o = s.getStore();
|
|
174
185
|
return o && t && (o.headRegistry.push({
|
|
175
186
|
content: t,
|
|
176
|
-
priority: typeof e == "number" ? e :
|
|
187
|
+
priority: typeof e == "number" ? e : i.LOW,
|
|
177
188
|
source: "manual"
|
|
178
|
-
}), o.headRegistry.sort((
|
|
189
|
+
}), o.headRegistry.sort((r, n) => r.priority - n.priority)), null;
|
|
179
190
|
}
|
|
180
|
-
function
|
|
181
|
-
const t =
|
|
191
|
+
function I() {
|
|
192
|
+
const t = s.getStore();
|
|
182
193
|
return t ? t.headRegistry.map((e) => e.content) : [];
|
|
183
194
|
}
|
|
184
195
|
function T(t) {
|
|
185
|
-
const e =
|
|
196
|
+
const e = s.getStore();
|
|
186
197
|
e && t && e.metadataStack.push(t);
|
|
187
198
|
}
|
|
188
199
|
function E() {
|
|
189
|
-
const t =
|
|
200
|
+
const t = s.getStore();
|
|
190
201
|
return !t || t.metadataStack.length === 0 ? null : t.metadataStack.reduce(
|
|
191
202
|
(e, o) => f(e, o),
|
|
192
203
|
null
|
|
193
204
|
);
|
|
194
205
|
}
|
|
195
206
|
function D(t) {
|
|
196
|
-
const e =
|
|
207
|
+
const e = s.getStore();
|
|
197
208
|
e && (Array.isArray(t) ? e.schemaRegistry.push(...t) : e.schemaRegistry.push(t));
|
|
198
209
|
}
|
|
199
210
|
function A() {
|
|
200
|
-
const t =
|
|
211
|
+
const t = s.getStore();
|
|
201
212
|
return t ? t.schemaRegistry.slice() : [];
|
|
202
213
|
}
|
|
203
|
-
function
|
|
204
|
-
const t =
|
|
214
|
+
function d() {
|
|
215
|
+
const t = s.getStore();
|
|
205
216
|
if (!t)
|
|
206
217
|
throw new Error("useRequest called outside of render context");
|
|
207
218
|
return {
|
|
@@ -217,41 +228,43 @@ function H() {
|
|
|
217
228
|
getCacheTags: () => Array.from(t.cacheTags)
|
|
218
229
|
};
|
|
219
230
|
}
|
|
220
|
-
function
|
|
231
|
+
function H(t) {
|
|
221
232
|
return t !== null && typeof t == "object" && "type" in t && "props" in t && "children" in t && (typeof t.type == "string" || typeof t.type == "function");
|
|
222
233
|
}
|
|
223
234
|
function j(t, e, ...o) {
|
|
224
|
-
const
|
|
235
|
+
const r = { ...t.props, ...e }, n = o.length > 0 ? o.flat() : t.children;
|
|
225
236
|
return {
|
|
226
237
|
type: t.type,
|
|
227
|
-
props:
|
|
228
|
-
children:
|
|
238
|
+
props: r,
|
|
239
|
+
children: n
|
|
229
240
|
};
|
|
230
241
|
}
|
|
231
242
|
export {
|
|
232
243
|
w as F,
|
|
233
|
-
|
|
244
|
+
i as H,
|
|
234
245
|
c as R,
|
|
235
|
-
|
|
246
|
+
l as a,
|
|
236
247
|
p as b,
|
|
237
248
|
j as c,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
249
|
+
x as d,
|
|
250
|
+
G as e,
|
|
251
|
+
I as f,
|
|
252
|
+
C as g,
|
|
242
253
|
v as h,
|
|
243
254
|
A as i,
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
255
|
+
R as j,
|
|
256
|
+
H as k,
|
|
257
|
+
m as l,
|
|
247
258
|
f as m,
|
|
248
|
-
|
|
249
|
-
|
|
259
|
+
D as n,
|
|
260
|
+
L as o,
|
|
250
261
|
T as p,
|
|
251
|
-
|
|
262
|
+
E as q,
|
|
252
263
|
S as r,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
y as u
|
|
264
|
+
b as s,
|
|
265
|
+
h as t,
|
|
266
|
+
y as u,
|
|
267
|
+
k as v,
|
|
268
|
+
d as w
|
|
256
269
|
};
|
|
257
|
-
//# sourceMappingURL=jsx-runtime-
|
|
270
|
+
//# sourceMappingURL=jsx-runtime-Bokflh8Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime-Bokflh8Q.js","sources":["../src/core/head-priority.ts","../src/seo/mergeMetadata.ts","../src/core/const.ts","../src/core/jsx-runtime.ts"],"sourcesContent":["/**\n * Priority constants for Head component rendering order\n * Lower numbers render first (higher priority)\n */\nexport const HEAD_PRIORITY = {\n CRITICAL: 0, // charset, viewport - must be first\n HIGH: 10, // title, description, canonical\n MEDIUM: 50, // meta tags, robots\n SEO: 80, // OpenGraph, Twitter\n LOW: 100, // Custom head elements\n SCRIPTS: 200, // Scripts\n STYLES: 300, // Styles\n} as const;\n\nexport type HeadPriority = (typeof HEAD_PRIORITY)[keyof typeof HEAD_PRIORITY] | number;\n","import type { Metadata } from './types';\n\n/**\n * Merges parent and child metadata objects\n * Follows Next.js shallow merge pattern with deep merge for nested objects\n *\n * @param parent - Parent metadata (from layout/global loader)\n * @param child - Child metadata (from page/view loader)\n * @returns Merged metadata object\n */\nexport function mergeMetadata(\n parent: Metadata | null | undefined,\n child: Metadata | null | undefined,\n): Metadata {\n // If no parent, return child (or empty object)\n if (!parent) {\n return child || {};\n }\n\n // If no child, return parent\n if (!child) {\n return parent;\n }\n\n // Shallow merge base properties (child overrides parent)\n const merged: Metadata = {\n ...parent,\n ...child,\n };\n\n // Deep merge for nested objects\n // OpenGraph: merge nested properties\n if (child.openGraph || parent.openGraph) {\n if (child.openGraph && parent.openGraph) {\n merged.openGraph = {\n ...parent.openGraph,\n ...child.openGraph,\n // Deep merge for nested arrays/objects in openGraph\n images: child.openGraph.images ?? parent.openGraph.images,\n videos: child.openGraph.videos ?? parent.openGraph.videos,\n audio: child.openGraph.audio ?? parent.openGraph.audio,\n alternateLocale: child.openGraph.alternateLocale ?? parent.openGraph.alternateLocale,\n authors: child.openGraph.authors ?? parent.openGraph.authors,\n tags: child.openGraph.tags ?? parent.openGraph.tags,\n };\n } else {\n merged.openGraph = child.openGraph || parent.openGraph;\n }\n }\n\n // Twitter: merge nested properties\n if (child.twitter || parent.twitter) {\n if (child.twitter && parent.twitter) {\n merged.twitter = {\n ...parent.twitter,\n ...child.twitter,\n // Deep merge for nested objects\n images: child.twitter.images ?? parent.twitter.images,\n app: child.twitter.app\n ? {\n ...parent.twitter.app,\n ...child.twitter.app,\n id: {\n ...parent.twitter.app?.id,\n ...child.twitter.app.id,\n },\n url: {\n ...parent.twitter.app?.url,\n ...child.twitter.app.url,\n },\n }\n : parent.twitter.app,\n };\n } else {\n merged.twitter = child.twitter || parent.twitter;\n }\n }\n\n // Icons: merge nested properties\n if (child.icons || parent.icons) {\n if (child.icons && parent.icons) {\n merged.icons = {\n icon: child.icons.icon ?? parent.icons.icon,\n shortcut: child.icons.shortcut ?? parent.icons.shortcut,\n apple: child.icons.apple ?? parent.icons.apple,\n other: child.icons.other ?? parent.icons.other,\n };\n } else {\n merged.icons = child.icons || parent.icons;\n }\n }\n\n // Verification: merge nested properties\n if (child.verification || parent.verification) {\n if (child.verification && parent.verification) {\n merged.verification = {\n ...parent.verification,\n ...child.verification,\n // Deep merge for other verification tags\n other: child.verification.other\n ? {\n ...parent.verification.other,\n ...child.verification.other,\n }\n : parent.verification.other,\n me: child.verification.me ?? parent.verification.me,\n };\n } else {\n merged.verification = child.verification || parent.verification;\n }\n }\n\n // AppLinks: merge nested properties\n if (child.appLinks || parent.appLinks) {\n if (child.appLinks && parent.appLinks) {\n merged.appLinks = {\n ios: child.appLinks.ios\n ? {\n ...parent.appLinks.ios,\n ...child.appLinks.ios,\n }\n : parent.appLinks.ios,\n android: child.appLinks.android\n ? {\n ...parent.appLinks.android,\n ...child.appLinks.android,\n }\n : parent.appLinks.android,\n web: child.appLinks.web\n ? {\n ...parent.appLinks.web,\n ...child.appLinks.web,\n }\n : parent.appLinks.web,\n };\n } else {\n merged.appLinks = child.appLinks || parent.appLinks;\n }\n }\n\n // FormatDetection: merge nested properties\n if (child.formatDetection || parent.formatDetection) {\n if (child.formatDetection && parent.formatDetection) {\n merged.formatDetection = {\n ...parent.formatDetection,\n ...child.formatDetection,\n };\n } else {\n merged.formatDetection = child.formatDetection || parent.formatDetection;\n }\n }\n\n // Viewport: merge if both are objects\n if (child.viewport && parent.viewport) {\n if (typeof child.viewport === 'object' && typeof parent.viewport === 'object') {\n merged.viewport = {\n ...parent.viewport,\n ...child.viewport,\n } as Metadata['viewport'];\n } else {\n // If either is string, child overrides\n merged.viewport = child.viewport;\n }\n }\n\n // Robots: merge if both are objects\n if (child.robots && parent.robots) {\n if (typeof child.robots === 'object' && typeof parent.robots === 'object') {\n merged.robots = {\n ...parent.robots,\n ...child.robots,\n } as Metadata['robots'];\n } else {\n // If either is string, child overrides\n merged.robots = child.robots;\n }\n }\n\n // Array fields: child overrides parent (shallow merge behavior)\n // These are already handled by spread operator above\n // But we explicitly handle them for clarity:\n merged.keywords = child.keywords ?? parent.keywords;\n merged.themeColor = child.themeColor ?? parent.themeColor;\n merged.archives = child.archives ?? parent.archives;\n merged.assets = child.assets ?? parent.assets;\n\n // Other: merge objects\n if (child.other || parent.other) {\n if (child.other && parent.other) {\n merged.other = {\n ...parent.other,\n ...child.other,\n };\n } else {\n merged.other = child.other || parent.other;\n }\n }\n\n return merged;\n}\n","// Marker object để đánh dấu raw HTML không escape\nexport const RAW_HTML_MARKER = Symbol('rawHtml');\n","import { mergeMetadata } from '../seo/mergeMetadata';\nimport type { Metadata } from '../seo/types';\nimport { RAW_HTML_MARKER } from './const';\nimport { RequestInfo } from './entry-server';\nimport { HEAD_PRIORITY, type HeadPriority } from './head-priority';\n\nexport type JSXChild =\n | string\n | number\n | boolean\n | null\n | undefined\n | JSXNode\n | JSXChild[]\n | RawHtmlObject\n | HtmlContentObject;\n\nexport type RawHtmlObject = {\n [RAW_HTML_MARKER]: true;\n content: string;\n};\n\nexport type HtmlContentObject = {\n htmlContent: string;\n};\n\nexport type RenderedNode = {\n string: string;\n};\n\nexport type JSXNode = {\n type: string | ((props: any) => JSXChild);\n props: Record<string, any>;\n children: JSXChild[];\n};\n\nexport function jsxFactory(type: any, props: any, ...children: any): JSXNode {\n return { type, props: props || {}, children: children.flat() };\n}\n\nexport function Fragment({\n children,\n ...props\n}: { children?: JSXChild; setHtml?: unknown } & Record<string, any>): JSXChild {\n // Hỗ trợ setHtml cho Fragment\n if (props.setHtml !== undefined) {\n // Trả về object đặc biệt để không bị escape\n return { [RAW_HTML_MARKER]: true, content: props.setHtml?.toString() || '' };\n }\n return children;\n}\n\n// AsyncLocalStorage for render context (request-level)\nimport { AsyncLocalStorage } from 'async_hooks';\n\ninterface HeadEntry {\n content: JSXChild;\n priority: number; // Số càng nhỏ, render càng sớm\n source?: string; // Để debug (ví dụ: 'layout', 'page', 'seo')\n}\n\ninterface IslandEntry {\n key: string; // \"Counter_a3f2\" — registry key\n src: string; // \"src/views/.../Counter.tsx\" — manifest-compatible path\n name: string; // \"Counter\" — export name\n}\n\n/**\n * A pending server-side render request for an `ssr` island.\n * Collected during the synchronous render pass and filled in afterwards by\n * entry-server (which can `await import()` the component + call renderToString).\n */\ninterface SsrIslandEntry {\n token: string; // unique placeholder token embedded in the HTML body\n src: string; // \"src/views/.../Counter.tsx\" — manifest-compatible path (no leading slash)\n name: string; // \"Counter\" — export name\n props: Record<string, any>;\n}\n\ninterface RenderContext {\n clientJsRegistry: Array<{ path: string; from: string }>;\n cssRegistry: Array<{ path: string; from: string }>;\n islandRegistry: IslandEntry[];\n ssrIslands: SsrIslandEntry[];\n cacheTags: Set<string>;\n headRegistry: HeadEntry[]; // Thay vì JSXChild[]\n metadataStack: Metadata[]; // Stack để track metadata hierarchy\n schemaRegistry: Array<Record<string, any>>; // Schema.org structured data từ loaders\n request: RequestInfo;\n viewName?: string; // View name from route handler\n}\n\nconst renderStore = new AsyncLocalStorage<RenderContext>();\n\n// Create context for each request\nfunction createRequestContext(requestInfo: RequestInfo): RenderContext {\n return {\n clientJsRegistry: [],\n cssRegistry: [],\n islandRegistry: [],\n ssrIslands: [],\n cacheTags: new Set(),\n headRegistry: [],\n metadataStack: [],\n schemaRegistry: [],\n request: requestInfo,\n };\n}\n\nexport function useClientJs(path: string): string {\n if (typeof path === 'string' && path.length > 0) {\n const renderContext = renderStore.getStore();\n if (renderContext) {\n renderContext.clientJsRegistry.push({ path, from: 'Unknown' });\n }\n }\n return '';\n}\n\nexport function registerIsland(key: string, src: string, name: string): void {\n const renderContext = renderStore.getStore();\n if (renderContext) {\n // Dedupe by key\n if (!renderContext.islandRegistry.some((e) => e.key === key)) {\n renderContext.islandRegistry.push({ key, src, name });\n }\n }\n}\n\nexport function getIslandEntries(): IslandEntry[] {\n const context = renderStore.getStore();\n if (!context) return [];\n return context.islandRegistry.slice();\n}\n\n/**\n * Register a pending SSR island render. Returns a unique placeholder token that\n * the caller embeds (as raw HTML) in the island's body. entry-server replaces\n * the token with the server-rendered component HTML after the sync render pass.\n */\nexport function registerSsrIsland(src: string, name: string, props: Record<string, any>): string {\n const renderContext = renderStore.getStore();\n if (!renderContext) return '';\n const token = `__L5E_SSR_${renderContext.ssrIslands.length}__`;\n renderContext.ssrIslands.push({ token, src, name, props });\n return token;\n}\n\nexport function getSsrIslands(): SsrIslandEntry[] {\n const context = renderStore.getStore();\n if (!context) return [];\n return context.ssrIslands.slice();\n}\n\nexport function useCss(path: string): string {\n if (typeof path === 'string' && path.length > 0) {\n const renderContext = renderStore.getStore();\n if (renderContext) {\n renderContext.cssRegistry.push({ path, from: 'Unknown' });\n }\n }\n return '';\n}\n\n// Wrapper to run render in async context\nexport function runInRenderContext<T>(\n renderFn: () => T | Promise<T>,\n requestInfo: RequestInfo,\n viewName?: string,\n): Promise<T> {\n const context = createRequestContext(requestInfo);\n if (viewName) {\n context.viewName = viewName;\n }\n return renderStore.run(context, () => Promise.resolve(renderFn()));\n}\n\n// Set view name in current render context\nexport function setViewName(viewName: string): void {\n const context = renderStore.getStore();\n if (context) {\n context.viewName = viewName;\n }\n}\n\n// Get entries from current context\nexport function getClientJsEntries(): Array<{ path: string; from: string }> {\n const context = renderStore.getStore();\n if (!context) return [];\n return context.clientJsRegistry.slice();\n}\n\n// Get cache tags from current context\nexport function getCacheTags(): string[] {\n const context = renderStore.getStore();\n if (!context) return [];\n return Array.from(context.cacheTags);\n}\n\n// Add cache tags to current context\nexport function addCacheTag(tag: string | string[] | Record<string, boolean>): void {\n const context = renderStore.getStore();\n if (!context) return;\n\n if (Array.isArray(tag)) {\n tag.forEach((t) => {\n if (typeof t === 'string' && t.trim()) {\n context.cacheTags.add(t.trim());\n }\n });\n } else if (typeof tag === 'string' && tag.trim()) {\n context.cacheTags.add(tag.trim());\n } else if (typeof tag === 'object' && tag !== null) {\n Object.entries(tag).forEach(([key, value]) => {\n if (value && typeof key === 'string' && key.trim()) {\n context.cacheTags.add(key.trim());\n }\n });\n }\n}\n\n// Get CSS entries from current context\nexport function getCssEntries(): Array<{ path: string; from: string }> {\n const context = renderStore.getStore();\n if (!context) return [];\n return context.cssRegistry.slice();\n}\n\n// Head component to collect head elements with priority support\nexport function Head({\n children,\n priority = HEAD_PRIORITY.LOW, // Default priority\n}: {\n children?: JSXChild;\n priority?: HeadPriority;\n}): null {\n const renderContext = renderStore.getStore();\n if (renderContext && children) {\n renderContext.headRegistry.push({\n content: children,\n priority: typeof priority === 'number' ? priority : HEAD_PRIORITY.LOW,\n source: 'manual',\n });\n\n // Sort theo priority sau mỗi lần push để đảm bảo thứ tự đúng\n renderContext.headRegistry.sort((a, b) => a.priority - b.priority);\n }\n return null;\n}\n\n// Get head content from current context (already sorted by priority)\nexport function getHeadContent(): JSXChild[] {\n const context = renderStore.getStore();\n if (!context) return [];\n // Đã được sort trong Head component, chỉ cần map để lấy content\n return context.headRegistry.map((entry) => entry.content);\n}\n\n// Push metadata to stack (for hierarchical metadata support)\nexport function pushMetadata(metadata: Metadata): void {\n const context = renderStore.getStore();\n if (context && metadata) {\n context.metadataStack.push(metadata);\n }\n}\n\n// Resolve and merge all metadata from stack (root → leaf)\nexport function resolveMetadata(): Metadata | null {\n const context = renderStore.getStore();\n if (!context || context.metadataStack.length === 0) {\n return null;\n }\n\n // Merge from root → leaf (reduce left to right)\n return context.metadataStack.reduce(\n (acc, current) => mergeMetadata(acc, current),\n null as Metadata | null,\n );\n}\n\n// Push schema to registry (for schema markup from loaders)\n// Accepts schema-dts types (WithContext<T> or array of schemas)\nexport function pushSchema(schema: any | Array<any>): void {\n const context = renderStore.getStore();\n if (!context) return;\n\n if (Array.isArray(schema)) {\n context.schemaRegistry.push(...schema);\n } else {\n context.schemaRegistry.push(schema);\n }\n}\n\n// Get all schemas from registry\nexport function getSchemas(): Array<Record<string, any>> {\n const context = renderStore.getStore();\n if (!context) return [];\n return context.schemaRegistry.slice();\n}\n\n// Hook to get render request context\nexport function useRequest() {\n const context = renderStore.getStore();\n\n if (!context) {\n throw new Error('useRequest called outside of render context');\n }\n\n return {\n request: context.request,\n view: context.viewName,\n locals: (context.request.locals ?? {}) as Record<string, unknown>,\n params: (context.request.params ?? {}) as Record<string, any>,\n\n // Add cache tags\n addCacheTag: (tag: string | string[] | Record<string, boolean>) => {\n addCacheTag(tag);\n },\n\n // Get all cache tags\n getCacheTags: () => {\n return Array.from(context.cacheTags);\n },\n };\n}\n\n/**\n * Checks if a value is a valid JSX element (JSXNode)\n * Similar to React.isValidElement\n */\nexport function isValidElement(value: any): value is JSXNode {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'type' in value &&\n 'props' in value &&\n 'children' in value &&\n (typeof value.type === 'string' || typeof value.type === 'function')\n );\n}\n\n/**\n * Clones a JSX element with new props and/or children\n * Similar to React.cloneElement\n */\nexport function cloneElement(\n element: JSXNode,\n props?: Record<string, any>,\n ...children: JSXChild[]\n): JSXNode {\n const newProps = { ...element.props, ...props };\n const newChildren = children.length > 0 ? children.flat() : element.children;\n\n return {\n type: element.type,\n props: newProps,\n children: newChildren,\n };\n}\n"],"names":["HEAD_PRIORITY","mergeMetadata","parent","child","merged","RAW_HTML_MARKER","jsxFactory","type","props","children","Fragment","renderStore","AsyncLocalStorage","createRequestContext","requestInfo","useClientJs","path","renderContext","registerIsland","key","src","name","e","getIslandEntries","context","registerSsrIsland","token","getSsrIslands","useCss","runInRenderContext","renderFn","viewName","setViewName","getClientJsEntries","getCacheTags","addCacheTag","tag","t","value","getCssEntries","Head","priority","a","b","getHeadContent","entry","pushMetadata","metadata","resolveMetadata","acc","current","pushSchema","schema","getSchemas","useRequest","isValidElement","cloneElement","element","newProps","newChildren"],"mappings":";AAIO,MAAMA,IAAgB;AAAA,EAC3B,UAAU;AAAA;AAAA,EACV,MAAM;AAAA;AAAA,EACN,QAAQ;AAAA;AAAA,EACR,KAAK;AAAA;AAAA,EACL,KAAK;AAAA;AAAA,EACL,SAAS;AAAA;AAAA,EACT,QAAQ;AAAA;AACV;ACFO,SAASC,EACdC,GACAC,GACU;AAEV,MAAI,CAACD;AACH,WAAOC,KAAS,CAAA;AAIlB,MAAI,CAACA;AACH,WAAOD;AAIT,QAAME,IAAmB;AAAA,IACvB,GAAGF;AAAA,IACH,GAAGC;AAAA,EAAA;AAKL,UAAIA,EAAM,aAAaD,EAAO,eACxBC,EAAM,aAAaD,EAAO,YAC5BE,EAAO,YAAY;AAAA,IACjB,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA;AAAA,IAET,QAAQA,EAAM,UAAU,UAAUD,EAAO,UAAU;AAAA,IACnD,QAAQC,EAAM,UAAU,UAAUD,EAAO,UAAU;AAAA,IACnD,OAAOC,EAAM,UAAU,SAASD,EAAO,UAAU;AAAA,IACjD,iBAAiBC,EAAM,UAAU,mBAAmBD,EAAO,UAAU;AAAA,IACrE,SAASC,EAAM,UAAU,WAAWD,EAAO,UAAU;AAAA,IACrD,MAAMC,EAAM,UAAU,QAAQD,EAAO,UAAU;AAAA,EAAA,IAGjDE,EAAO,YAAYD,EAAM,aAAaD,EAAO,aAK7CC,EAAM,WAAWD,EAAO,aACtBC,EAAM,WAAWD,EAAO,UAC1BE,EAAO,UAAU;AAAA,IACf,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA;AAAA,IAET,QAAQA,EAAM,QAAQ,UAAUD,EAAO,QAAQ;AAAA,IAC/C,KAAKC,EAAM,QAAQ,MACf;AAAA,MACE,GAAGD,EAAO,QAAQ;AAAA,MAClB,GAAGC,EAAM,QAAQ;AAAA,MACjB,IAAI;AAAA,QACF,GAAGD,EAAO,QAAQ,KAAK;AAAA,QACvB,GAAGC,EAAM,QAAQ,IAAI;AAAA,MAAA;AAAA,MAEvB,KAAK;AAAA,QACH,GAAGD,EAAO,QAAQ,KAAK;AAAA,QACvB,GAAGC,EAAM,QAAQ,IAAI;AAAA,MAAA;AAAA,IACvB,IAEFD,EAAO,QAAQ;AAAA,EAAA,IAGrBE,EAAO,UAAUD,EAAM,WAAWD,EAAO,WAKzCC,EAAM,SAASD,EAAO,WACpBC,EAAM,SAASD,EAAO,QACxBE,EAAO,QAAQ;AAAA,IACb,MAAMD,EAAM,MAAM,QAAQD,EAAO,MAAM;AAAA,IACvC,UAAUC,EAAM,MAAM,YAAYD,EAAO,MAAM;AAAA,IAC/C,OAAOC,EAAM,MAAM,SAASD,EAAO,MAAM;AAAA,IACzC,OAAOC,EAAM,MAAM,SAASD,EAAO,MAAM;AAAA,EAAA,IAG3CE,EAAO,QAAQD,EAAM,SAASD,EAAO,SAKrCC,EAAM,gBAAgBD,EAAO,kBAC3BC,EAAM,gBAAgBD,EAAO,eAC/BE,EAAO,eAAe;AAAA,IACpB,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA;AAAA,IAET,OAAOA,EAAM,aAAa,QACtB;AAAA,MACE,GAAGD,EAAO,aAAa;AAAA,MACvB,GAAGC,EAAM,aAAa;AAAA,IAAA,IAExBD,EAAO,aAAa;AAAA,IACxB,IAAIC,EAAM,aAAa,MAAMD,EAAO,aAAa;AAAA,EAAA,IAGnDE,EAAO,eAAeD,EAAM,gBAAgBD,EAAO,gBAKnDC,EAAM,YAAYD,EAAO,cACvBC,EAAM,YAAYD,EAAO,WAC3BE,EAAO,WAAW;AAAA,IAChB,KAAKD,EAAM,SAAS,MAChB;AAAA,MACE,GAAGD,EAAO,SAAS;AAAA,MACnB,GAAGC,EAAM,SAAS;AAAA,IAAA,IAEpBD,EAAO,SAAS;AAAA,IACpB,SAASC,EAAM,SAAS,UACpB;AAAA,MACE,GAAGD,EAAO,SAAS;AAAA,MACnB,GAAGC,EAAM,SAAS;AAAA,IAAA,IAEpBD,EAAO,SAAS;AAAA,IACpB,KAAKC,EAAM,SAAS,MAChB;AAAA,MACE,GAAGD,EAAO,SAAS;AAAA,MACnB,GAAGC,EAAM,SAAS;AAAA,IAAA,IAEpBD,EAAO,SAAS;AAAA,EAAA,IAGtBE,EAAO,WAAWD,EAAM,YAAYD,EAAO,YAK3CC,EAAM,mBAAmBD,EAAO,qBAC9BC,EAAM,mBAAmBD,EAAO,kBAClCE,EAAO,kBAAkB;AAAA,IACvB,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA,EAAA,IAGXC,EAAO,kBAAkBD,EAAM,mBAAmBD,EAAO,kBAKzDC,EAAM,YAAYD,EAAO,aACvB,OAAOC,EAAM,YAAa,YAAY,OAAOD,EAAO,YAAa,WACnEE,EAAO,WAAW;AAAA,IAChB,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA,EAAA,IAIXC,EAAO,WAAWD,EAAM,WAKxBA,EAAM,UAAUD,EAAO,WACrB,OAAOC,EAAM,UAAW,YAAY,OAAOD,EAAO,UAAW,WAC/DE,EAAO,SAAS;AAAA,IACd,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA,EAAA,IAIXC,EAAO,SAASD,EAAM,SAO1BC,EAAO,WAAWD,EAAM,YAAYD,EAAO,UAC3CE,EAAO,aAAaD,EAAM,cAAcD,EAAO,YAC/CE,EAAO,WAAWD,EAAM,YAAYD,EAAO,UAC3CE,EAAO,SAASD,EAAM,UAAUD,EAAO,SAGnCC,EAAM,SAASD,EAAO,WACpBC,EAAM,SAASD,EAAO,QACxBE,EAAO,QAAQ;AAAA,IACb,GAAGF,EAAO;AAAA,IACV,GAAGC,EAAM;AAAA,EAAA,IAGXC,EAAO,QAAQD,EAAM,SAASD,EAAO,QAIlCE;AACT;ACtMO,MAAMC,2BAAyB,SAAS;ACmCxC,SAASC,EAAWC,GAAWC,MAAeC,GAAwB;AAC3E,SAAO,EAAE,MAAAF,GAAM,OAAOC,KAAS,CAAA,GAAI,UAAUC,EAAS,OAAK;AAC7D;AAEO,SAASC,EAAS;AAAA,EACvB,UAAAD;AAAA,EACA,GAAGD;AACL,GAA+E;AAE7E,SAAIA,EAAM,YAAY,SAEb,EAAE,CAACH,CAAe,GAAG,IAAM,SAASG,EAAM,SAAS,SAAA,KAAc,GAAA,IAEnEC;AACT;AA0CA,MAAME,IAAc,IAAIC,EAAA;AAGxB,SAASC,EAAqBC,GAAyC;AACrE,SAAO;AAAA,IACL,kBAAkB,CAAA;AAAA,IAClB,aAAa,CAAA;AAAA,IACb,gBAAgB,CAAA;AAAA,IAChB,YAAY,CAAA;AAAA,IACZ,+BAAe,IAAA;AAAA,IACf,cAAc,CAAA;AAAA,IACd,eAAe,CAAA;AAAA,IACf,gBAAgB,CAAA;AAAA,IAChB,SAASA;AAAA,EAAA;AAEb;AAEO,SAASC,EAAYC,GAAsB;AAChD,MAAI,OAAOA,KAAS,YAAYA,EAAK,SAAS,GAAG;AAC/C,UAAMC,IAAgBN,EAAY,SAAA;AAClC,IAAIM,KACFA,EAAc,iBAAiB,KAAK,EAAE,MAAAD,GAAM,MAAM,WAAW;AAAA,EAEjE;AACA,SAAO;AACT;AAEO,SAASE,EAAeC,GAAaC,GAAaC,GAAoB;AAC3E,QAAMJ,IAAgBN,EAAY,SAAA;AAClC,EAAIM,MAEGA,EAAc,eAAe,KAAK,CAACK,MAAMA,EAAE,QAAQH,CAAG,KACzDF,EAAc,eAAe,KAAK,EAAE,KAAAE,GAAK,KAAAC,GAAK,MAAAC,GAAM;AAG1D;AAEO,SAASE,IAAkC;AAChD,QAAMC,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACEA,EAAQ,eAAe,MAAA,IADT,CAAA;AAEvB;AAOO,SAASC,EAAkBL,GAAaC,GAAcb,GAAoC;AAC/F,QAAMS,IAAgBN,EAAY,SAAA;AAClC,MAAI,CAACM,EAAe,QAAO;AAC3B,QAAMS,IAAQ,aAAaT,EAAc,WAAW,MAAM;AAC1D,SAAAA,EAAc,WAAW,KAAK,EAAE,OAAAS,GAAO,KAAAN,GAAK,MAAAC,GAAM,OAAAb,GAAO,GAClDkB;AACT;AAEO,SAASC,IAAkC;AAChD,QAAMH,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACEA,EAAQ,WAAW,MAAA,IADL,CAAA;AAEvB;AAEO,SAASI,EAAOZ,GAAsB;AAC3C,MAAI,OAAOA,KAAS,YAAYA,EAAK,SAAS,GAAG;AAC/C,UAAMC,IAAgBN,EAAY,SAAA;AAClC,IAAIM,KACFA,EAAc,YAAY,KAAK,EAAE,MAAAD,GAAM,MAAM,WAAW;AAAA,EAE5D;AACA,SAAO;AACT;AAGO,SAASa,EACdC,GACAhB,GACAiB,GACY;AACZ,QAAMP,IAAUX,EAAqBC,CAAW;AAChD,SAAIiB,MACFP,EAAQ,WAAWO,IAEdpB,EAAY,IAAIa,GAAS,MAAM,QAAQ,QAAQM,EAAA,CAAU,CAAC;AACnE;AAGO,SAASE,EAAYD,GAAwB;AAClD,QAAMP,IAAUb,EAAY,SAAA;AAC5B,EAAIa,MACFA,EAAQ,WAAWO;AAEvB;AAGO,SAASE,IAA4D;AAC1E,QAAMT,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACEA,EAAQ,iBAAiB,MAAA,IADX,CAAA;AAEvB;AAGO,SAASU,IAAyB;AACvC,QAAMV,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACE,MAAM,KAAKA,EAAQ,SAAS,IADd,CAAA;AAEvB;AAGO,SAASW,EAAYC,GAAwD;AAClF,QAAMZ,IAAUb,EAAY,SAAA;AAC5B,EAAKa,MAED,MAAM,QAAQY,CAAG,IACnBA,EAAI,QAAQ,CAACC,MAAM;AACjB,IAAI,OAAOA,KAAM,YAAYA,EAAE,UAC7Bb,EAAQ,UAAU,IAAIa,EAAE,KAAA,CAAM;AAAA,EAElC,CAAC,IACQ,OAAOD,KAAQ,YAAYA,EAAI,SACxCZ,EAAQ,UAAU,IAAIY,EAAI,KAAA,CAAM,IACvB,OAAOA,KAAQ,YAAYA,MAAQ,QAC5C,OAAO,QAAQA,CAAG,EAAE,QAAQ,CAAC,CAACjB,GAAKmB,CAAK,MAAM;AAC5C,IAAIA,KAAS,OAAOnB,KAAQ,YAAYA,EAAI,UAC1CK,EAAQ,UAAU,IAAIL,EAAI,KAAA,CAAM;AAAA,EAEpC,CAAC;AAEL;AAGO,SAASoB,IAAuD;AACrE,QAAMf,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACEA,EAAQ,YAAY,MAAA,IADN,CAAA;AAEvB;AAGO,SAASgB,EAAK;AAAA,EACnB,UAAA/B;AAAA,EACA,UAAAgC,IAAWzC,EAAc;AAAA;AAC3B,GAGS;AACP,QAAMiB,IAAgBN,EAAY,SAAA;AAClC,SAAIM,KAAiBR,MACnBQ,EAAc,aAAa,KAAK;AAAA,IAC9B,SAASR;AAAA,IACT,UAAU,OAAOgC,KAAa,WAAWA,IAAWzC,EAAc;AAAA,IAClE,QAAQ;AAAA,EAAA,CACT,GAGDiB,EAAc,aAAa,KAAK,CAACyB,GAAGC,MAAMD,EAAE,WAAWC,EAAE,QAAQ,IAE5D;AACT;AAGO,SAASC,IAA6B;AAC3C,QAAMpB,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IAEEA,EAAQ,aAAa,IAAI,CAACqB,MAAUA,EAAM,OAAO,IAFnC,CAAA;AAGvB;AAGO,SAASC,EAAaC,GAA0B;AACrD,QAAMvB,IAAUb,EAAY,SAAA;AAC5B,EAAIa,KAAWuB,KACbvB,EAAQ,cAAc,KAAKuB,CAAQ;AAEvC;AAGO,SAASC,IAAmC;AACjD,QAAMxB,IAAUb,EAAY,SAAA;AAC5B,SAAI,CAACa,KAAWA,EAAQ,cAAc,WAAW,IACxC,OAIFA,EAAQ,cAAc;AAAA,IAC3B,CAACyB,GAAKC,MAAYjD,EAAcgD,GAAKC,CAAO;AAAA,IAC5C;AAAA,EAAA;AAEJ;AAIO,SAASC,EAAWC,GAAgC;AACzD,QAAM5B,IAAUb,EAAY,SAAA;AAC5B,EAAKa,MAED,MAAM,QAAQ4B,CAAM,IACtB5B,EAAQ,eAAe,KAAK,GAAG4B,CAAM,IAErC5B,EAAQ,eAAe,KAAK4B,CAAM;AAEtC;AAGO,SAASC,IAAyC;AACvD,QAAM7B,IAAUb,EAAY,SAAA;AAC5B,SAAKa,IACEA,EAAQ,eAAe,MAAA,IADT,CAAA;AAEvB;AAGO,SAAS8B,IAAa;AAC3B,QAAM9B,IAAUb,EAAY,SAAA;AAE5B,MAAI,CAACa;AACH,UAAM,IAAI,MAAM,6CAA6C;AAG/D,SAAO;AAAA,IACL,SAASA,EAAQ;AAAA,IACjB,MAAMA,EAAQ;AAAA,IACd,QAASA,EAAQ,QAAQ,UAAU,CAAA;AAAA,IACnC,QAASA,EAAQ,QAAQ,UAAU,CAAA;AAAA;AAAA,IAGnC,aAAa,CAACY,MAAqD;AACjE,MAAAD,EAAYC,CAAG;AAAA,IACjB;AAAA;AAAA,IAGA,cAAc,MACL,MAAM,KAAKZ,EAAQ,SAAS;AAAA,EACrC;AAEJ;AAMO,SAAS+B,EAAejB,GAA8B;AAC3D,SACEA,MAAU,QACV,OAAOA,KAAU,YACjB,UAAUA,KACV,WAAWA,KACX,cAAcA,MACb,OAAOA,EAAM,QAAS,YAAY,OAAOA,EAAM,QAAS;AAE7D;AAMO,SAASkB,EACdC,GACAjD,MACGC,GACM;AACT,QAAMiD,IAAW,EAAE,GAAGD,EAAQ,OAAO,GAAGjD,EAAA,GAClCmD,IAAclD,EAAS,SAAS,IAAIA,EAAS,KAAA,IAASgD,EAAQ;AAEpE,SAAO;AAAA,IACL,MAAMA,EAAQ;AAAA,IACd,OAAOC;AAAA,IACP,UAAUC;AAAA,EAAA;AAEd;"}
|
package/dist/jsx-runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as t, a as n, b as r, c as d, g, d as i, e as l, f as o, h as m, i as u, j as C, k as c,
|
|
1
|
+
import { F as t, a as n, b as r, c as d, g, d as i, e as l, f as o, h as m, i as u, j as C, k as c, l as h, p, n as E, r as I, o as S, q as x, s as F, t as f, u as j, v as q, w as v } from "./jsx-runtime-Bokflh8Q.js";
|
|
2
2
|
import "async_hooks";
|
|
3
3
|
export {
|
|
4
4
|
t as Fragment,
|
|
@@ -11,16 +11,18 @@ export {
|
|
|
11
11
|
o as getHeadContent,
|
|
12
12
|
m as getIslandEntries,
|
|
13
13
|
u as getSchemas,
|
|
14
|
-
C as
|
|
15
|
-
c as
|
|
16
|
-
h as
|
|
17
|
-
p as
|
|
18
|
-
E as
|
|
14
|
+
C as getSsrIslands,
|
|
15
|
+
c as isValidElement,
|
|
16
|
+
h as jsxFactory,
|
|
17
|
+
p as pushMetadata,
|
|
18
|
+
E as pushSchema,
|
|
19
|
+
I as registerIsland,
|
|
20
|
+
S as registerSsrIsland,
|
|
19
21
|
x as resolveMetadata,
|
|
20
22
|
F as runInRenderContext,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
f as setViewName,
|
|
24
|
+
j as useClientJs,
|
|
25
|
+
q as useCss,
|
|
26
|
+
v as useRequest
|
|
25
27
|
};
|
|
26
28
|
//# sourceMappingURL=jsx-runtime.js.map
|
package/dist/middleware.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { c as s, d
|
|
1
|
+
import { c as s, d, s as r } from "./index-BlfNBupp.js";
|
|
2
2
|
export {
|
|
3
3
|
s as createContext,
|
|
4
|
-
|
|
5
|
-
r as
|
|
6
|
-
l as sequence,
|
|
7
|
-
t as trySerializeLocals
|
|
4
|
+
d as defineMiddleware,
|
|
5
|
+
r as sequence
|
|
8
6
|
};
|
|
9
7
|
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { R as q, b as x } from "./jsx-runtime-Bokflh8Q.js";
|
|
2
|
+
function K(r) {
|
|
3
|
+
return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r;
|
|
4
|
+
}
|
|
5
|
+
var L, U;
|
|
6
|
+
function W() {
|
|
7
|
+
if (U) return L;
|
|
8
|
+
U = 1;
|
|
9
|
+
var r = 16, e = J(), c = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + e + '-(\\d+)__@"', "g"), u = /\{\s*\[native code\]\s*\}/g, f = /function.*?\(/, S = /.*?=>.*?/, d = /[<>\/\u2028\u2029]/g, o = /<\/script[^>]*>/gi, B = ["*", "async"], P = {
|
|
10
|
+
"<": "\\u003C",
|
|
11
|
+
">": "\\u003E",
|
|
12
|
+
"/": "\\u002F",
|
|
13
|
+
"\u2028": "\\u2028",
|
|
14
|
+
"\u2029": "\\u2029"
|
|
15
|
+
};
|
|
16
|
+
function m(i) {
|
|
17
|
+
return P[i];
|
|
18
|
+
}
|
|
19
|
+
function z(i) {
|
|
20
|
+
return i = i.replace(o, function(s) {
|
|
21
|
+
return s.replace(/</g, "\\u003C").replace(/\//g, "\\u002F").replace(/>/g, "\\u003E");
|
|
22
|
+
}), i = i.replace(/\u2028/g, "\\u2028"), i = i.replace(/\u2029/g, "\\u2029"), i;
|
|
23
|
+
}
|
|
24
|
+
function J() {
|
|
25
|
+
for (var i = crypto.getRandomValues(new Uint8Array(r)), s = "", n = 0; n < r; ++n)
|
|
26
|
+
s += i[n].toString(16);
|
|
27
|
+
return s;
|
|
28
|
+
}
|
|
29
|
+
function V(i) {
|
|
30
|
+
var s = [];
|
|
31
|
+
for (var n in i)
|
|
32
|
+
typeof i[n] == "function" && s.push(n);
|
|
33
|
+
for (var p = 0; p < s.length; p++)
|
|
34
|
+
delete i[s[p]];
|
|
35
|
+
}
|
|
36
|
+
return L = function i(s, n) {
|
|
37
|
+
n || (n = {}), (typeof n == "number" || typeof n == "string") && (n = { space: n });
|
|
38
|
+
var p = [], F = [], v = [], y = [], T = [], R = [], N = [], O = [], C = [], D = [];
|
|
39
|
+
function G(h, l) {
|
|
40
|
+
if (n.ignoreFunction && V(l), !l && l !== void 0 && l !== BigInt(0))
|
|
41
|
+
return l;
|
|
42
|
+
var t = this[h], a = typeof t;
|
|
43
|
+
if (a === "object") {
|
|
44
|
+
if (t instanceof RegExp)
|
|
45
|
+
return "@__R-" + e + "-" + (F.push(t) - 1) + "__@";
|
|
46
|
+
if (t instanceof Date)
|
|
47
|
+
return "@__D-" + e + "-" + (v.push(t) - 1) + "__@";
|
|
48
|
+
if (t instanceof Map)
|
|
49
|
+
return "@__M-" + e + "-" + (y.push(t) - 1) + "__@";
|
|
50
|
+
if (t instanceof Set)
|
|
51
|
+
return "@__S-" + e + "-" + (T.push(t) - 1) + "__@";
|
|
52
|
+
if (Array.isArray(t)) {
|
|
53
|
+
var _ = Object.keys(t).length !== t.length;
|
|
54
|
+
if (_)
|
|
55
|
+
return "@__A-" + e + "-" + (R.push(t) - 1) + "__@";
|
|
56
|
+
}
|
|
57
|
+
if (t instanceof URL)
|
|
58
|
+
return "@__L-" + e + "-" + (D.push(t) - 1) + "__@";
|
|
59
|
+
}
|
|
60
|
+
return a === "function" ? "@__F-" + e + "-" + (p.push(t) - 1) + "__@" : a === "undefined" ? "@__U-" + e + "-" + (N.push(t) - 1) + "__@" : a === "number" && !isNaN(t) && !isFinite(t) ? "@__I-" + e + "-" + (O.push(t) - 1) + "__@" : a === "bigint" ? "@__B-" + e + "-" + (C.push(t) - 1) + "__@" : l;
|
|
61
|
+
}
|
|
62
|
+
function X(h, l) {
|
|
63
|
+
var t = h.toString();
|
|
64
|
+
if (u.test(t))
|
|
65
|
+
throw new TypeError("Serializing native function: " + h.name);
|
|
66
|
+
if (l && l.unsafe !== !0 && (t = z(t)), f.test(t) || S.test(t))
|
|
67
|
+
return t;
|
|
68
|
+
var a = t.indexOf("("), _ = t.substr(0, a).trim().split(" ").filter(function(A) {
|
|
69
|
+
return A.length > 0;
|
|
70
|
+
}), b = _.filter(function(A) {
|
|
71
|
+
return B.indexOf(A) === -1;
|
|
72
|
+
});
|
|
73
|
+
return b.length > 0 ? (_.indexOf("async") > -1 ? "async " : "") + "function" + (_.join("").indexOf("*") > -1 ? "*" : "") + t.substr(a) : t;
|
|
74
|
+
}
|
|
75
|
+
if (n.ignoreFunction && typeof s == "function" && (s = void 0), s === void 0)
|
|
76
|
+
return String(s);
|
|
77
|
+
var g;
|
|
78
|
+
return n.isJSON && !n.space ? g = JSON.stringify(s) : g = JSON.stringify(s, n.isJSON ? null : G, n.space), typeof g != "string" ? String(g) : (n.unsafe !== !0 && (g = g.replace(d, m)), p.length === 0 && F.length === 0 && v.length === 0 && y.length === 0 && T.length === 0 && R.length === 0 && N.length === 0 && O.length === 0 && C.length === 0 && D.length === 0 ? g : g.replace(c, function(h, l, t, a) {
|
|
79
|
+
if (l)
|
|
80
|
+
return h;
|
|
81
|
+
if (t === "D") {
|
|
82
|
+
var _ = String(v[a].toISOString());
|
|
83
|
+
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/.test(_))
|
|
84
|
+
throw new TypeError("Invalid Date ISO string");
|
|
85
|
+
return 'new Date("' + _ + '")';
|
|
86
|
+
}
|
|
87
|
+
if (t === "R") {
|
|
88
|
+
var b = String(F[a].flags).replace(/[^gimsuydv]/g, "");
|
|
89
|
+
return "new RegExp(" + i(F[a].source) + ', "' + b + '")';
|
|
90
|
+
}
|
|
91
|
+
if (t === "M")
|
|
92
|
+
return "new Map(" + i(Array.from(y[a].entries()), n) + ")";
|
|
93
|
+
if (t === "S")
|
|
94
|
+
return "new Set(" + i(Array.from(T[a].values()), n) + ")";
|
|
95
|
+
if (t === "A")
|
|
96
|
+
return "Array.prototype.slice.call(" + i(Object.assign({ length: R[a].length }, R[a]), n) + ")";
|
|
97
|
+
if (t === "U")
|
|
98
|
+
return "undefined";
|
|
99
|
+
if (t === "I")
|
|
100
|
+
return O[a];
|
|
101
|
+
if (t === "B")
|
|
102
|
+
return 'BigInt("' + C[a] + '")';
|
|
103
|
+
if (t === "L")
|
|
104
|
+
return "new URL(" + i(D[a].toString(), n) + ")";
|
|
105
|
+
var A = p[a];
|
|
106
|
+
return X(A, n);
|
|
107
|
+
}));
|
|
108
|
+
}, L;
|
|
109
|
+
}
|
|
110
|
+
var Z = W();
|
|
111
|
+
const nr = /* @__PURE__ */ K(Z);
|
|
112
|
+
console.log("render.ts");
|
|
113
|
+
const Y = /* @__PURE__ */ new Set([
|
|
114
|
+
"area",
|
|
115
|
+
"base",
|
|
116
|
+
"br",
|
|
117
|
+
"col",
|
|
118
|
+
"embed",
|
|
119
|
+
"hr",
|
|
120
|
+
"img",
|
|
121
|
+
"input",
|
|
122
|
+
"link",
|
|
123
|
+
"meta",
|
|
124
|
+
"param",
|
|
125
|
+
"source",
|
|
126
|
+
"track",
|
|
127
|
+
"wbr"
|
|
128
|
+
]);
|
|
129
|
+
function H(r) {
|
|
130
|
+
return r ? typeof r == "string" ? r : Array.isArray(r) ? r.map(H).filter(Boolean).join(" ") : typeof r == "object" ? Object.keys(r).filter((e) => r[e]).join(" ") : "" : "";
|
|
131
|
+
}
|
|
132
|
+
const M = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD", Q = M + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040", k = new RegExp(
|
|
133
|
+
"^[" + M + "][" + Q + "]*$"
|
|
134
|
+
), I = {}, $ = {};
|
|
135
|
+
function rr(r) {
|
|
136
|
+
return Object.prototype.hasOwnProperty.call(I, r) ? !0 : Object.prototype.hasOwnProperty.call($, r) ? !1 : k.test(r) ? (I[r] = !0, !0) : ($[r] = !0, process.env.NODE_ENV !== "production" && console.error("Invalid attribute name: `%s`", r), !1);
|
|
137
|
+
}
|
|
138
|
+
function w(r) {
|
|
139
|
+
return r.replaceAll("&", "&").replaceAll('"', """).replaceAll("<", "<").replaceAll(">", ">").replaceAll(`
|
|
140
|
+
`, " ").trim();
|
|
141
|
+
}
|
|
142
|
+
function j(r) {
|
|
143
|
+
return r.replaceAll("&", "&").replaceAll('"', """).replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">").replaceAll(`
|
|
144
|
+
`, "<br/>");
|
|
145
|
+
}
|
|
146
|
+
function tr(r) {
|
|
147
|
+
if (!r) return "";
|
|
148
|
+
let e = "";
|
|
149
|
+
if (r.classList !== void 0 && (e = H(r.classList)), r.class) {
|
|
150
|
+
const u = typeof r.class == "string" ? r.class : "";
|
|
151
|
+
e = e ? `${e} ${u}`.trim() : u;
|
|
152
|
+
}
|
|
153
|
+
const c = Object.entries(r).filter(
|
|
154
|
+
([u]) => u !== "children" && u !== "classList" && u !== "setHtml" && u !== "setText" && u !== "class" && u !== "key" && u !== "cacheTag"
|
|
155
|
+
).map(([u, f]) => {
|
|
156
|
+
if (!rr(u) || f === !1 || f === null || f === void 0) return "";
|
|
157
|
+
if (f === !0) return u;
|
|
158
|
+
if (typeof f == "function") {
|
|
159
|
+
const S = f();
|
|
160
|
+
return `${u}="${w(S?.toString() || "")}"`;
|
|
161
|
+
}
|
|
162
|
+
return `${u}="${w(f?.toString() || "")}"`;
|
|
163
|
+
}).filter(Boolean);
|
|
164
|
+
return e && c.push(`class="${w(e)}"`), c.join(" ");
|
|
165
|
+
}
|
|
166
|
+
function E(r) {
|
|
167
|
+
if (r === null || typeof r == "boolean" || r === void 0) return "";
|
|
168
|
+
if (r && typeof r == "object" && r[q])
|
|
169
|
+
return r.content || "";
|
|
170
|
+
if (r && typeof r == "object" && "htmlContent" in r)
|
|
171
|
+
return r.htmlContent;
|
|
172
|
+
if (typeof r == "string") return j(r.toString());
|
|
173
|
+
if (typeof r == "number") return r.toString();
|
|
174
|
+
if (Array.isArray(r))
|
|
175
|
+
return r.map((o) => E(o)).join("");
|
|
176
|
+
const { type: e, props: c, children: u } = r;
|
|
177
|
+
if (c?.cacheTag && x(c.cacheTag), typeof e == "function") {
|
|
178
|
+
const o = e({ ...c || {}, children: u });
|
|
179
|
+
return o && typeof o == "object" && "string" in o ? o.string : E(o);
|
|
180
|
+
}
|
|
181
|
+
const f = tr(c);
|
|
182
|
+
if (Y.has(e.toLowerCase()))
|
|
183
|
+
return `<${e}${f ? " " + f : ""} />`;
|
|
184
|
+
let d = "";
|
|
185
|
+
return c?.setHtml !== void 0 ? d = c.setHtml?.toString() || "" : c?.setText !== void 0 ? d = j(c.setText?.toString() || "") : d = u.map((o) => E(o)).join(""), `<${e}${f ? " " + f : ""}>${d}</${e}>`;
|
|
186
|
+
}
|
|
187
|
+
function ir(r) {
|
|
188
|
+
return r && typeof r == "object" && "string" in r ? r.string : E(r);
|
|
189
|
+
}
|
|
190
|
+
function ur(r) {
|
|
191
|
+
return r && typeof r == "object" && "string" in r ? r : {
|
|
192
|
+
string: E(r)
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export {
|
|
196
|
+
w as a,
|
|
197
|
+
ur as b,
|
|
198
|
+
j as e,
|
|
199
|
+
ir as r,
|
|
200
|
+
nr as s
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=render-DTXfJu0d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-DTXfJu0d.js","sources":["../../../node_modules/.pnpm/serialize-javascript@7.0.5/node_modules/serialize-javascript/index.js","../src/core/render.ts"],"sourcesContent":["/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\n// Generate an internal UID to make the regexp pattern harder to guess.\nvar UID_LENGTH = 16;\nvar UID = generateUID();\nvar PLACE_HOLDER_REGEXP = new RegExp('(\\\\\\\\)?\"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\\\d+)__@\"', 'g');\n\nvar IS_NATIVE_CODE_REGEXP = /\\{\\s*\\[native code\\]\\s*\\}/g;\nvar IS_PURE_FUNCTION = /function.*?\\(/;\nvar IS_ARROW_FUNCTION = /.*?=>.*?/;\nvar UNSAFE_CHARS_REGEXP = /[<>\\/\\u2028\\u2029]/g;\n// Regex to match </script> and variations (case-insensitive) for XSS protection\n// Matches </script followed by optional whitespace/attributes and >\nvar SCRIPT_CLOSE_REGEXP = /<\\/script[^>]*>/gi;\n\nvar RESERVED_SYMBOLS = ['*', 'async'];\n\n// Mapping of unsafe HTML and invalid JavaScript line terminator chars to their\n// Unicode char counterparts which are safe to use in JavaScript strings.\nvar ESCAPED_CHARS = {\n '<' : '\\\\u003C',\n '>' : '\\\\u003E',\n '/' : '\\\\u002F',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029'\n};\n\nfunction escapeUnsafeChars(unsafeChar) {\n return ESCAPED_CHARS[unsafeChar];\n}\n\n// Escape function body for XSS protection while preserving arrow function syntax\nfunction escapeFunctionBody(str) {\n // Escape </script> sequences and variations (case-insensitive) - the main XSS risk\n // Matches </script followed by optional whitespace/attributes and >\n // This must be done first before other replacements\n str = str.replace(SCRIPT_CLOSE_REGEXP, function(match) {\n // Escape all <, /, and > characters in the closing script tag\n return match.replace(/</g, '\\\\u003C').replace(/\\//g, '\\\\u002F').replace(/>/g, '\\\\u003E');\n });\n // Escape line terminators (these are always unsafe)\n str = str.replace(/\\u2028/g, '\\\\u2028');\n str = str.replace(/\\u2029/g, '\\\\u2029');\n return str;\n}\n\nfunction generateUID() {\n var bytes = crypto.getRandomValues(new Uint8Array(UID_LENGTH));\n var result = '';\n for(var i=0; i<UID_LENGTH; ++i) {\n result += bytes[i].toString(16);\n }\n return result;\n}\n\nfunction deleteFunctions(obj){\n var functionKeys = [];\n for (var key in obj) {\n if (typeof obj[key] === \"function\") {\n functionKeys.push(key);\n }\n }\n for (var i = 0; i < functionKeys.length; i++) {\n delete obj[functionKeys[i]];\n }\n}\n\nmodule.exports = function serialize(obj, options) {\n options || (options = {});\n\n // Backwards-compatibility for `space` as the second argument.\n if (typeof options === 'number' || typeof options === 'string') {\n options = {space: options};\n }\n\n var functions = [];\n var regexps = [];\n var dates = [];\n var maps = [];\n var sets = [];\n var arrays = [];\n var undefs = [];\n var infinities= [];\n var bigInts = [];\n var urls = [];\n\n // Returns placeholders for functions and regexps (identified by index)\n // which are later replaced by their string representation.\n function replacer(key, value) {\n\n // For nested function\n if(options.ignoreFunction){\n deleteFunctions(value);\n }\n\n if (!value && value !== undefined && value !== BigInt(0)) {\n return value;\n }\n\n // If the value is an object w/ a toJSON method, toJSON is called before\n // the replacer runs, so we use this[key] to get the non-toJSONed value.\n var origValue = this[key];\n var type = typeof origValue;\n\n if (type === 'object') {\n if(origValue instanceof RegExp) {\n return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Date) {\n return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Map) {\n return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Set) {\n return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';\n }\n\n if(Array.isArray(origValue)) {\n var isSparse = Object.keys(origValue).length !== origValue.length;\n if (isSparse) {\n return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';\n }\n }\n\n if(origValue instanceof URL) {\n return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';\n }\n }\n\n if (type === 'function') {\n return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';\n }\n\n if (type === 'undefined') {\n return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';\n }\n\n if (type === 'number' && !isNaN(origValue) && !isFinite(origValue)) {\n return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';\n }\n\n if (type === 'bigint') {\n return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';\n }\n\n return value;\n }\n\n function serializeFunc(fn, options) {\n var serializedFn = fn.toString();\n if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {\n throw new TypeError('Serializing native function: ' + fn.name);\n }\n\n // Escape unsafe HTML characters in function body for XSS protection\n // This must preserve arrow function syntax (=>) while escaping </script>\n if (options && options.unsafe !== true) {\n serializedFn = escapeFunctionBody(serializedFn);\n }\n\n // pure functions, example: {key: function() {}}\n if(IS_PURE_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n // arrow functions, example: arg1 => arg1+5\n if(IS_ARROW_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n var argsStartsAt = serializedFn.indexOf('(');\n var def = serializedFn.substr(0, argsStartsAt)\n .trim()\n .split(' ')\n .filter(function(val) { return val.length > 0 });\n\n var nonReservedSymbols = def.filter(function(val) {\n return RESERVED_SYMBOLS.indexOf(val) === -1\n });\n\n // enhanced literal objects, example: {key() {}}\n if(nonReservedSymbols.length > 0) {\n return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'\n + (def.join('').indexOf('*') > -1 ? '*' : '')\n + serializedFn.substr(argsStartsAt);\n }\n\n // arrow functions\n return serializedFn;\n }\n\n // Check if the parameter is function\n if (options.ignoreFunction && typeof obj === \"function\") {\n obj = undefined;\n }\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (obj === undefined) {\n return String(obj);\n }\n\n var str;\n\n // Creates a JSON string representation of the value.\n // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.\n if (options.isJSON && !options.space) {\n str = JSON.stringify(obj);\n } else {\n str = JSON.stringify(obj, options.isJSON ? null : replacer, options.space);\n }\n\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (typeof str !== 'string') {\n return String(str);\n }\n\n // Replace unsafe HTML and invalid JavaScript line terminator chars with\n // their safe Unicode char counterpart. This _must_ happen before the\n // regexps and functions are serialized and added back to the string.\n if (options.unsafe !== true) {\n str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);\n }\n\n if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {\n return str;\n }\n\n // Replaces all occurrences of function, regexp, date, map and set placeholders in the\n // JSON string with their string representations. If the original value can\n // not be found, then `undefined` is used.\n return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {\n // The placeholder may not be preceded by a backslash. This is to prevent\n // replacing things like `\"a\\\"@__R-<UID>-0__@\"` and thus outputting\n // invalid JS.\n if (backSlash) {\n return match;\n }\n\n if (type === 'D') {\n // Validate ISO string format to prevent code injection via spoofed toISOString()\n var isoStr = String(dates[valueIndex].toISOString());\n if (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/.test(isoStr)) {\n throw new TypeError('Invalid Date ISO string');\n }\n return \"new Date(\\\"\" + isoStr + \"\\\")\";\n }\n\n if (type === 'R') {\n // Sanitize flags to prevent code injection (only allow valid RegExp flag characters)\n var flags = String(regexps[valueIndex].flags).replace(/[^gimsuydv]/g, '');\n return \"new RegExp(\" + serialize(regexps[valueIndex].source) + \", \\\"\" + flags + \"\\\")\";\n }\n\n if (type === 'M') {\n return \"new Map(\" + serialize(Array.from(maps[valueIndex].entries()), options) + \")\";\n }\n\n if (type === 'S') {\n return \"new Set(\" + serialize(Array.from(sets[valueIndex].values()), options) + \")\";\n }\n\n if (type === 'A') {\n return \"Array.prototype.slice.call(\" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + \")\";\n }\n\n if (type === 'U') {\n return 'undefined'\n }\n\n if (type === 'I') {\n return infinities[valueIndex];\n }\n\n if (type === 'B') {\n return \"BigInt(\\\"\" + bigInts[valueIndex] + \"\\\")\";\n }\n\n if (type === 'L') {\n return \"new URL(\" + serialize(urls[valueIndex].toString(), options) + \")\";\n }\n\n var fn = functions[valueIndex];\n\n return serializeFunc(fn, options);\n });\n}\n","import { RAW_HTML_MARKER } from './const';\nimport {\n addCacheTag,\n type HtmlContentObject,\n type JSXChild,\n type JSXNode,\n type RenderedNode,\n} from './jsx-runtime';\n\nif (true) {\n console.log('render.ts');\n}\n\nconst VOID_ELEMENTS = new Set<string>([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nfunction classList(input: unknown): string {\n if (!input) return '';\n if (typeof input === 'string') return input;\n if (Array.isArray(input)) {\n return input.map(classList).filter(Boolean).join(' ');\n }\n if (typeof input === 'object') {\n return Object.keys(input as Record<string, boolean>)\n .filter((key) => (input as Record<string, boolean>)[key])\n .join(' ');\n }\n return '';\n}\n\n// Attribute-name validation, ported verbatim from React's react-dom\n// (DOMProperty.js `isAttributeNameSafe`). Untrusted spread props can carry\n// keys like `blah\" onclick=\"x` or `></div><script>…`; if such a key were\n// written as `${key}=\"…\"` it would inject new attributes / break out of the\n// tag. Names that don't match this grammar are dropped instead of emitted.\nconst ATTRIBUTE_NAME_START_CHAR =\n ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst ATTRIBUTE_NAME_CHAR =\n ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst VALID_ATTRIBUTE_NAME_REGEX = new RegExp(\n '^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$',\n);\nconst validatedAttributeNameCache: Record<string, boolean> = {};\nconst illegalAttributeNameCache: Record<string, boolean> = {};\n\nexport function isAttributeNameSafe(attributeName: string): boolean {\n if (Object.prototype.hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n if (process.env.NODE_ENV !== 'production') {\n console.error('Invalid attribute name: `%s`', attributeName);\n }\n return false;\n}\n\nexport function escapeProp(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('\"', '"')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\\n', ' ')\n .trim();\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replaceAll('&', '&')\n .replaceAll('\"', '"')\n .replaceAll(\"'\", ''')\n .replaceAll('<', '<')\n .replaceAll('>', '>')\n .replaceAll('\\n', '<br/>');\n}\n\nfunction renderAttributes(props?: Record<string, any>): string {\n if (!props) return '';\n\n let classValue = '';\n if (props.classList !== undefined) {\n classValue = classList(props.classList);\n }\n if (props.class) {\n const existingClass = typeof props.class === 'string' ? props.class : '';\n classValue = classValue ? `${classValue} ${existingClass}`.trim() : existingClass;\n }\n\n const attrs = Object.entries(props)\n .filter(\n ([key]) =>\n key !== 'children' &&\n key !== 'classList' &&\n key !== 'setHtml' &&\n key !== 'setText' &&\n key !== 'class' &&\n key !== 'key' &&\n key !== 'cacheTag',\n )\n .map(([key, value]) => {\n // Drop attribute names that could break out of the tag (injection guard).\n if (!isAttributeNameSafe(key)) return '';\n\n // HTML standard behavior with function execution support\n if (value === false || value === null || value === undefined) return '';\n if (value === true) return key;\n\n // Execute function props and get result (new feature)\n if (typeof value === 'function') {\n const result = value();\n return `${key}=\"${escapeProp(result?.toString() || '')}\"`;\n }\n\n return `${key}=\"${escapeProp(value?.toString() || '')}\"`;\n })\n .filter(Boolean) as string[];\n\n if (classValue) {\n attrs.push(`class=\"${escapeProp(classValue)}\"`);\n }\n\n return attrs.join(' ');\n}\n\nfunction renderJsxToHtmlStringInternal(element: JSXChild): string {\n // HTML standard: skip boolean, null, undefined children\n if (element === null || typeof element === 'boolean' || element === undefined) return '';\n\n if (element && typeof element === 'object' && (element as any)[RAW_HTML_MARKER]) {\n return (element as any).content || '';\n }\n\n // Support htmlContent object (new feature)\n if (element && typeof element === 'object' && 'htmlContent' in element) {\n return (element as HtmlContentObject).htmlContent;\n }\n\n if (typeof element === 'string') return escapeHTML(element.toString());\n if (typeof element === 'number') return element.toString();\n\n if (Array.isArray(element)) {\n return (element as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n const { type, props, children } = element as JSXNode;\n\n // Collect cache tags from props\n if (props?.cacheTag) {\n addCacheTag(props.cacheTag);\n }\n\n if (typeof type === 'function') {\n const componentResult = (type as any)({ ...(props || {}), children });\n // Check if component returned a RenderedNode\n if (componentResult && typeof componentResult === 'object' && 'string' in componentResult) {\n return (componentResult as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(componentResult as JSXChild);\n }\n\n const attrs = renderAttributes(props);\n const isVoidElement = VOID_ELEMENTS.has((type as string).toLowerCase());\n\n if (isVoidElement) {\n return `<${type}${attrs ? ' ' + attrs : ''} />`;\n }\n\n let childrenHtml = '';\n if (props?.setHtml !== undefined) {\n childrenHtml = props.setHtml?.toString() || '';\n } else if (props?.setText !== undefined) {\n childrenHtml = escapeHTML(props.setText?.toString() || '');\n } else {\n childrenHtml = (children as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n return `<${type}${attrs ? ' ' + attrs : ''}>${childrenHtml}</${type}>`;\n}\n\nexport function renderJsxToHtmlString(element: JSXChild | RenderedNode): string {\n // If already a RenderedNode, return its string\n if (element && typeof element === 'object' && 'string' in element) {\n return (element as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(element as JSXChild);\n}\n\nexport function renderToRenderedNode(element: JSXChild | RenderedNode): RenderedNode {\n // If already a RenderedNode, return as is\n if (element && typeof element === 'object' && 'string' in element) {\n return element as RenderedNode;\n }\n return {\n string: renderJsxToHtmlStringInternal(element as JSXChild),\n };\n}\n"],"names":["UID_LENGTH","UID","generateUID","PLACE_HOLDER_REGEXP","IS_NATIVE_CODE_REGEXP","IS_PURE_FUNCTION","IS_ARROW_FUNCTION","UNSAFE_CHARS_REGEXP","SCRIPT_CLOSE_REGEXP","RESERVED_SYMBOLS","ESCAPED_CHARS","escapeUnsafeChars","unsafeChar","escapeFunctionBody","str","match","bytes","result","i","deleteFunctions","obj","functionKeys","key","serializeJavascript","serialize","options","functions","regexps","dates","maps","sets","arrays","undefs","infinities","bigInts","urls","replacer","value","origValue","type","isSparse","serializeFunc","fn","serializedFn","argsStartsAt","def","val","nonReservedSymbols","backSlash","valueIndex","isoStr","flags","VOID_ELEMENTS","classList","input","ATTRIBUTE_NAME_START_CHAR","ATTRIBUTE_NAME_CHAR","VALID_ATTRIBUTE_NAME_REGEX","validatedAttributeNameCache","illegalAttributeNameCache","isAttributeNameSafe","attributeName","escapeProp","escapeHTML","renderAttributes","props","classValue","existingClass","attrs","renderJsxToHtmlStringInternal","element","RAW_HTML_MARKER","el","children","addCacheTag","componentResult","childrenHtml","renderJsxToHtmlString","renderToRenderedNode"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/seo.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as r } from "./generateMetadata-
|
|
2
|
-
import { m } from "./jsx-runtime-
|
|
1
|
+
import { M as r } from "./generateMetadata-CIFVlViV.js";
|
|
2
|
+
import { m } from "./jsx-runtime-Bokflh8Q.js";
|
|
3
3
|
export {
|
|
4
4
|
r as MetadataRenderer,
|
|
5
5
|
m as mergeMetadata
|