@withl5e/l5e 0.1.4 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,224 @@
1
+ import { M as K } from "./generateMetadata-DLMaI0EO.js";
2
+ import { N as U, I as M, R as W, H as Y, S as z } from "./exceptions-CHPz01DJ.js";
3
+ import { R as Q, b as v, o as X, s as V, p as H, l as R, k as h, i as Z, a as q, H as tt, d as O, e as D, h as et, g as at, f as _ } from "./jsx-runtime-DVQ9eOji.js";
4
+ import { viewLoaders as j, viewComponents as m } from "virtual:l5e-views";
5
+ import rt from "virtual:l5e-route";
6
+ import { globalLoader as L } from "virtual:l5e-global-loader";
7
+ import "virtual:l5e-middleware";
8
+ console.log("render.ts");
9
+ const st = /* @__PURE__ */ new Set([
10
+ "area",
11
+ "base",
12
+ "br",
13
+ "col",
14
+ "embed",
15
+ "hr",
16
+ "img",
17
+ "input",
18
+ "link",
19
+ "meta",
20
+ "param",
21
+ "source",
22
+ "track",
23
+ "wbr"
24
+ ]);
25
+ function J(t) {
26
+ return t ? typeof t == "string" ? t : Array.isArray(t) ? t.map(J).filter(Boolean).join(" ") : typeof t == "object" ? Object.keys(t).filter((s) => t[s]).join(" ") : "" : "";
27
+ }
28
+ function y(t) {
29
+ return t.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(`
30
+ `, "&#10;").trim();
31
+ }
32
+ function N(t) {
33
+ return t.replaceAll("&", "&amp;").replaceAll('"', "&quot;").replaceAll("'", "&#39;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(`
34
+ `, "<br/>");
35
+ }
36
+ function ot(t) {
37
+ if (!t) return "";
38
+ let s = "";
39
+ if (t.classList !== void 0 && (s = J(t.classList)), t.class) {
40
+ const a = typeof t.class == "string" ? t.class : "";
41
+ s = s ? `${s} ${a}`.trim() : a;
42
+ }
43
+ const r = Object.entries(t).filter(
44
+ ([a]) => a !== "children" && a !== "classList" && a !== "setHtml" && a !== "setText" && a !== "class" && a !== "key" && a !== "cacheTag"
45
+ ).map(([a, n]) => {
46
+ if (n === !1 || n === null || n === void 0) return "";
47
+ if (n === !0) return a;
48
+ if (typeof n == "function") {
49
+ const i = n();
50
+ return `${a}="${y(i?.toString() || "")}"`;
51
+ }
52
+ return `${a}="${y(n?.toString() || "")}"`;
53
+ }).filter(Boolean);
54
+ return s && r.push(`class="${y(s)}"`), r.join(" ");
55
+ }
56
+ function w(t) {
57
+ if (t === null || typeof t == "boolean" || t === void 0) return "";
58
+ if (t && typeof t == "object" && t[Q])
59
+ return t.content || "";
60
+ if (t && typeof t == "object" && "htmlContent" in t)
61
+ return t.htmlContent;
62
+ if (typeof t == "string") return N(t.toString());
63
+ if (typeof t == "number") return t.toString();
64
+ if (Array.isArray(t))
65
+ return t.map((o) => w(o)).join("");
66
+ const { type: s, props: r, children: a } = t;
67
+ if (r?.cacheTag && v(r.cacheTag), typeof s == "function") {
68
+ const o = s({ ...r || {}, children: a });
69
+ return o && typeof o == "object" && "string" in o ? o.string : w(o);
70
+ }
71
+ const n = ot(r);
72
+ if (st.has(s.toLowerCase()))
73
+ return `<${s}${n ? " " + n : ""} />`;
74
+ let c = "";
75
+ return r?.setHtml !== void 0 ? c = r.setHtml?.toString() || "" : r?.setText !== void 0 ? c = N(r.setText?.toString() || "") : c = a.map((o) => w(o)).join(""), `<${s}${n ? " " + n : ""}>${c}</${s}>`;
76
+ }
77
+ function f(t) {
78
+ return t && typeof t == "object" && "string" in t ? t.string : w(t);
79
+ }
80
+ function ht(t) {
81
+ return t && typeof t == "object" && "string" in t ? t : {
82
+ string: w(t)
83
+ };
84
+ }
85
+ async function P(t, s) {
86
+ const r = "_error", a = `/src/views/${r}/index.tsx`;
87
+ V(r);
88
+ const n = m[a] ? await m[a]() : null;
89
+ if (n?.default) {
90
+ const i = {
91
+ statusCode: t.statusCode,
92
+ message: t.message,
93
+ data: t.data
94
+ }, c = n.default, o = f(h(c, i)), b = O(), E = D(), g = _(), S = g.length > 0 ? g.map((l) => f(l)).join(`
95
+ `) : void 0;
96
+ return {
97
+ html: o,
98
+ scripts: b.map((l) => l.path),
99
+ styles: E.map((l) => l.path),
100
+ head: S,
101
+ lang: s,
102
+ statusCode: t.statusCode
103
+ };
104
+ } else {
105
+ const i = h("div", {}, `${t.statusCode} - ${t.message}`);
106
+ return {
107
+ html: f(i),
108
+ statusCode: t.statusCode
109
+ };
110
+ }
111
+ }
112
+ async function mt(t, s = {}) {
113
+ return X(async () => {
114
+ try {
115
+ const r = await rt(s);
116
+ if (!r)
117
+ throw new U("Page not found", {
118
+ path: s.path,
119
+ pathname: s.pathname,
120
+ url: s.url?.href
121
+ });
122
+ const a = typeof r == "string" ? r : r.view;
123
+ s.params = typeof r == "string" ? {} : r.params ?? {}, V(a);
124
+ let n = {}, i;
125
+ const c = "/src/global-loader.ts", o = L[c] ? await L[c]() : null;
126
+ if (o?.loader)
127
+ if (o.shouldIgnore?.(a) || !1)
128
+ console.info(`Global loader ignored for view: ${a}`);
129
+ else {
130
+ const p = await o.loader(s);
131
+ n = p.props || {}, i = p.lang, p.cacheTags && v(p.cacheTags);
132
+ }
133
+ let b = {}, E, g, S, l = !1;
134
+ const x = `/src/views/${a}/loader.ts`, d = j[x] ? await j[x]() : null;
135
+ if (d?.loader) {
136
+ const e = await d.loader(s);
137
+ if (e.rawResponse)
138
+ return {
139
+ rawResponse: e.rawResponse,
140
+ statusCode: e.rawResponse.statusCode || 200
141
+ };
142
+ b = e.props || {}, E = e.maxAge, g = e.sMaxAge, S = e.swr, l = e.rawHtml || !1, e.cacheTags && v(e.cacheTags), e.lang && (i = e.lang);
143
+ } else
144
+ console.info(`No loader for view: ${a}`);
145
+ const u = { ...n, ...b };
146
+ if (o?.generateMetadata) {
147
+ const e = o.generateMetadata(s, u);
148
+ e && H(e);
149
+ }
150
+ if (d?.generateMetadata) {
151
+ const e = d.generateMetadata(s, u);
152
+ e && H(e);
153
+ }
154
+ if (o?.generateSchema) {
155
+ const e = o.generateSchema(s, u);
156
+ e && R(e);
157
+ }
158
+ if (d?.generateSchema) {
159
+ const e = d.generateSchema(s, u);
160
+ e && R(e);
161
+ }
162
+ const C = `/src/views/${a}/index.tsx`, A = (m[C] ? await m[C]() : null)?.default;
163
+ if (!A)
164
+ throw console.error(`View component not found: ${a}`), process.env.NODE_ENV !== "production" ? new M(`View component not found: "${a}"`, {
165
+ viewName: a,
166
+ expectedPath: C,
167
+ availableViews: Object.keys(m),
168
+ hint: `Make sure the view component exists at ${C} and exports a default component`,
169
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
170
+ }) : new M("Internal Server Error");
171
+ f(h(K, {})), Z().forEach((e) => {
172
+ const p = JSON.stringify(e);
173
+ q({
174
+ priority: tt.SEO,
175
+ children: h("script", {
176
+ type: "application/ld+json",
177
+ setHtml: p
178
+ })
179
+ });
180
+ });
181
+ const B = f(h(A, u)), I = O(), F = D(), T = et(), k = at(), $ = _(), G = $.length > 0 ? $.map((e) => f(e)).join(`
182
+ `) : void 0;
183
+ return {
184
+ html: B,
185
+ scripts: I.map((e) => e.path),
186
+ styles: F.map((e) => e.path),
187
+ islands: T.length > 0 ? T : void 0,
188
+ head: G,
189
+ lang: i,
190
+ maxAge: E,
191
+ sMaxAge: g,
192
+ swr: S,
193
+ cacheTags: k,
194
+ rawHtml: l
195
+ };
196
+ } catch (r) {
197
+ if (r instanceof W)
198
+ return {
199
+ html: "",
200
+ redirect: {
201
+ url: r.url,
202
+ statusCode: r.statusCode
203
+ }
204
+ };
205
+ if (r instanceof Y)
206
+ return await P(r);
207
+ console.error("Failed to render:", r);
208
+ const a = new z(r.message || "Internal Server Error", {
209
+ originalError: r.name,
210
+ stack: r.stack,
211
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
212
+ });
213
+ return await P(a);
214
+ }
215
+ }, s);
216
+ }
217
+ export {
218
+ y as a,
219
+ f as b,
220
+ ht as c,
221
+ N as e,
222
+ mt as r
223
+ };
224
+ //# sourceMappingURL=entry-server-DJzzhCmz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-server-DJzzhCmz.js","sources":["../src/core/render.ts","../src/core/entry-server.ts"],"sourcesContent":["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\nexport function escapeProp(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\\n', '&#10;')\n .trim();\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\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 // 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","/// <reference path=\"./jsx-types.d.ts\" />\nimport { MetadataRenderer } from '../seo/generateMetadata';\nimport type { Metadata } from '../seo/types';\nimport {\n HttpException,\n InternalServerErrorException,\n NotFoundException,\n RedirectException,\n ServiceUnavailableException,\n} from './exceptions';\nimport { HEAD_PRIORITY } from './head-priority';\nimport {\n addCacheTag,\n getCacheTags,\n getClientJsEntries,\n getCssEntries,\n getHeadContent,\n getIslandEntries,\n getSchemas,\n jsxFactory as h,\n Head,\n pushMetadata,\n pushSchema,\n runInRenderContext,\n setViewName,\n} from './jsx-runtime';\nimport { renderJsxToHtmlString } from './render';\n// @ts-ignore - Virtual modules provided by Vite plugin\nimport { viewComponents, viewLoaders } from 'virtual:l5e-views';\n// @ts-ignore - Virtual modules provided by Vite plugin\nimport routeHandler from 'virtual:l5e-route';\n// @ts-ignore - Virtual modules provided by Vite plugin\nimport { globalLoader } from 'virtual:l5e-global-loader';\n// @ts-ignore - Virtual modules provided by Vite plugin\nexport { loadMiddleware } from 'virtual:l5e-middleware';\n\nexport interface RawResponse {\n body: string | Buffer;\n contentType: string;\n statusCode?: number;\n headers?: Record<string, string>;\n}\n\nexport interface RenderResult {\n html?: string;\n scripts?: string[];\n styles?: string[];\n islands?: Array<{ key: string; src: string; name: string }>;\n head?: string;\n lang?: string;\n statusCode?: number;\n maxAge?: number;\n sMaxAge?: number;\n swr?: number;\n cacheTags?: string[];\n redirect?: { url: string; statusCode: number };\n rawResponse?: RawResponse;\n rawHtml?: boolean;\n}\n\nexport interface RequestInfo {\n url?: URL;\n path?: string;\n pathname?: string;\n method?: string;\n headers?: Record<string, any>;\n cookies?: Record<string, string>;\n query?: Record<string, any>;\n ip?: string;\n locals?: Record<string, unknown>;\n params?: Record<string, any>;\n}\n\nexport type RouteResult =\n | string\n | null\n | { view: string; params?: Record<string, any> };\n\n// SchemaMarkup type - có thể là single schema hoặc array of schemas\n// Sử dụng any để tương thích với schema-dts types từ frontend\nexport type SchemaMarkup = any | Array<any>;\n\nexport interface LoaderResult {\n props?: Record<string, any>;\n lang?: string;\n maxAge?: number;\n sMaxAge?: number;\n swr?: number;\n cacheTags?: string[] | Record<string, boolean>;\n rawResponse?: RawResponse;\n rawHtml?: boolean;\n}\n\nexport type LoaderFunction = (requestInfo: RequestInfo) => Promise<LoaderResult>;\n\nexport type GenerateMetadataFunction = (requestInfo: RequestInfo, props: any) => Metadata | null;\n\nexport type GenerateSchemaFunction = (requestInfo: RequestInfo, props: any) => SchemaMarkup | null;\n\nexport interface GlobalLoaderModule {\n loader: LoaderFunction;\n generateMetadata?: GenerateMetadataFunction;\n generateSchema?: GenerateSchemaFunction;\n shouldIgnore?: (viewName: string) => boolean;\n}\n\n/**\n * Helper function to render error view\n */\nasync function renderErrorView(err: HttpException, lang?: string): Promise<RenderResult> {\n const errorViewName = `_error`;\n const errorComponentPath = `/src/views/${errorViewName}/index.tsx`;\n\n // Set error view name in context\n setViewName(errorViewName);\n\n // Try to load error view\n const errorComponentModule = viewComponents[errorComponentPath]\n ? await viewComponents[errorComponentPath]()\n : null;\n\n if (errorComponentModule?.default) {\n // Render error view with exception data\n const errorProps = {\n statusCode: err.statusCode,\n message: err.message,\n data: err.data,\n };\n\n const Component = errorComponentModule.default;\n const htmlBody = renderJsxToHtmlString(h(Component, errorProps));\n const clientEntries = getClientJsEntries();\n const cssEntries = getCssEntries();\n const headContent = getHeadContent();\n\n const headHtml =\n headContent.length > 0\n ? headContent.map((content) => renderJsxToHtmlString(content)).join('\\n ')\n : undefined;\n\n return {\n html: htmlBody,\n scripts: clientEntries.map((entry) => entry.path),\n styles: cssEntries.map((entry) => entry.path),\n head: headHtml,\n lang,\n statusCode: err.statusCode,\n };\n } else {\n // No error view found, render default error message\n const html = h('div', {}, `${err.statusCode} - ${err.message}`);\n return {\n html: renderJsxToHtmlString(html),\n statusCode: err.statusCode,\n };\n }\n}\n\nexport async function render(url: string, requestInfo: RequestInfo = {}): Promise<RenderResult> {\n return runInRenderContext(async () => {\n try {\n // Step 1: Call route handler to get view name\n const rawRouteResult: RouteResult = await routeHandler(requestInfo);\n\n if (!rawRouteResult) {\n // Throw NotFoundException to render error_404 view\n throw new NotFoundException('Page not found', {\n path: requestInfo.path,\n pathname: requestInfo.pathname,\n url: requestInfo.url?.href,\n });\n }\n\n const viewName =\n typeof rawRouteResult === 'string' ? rawRouteResult : rawRouteResult.view;\n requestInfo.params =\n typeof rawRouteResult === 'string' ? {} : (rawRouteResult.params ?? {});\n\n // Set view name in render context\n setViewName(viewName);\n\n // Step 2: Load global loader (optional)\n let globalProps: Record<string, any> = {};\n let lang: string | undefined;\n\n // Try to load global loader\n const globalLoaderPathTs = '/src/global-loader.ts';\n\n const globalLoaderModule: GlobalLoaderModule | null = globalLoader[globalLoaderPathTs]\n ? await globalLoader[globalLoaderPathTs]()\n : null;\n\n // Run global loader if exists and not ignored\n if (globalLoaderModule?.loader) {\n const shouldIgnore = globalLoaderModule.shouldIgnore?.(viewName) || false;\n\n if (!shouldIgnore) {\n const globalLoaderResult = await globalLoaderModule.loader(requestInfo);\n\n globalProps = globalLoaderResult.props || {};\n lang = globalLoaderResult.lang; // Extract lang from global loader\n\n if (globalLoaderResult.cacheTags) {\n addCacheTag(globalLoaderResult.cacheTags);\n }\n\n // generateMetadata và generateSchema sẽ được gọi sau khi có props\n } else {\n console.info(`Global loader ignored for view: ${viewName}`);\n }\n }\n\n // Step 3: Dynamic import view loader (optional)\n let viewProps: Record<string, any> = {};\n let maxAge: number | undefined;\n let sMaxAge: number | undefined;\n let swr: number | undefined;\n let rawHtml: boolean = false;\n const loaderPathTs = `/src/views/${viewName}/loader.ts`;\n\n // Try TypeScript loader formats only\n const loaderModule = viewLoaders[loaderPathTs] ? await viewLoaders[loaderPathTs]() : null;\n\n if (loaderModule?.loader) {\n const loaderResult = await loaderModule.loader(requestInfo);\n\n // Check if loader returns raw response\n if (loaderResult.rawResponse) {\n return {\n rawResponse: loaderResult.rawResponse,\n statusCode: loaderResult.rawResponse.statusCode || 200,\n };\n }\n\n viewProps = loaderResult.props || {};\n maxAge = loaderResult.maxAge;\n sMaxAge = loaderResult.sMaxAge;\n swr = loaderResult.swr;\n rawHtml = loaderResult.rawHtml || false;\n\n if (loaderResult.cacheTags) {\n addCacheTag(loaderResult.cacheTags);\n }\n\n // View loader lang overrides global loader lang\n if (loaderResult.lang) {\n lang = loaderResult.lang;\n }\n } else {\n console.info(`No loader for view: ${viewName}`);\n }\n\n // Merge props: global props first, then view props (view can override)\n const props = { ...globalProps, ...viewProps };\n\n // Step 3.5: Generate metadata và schema từ generateMetadata và generateSchema functions\n // Global generateMetadata (parent metadata)\n if (globalLoaderModule?.generateMetadata) {\n const globalMetadata = globalLoaderModule.generateMetadata(requestInfo, props);\n if (globalMetadata) {\n pushMetadata(globalMetadata);\n }\n }\n\n // View generateMetadata (child metadata, sẽ merge với parent)\n if (loaderModule?.generateMetadata) {\n const viewMetadata = loaderModule.generateMetadata(requestInfo, props);\n if (viewMetadata) {\n pushMetadata(viewMetadata);\n }\n }\n\n // Global generateSchema (base schemas)\n if (globalLoaderModule?.generateSchema) {\n const globalSchema = globalLoaderModule.generateSchema(requestInfo, props);\n if (globalSchema) {\n pushSchema(globalSchema);\n }\n }\n\n // View generateSchema (view-specific schemas)\n if (loaderModule?.generateSchema) {\n const viewSchema = loaderModule.generateSchema(requestInfo, props);\n if (viewSchema) {\n pushSchema(viewSchema);\n }\n }\n\n // Step 4: Dynamic import component (required)\n const componentPathTsx = `/src/views/${viewName}/index.tsx`;\n\n const componentModule = viewComponents[componentPathTsx]\n ? await viewComponents[componentPathTsx]()\n : null;\n\n const Component = componentModule?.default;\n\n if (!Component) {\n console.error(`View component not found: ${viewName}`);\n\n // Check if in development or production mode\n const isDevelopment = process.env.NODE_ENV !== 'production';\n\n if (isDevelopment) {\n // Development: provide detailed error information\n throw new InternalServerErrorException(`View component not found: \"${viewName}\"`, {\n viewName,\n expectedPath: componentPathTsx,\n availableViews: Object.keys(viewComponents),\n hint: `Make sure the view component exists at ${componentPathTsx} and exports a default component`,\n timestamp: new Date().toISOString(),\n });\n } else {\n // Production: simple error message\n throw new InternalServerErrorException('Internal Server Error');\n }\n }\n\n // Auto-render MetadataRenderer trước khi render component\n // MetadataRenderer sẽ push metadata vào headRegistry thông qua Head component\n renderJsxToHtmlString(h(MetadataRenderer, {}));\n\n // Auto-render schemas vào headRegistry\n const schemas = getSchemas();\n schemas.forEach((schema) => {\n const schemaJson = JSON.stringify(schema);\n // Push schema vào headRegistry thông qua Head component\n // Head component chỉ push vào registry, không cần renderJsxToHtmlString\n Head({\n priority: HEAD_PRIORITY.SEO,\n children: h('script', {\n type: 'application/ld+json',\n setHtml: schemaJson,\n }),\n });\n });\n\n // Render component (có thể có Head components khác)\n const htmlBody = renderJsxToHtmlString(h(Component, props));\n const clientEntries = getClientJsEntries();\n const cssEntries = getCssEntries();\n const islandEntries = getIslandEntries();\n const cacheTags = getCacheTags();\n const headContent = getHeadContent();\n\n // Render head content to HTML string\n const headHtml =\n headContent.length > 0\n ? headContent.map((content) => renderJsxToHtmlString(content)).join('\\n ')\n : undefined;\n\n return {\n html: htmlBody,\n scripts: clientEntries.map((entry) => entry.path),\n styles: cssEntries.map((entry) => entry.path),\n islands: islandEntries.length > 0 ? islandEntries : undefined,\n head: headHtml,\n lang,\n maxAge,\n sMaxAge,\n swr,\n cacheTags,\n rawHtml,\n };\n } catch (err: any) {\n // Handle RedirectException\n if (err instanceof RedirectException) {\n return {\n html: '',\n redirect: {\n url: err.url,\n statusCode: err.statusCode,\n },\n };\n }\n\n // Handle HttpException\n if (err instanceof HttpException) {\n return await renderErrorView(err);\n }\n\n // For other errors, convert to ServiceUnavailableException\n console.error(`Failed to render:`, err);\n const serviceError = new ServiceUnavailableException(err.message || 'Internal Server Error', {\n originalError: err.name,\n stack: err.stack,\n timestamp: new Date().toISOString(),\n });\n return await renderErrorView(serviceError);\n }\n }, requestInfo);\n}\n"],"names":["VOID_ELEMENTS","classList","input","key","escapeProp","value","escapeHTML","renderAttributes","props","classValue","existingClass","attrs","result","renderJsxToHtmlStringInternal","element","RAW_HTML_MARKER","el","type","children","addCacheTag","componentResult","childrenHtml","renderJsxToHtmlString","renderToRenderedNode","renderErrorView","err","lang","errorViewName","errorComponentPath","setViewName","errorComponentModule","viewComponents","errorProps","Component","htmlBody","h","clientEntries","getClientJsEntries","cssEntries","getCssEntries","headContent","getHeadContent","headHtml","content","entry","html","render","url","requestInfo","runInRenderContext","rawRouteResult","routeHandler","NotFoundException","viewName","globalProps","globalLoaderPathTs","globalLoaderModule","globalLoader","globalLoaderResult","viewProps","maxAge","sMaxAge","swr","rawHtml","loaderPathTs","loaderModule","viewLoaders","loaderResult","globalMetadata","pushMetadata","viewMetadata","globalSchema","pushSchema","viewSchema","componentPathTsx","InternalServerErrorException","MetadataRenderer","getSchemas","schema","schemaJson","Head","HEAD_PRIORITY","islandEntries","getIslandEntries","cacheTags","getCacheTags","RedirectException","HttpException","serviceError","ServiceUnavailableException"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import "./generateMetadata-C5QsMS-H.js";
2
- import { r as d } from "./entry-server-Ckh6zfgm.js";
3
- import "./jsx-runtime-C2Vw67N2.js";
1
+ import "./generateMetadata-DLMaI0EO.js";
2
+ import "./exceptions-CHPz01DJ.js";
3
+ import "./jsx-runtime-DVQ9eOji.js";
4
+ import { r as a } from "./entry-server-DJzzhCmz.js";
4
5
  import "virtual:l5e-views";
5
6
  import "virtual:l5e-route";
6
7
  import "virtual:l5e-global-loader";
7
- import { loadMiddleware as f } from "virtual:l5e-middleware";
8
+ import { loadMiddleware as l } from "virtual:l5e-middleware";
8
9
  export {
9
- f as loadMiddleware,
10
- d as render
10
+ l as loadMiddleware,
11
+ a as render
11
12
  };
12
13
  //# sourceMappingURL=entry-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry-server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"entry-server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,39 @@
1
+ class s extends Error {
2
+ constructor(t, e, c) {
3
+ super(e), this.name = "HttpException", this.statusCode = t, this.data = c, Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
4
+ }
5
+ }
6
+ class a extends s {
7
+ constructor(t = "Bad Request", e) {
8
+ super(400, t, e), this.name = "BadRequestException";
9
+ }
10
+ }
11
+ class o extends s {
12
+ constructor(t = "Not Found", e) {
13
+ super(404, t, e), this.name = "NotFoundException";
14
+ }
15
+ }
16
+ class n extends s {
17
+ constructor(t = "Internal Server Error", e) {
18
+ super(500, t, e), this.name = "InternalServerErrorException";
19
+ }
20
+ }
21
+ class i extends s {
22
+ constructor(t = "Service Unavailable", e) {
23
+ super(503, t, e), this.name = "ServiceUnavailableException";
24
+ }
25
+ }
26
+ class u extends Error {
27
+ constructor(t, e = 302, c) {
28
+ super(`Redirect to ${t}`), this.name = "RedirectException", this.url = t, this.statusCode = e, this.data = c, Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
29
+ }
30
+ }
31
+ export {
32
+ a as B,
33
+ s as H,
34
+ n as I,
35
+ o as N,
36
+ u as R,
37
+ i as S
38
+ };
39
+ //# sourceMappingURL=exceptions-CHPz01DJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions-CHPz01DJ.js","sources":["../src/core/exceptions.ts"],"sourcesContent":["/**\n * Base HTTP Exception class\n */\nexport class HttpException extends Error {\n public readonly statusCode: number;\n public readonly data?: Record<string, any>;\n\n constructor(statusCode: number, message: string, data?: Record<string, any>) {\n super(message);\n this.name = 'HttpException';\n this.statusCode = statusCode;\n this.data = data;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * 400 Bad Request Exception\n */\nexport class BadRequestException extends HttpException {\n constructor(message: string = 'Bad Request', data?: Record<string, any>) {\n super(400, message, data);\n this.name = 'BadRequestException';\n }\n}\n\n/**\n * 404 Not Found Exception\n */\nexport class NotFoundException extends HttpException {\n constructor(message: string = 'Not Found', data?: Record<string, any>) {\n super(404, message, data);\n this.name = 'NotFoundException';\n }\n}\n\n/**\n * 500 Internal Server Error Exception\n */\nexport class InternalServerErrorException extends HttpException {\n constructor(message: string = 'Internal Server Error', data?: Record<string, any>) {\n super(500, message, data);\n this.name = 'InternalServerErrorException';\n }\n}\n\n/**\n * 503 Service Unavailable Exception\n */\nexport class ServiceUnavailableException extends HttpException {\n constructor(message: string = 'Service Unavailable', data?: Record<string, any>) {\n super(503, message, data);\n this.name = 'ServiceUnavailableException';\n }\n}\n\n/**\n * Redirect Exception - for HTTP redirects (301/302)\n */\nexport class RedirectException extends Error {\n public readonly url: string;\n public readonly statusCode: number;\n public readonly data?: Record<string, any>;\n\n constructor(url: string, statusCode: number = 302, data?: Record<string, any>) {\n super(`Redirect to ${url}`);\n this.name = 'RedirectException';\n this.url = url;\n this.statusCode = statusCode;\n this.data = data;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n"],"names":["HttpException","statusCode","message","data","BadRequestException","NotFoundException","InternalServerErrorException","ServiceUnavailableException","RedirectException","url"],"mappings":"AAGO,MAAMA,UAAsB,MAAM;AAAA,EAIvC,YAAYC,GAAoBC,GAAiBC,GAA4B;AAC3E,UAAMD,CAAO,GACb,KAAK,OAAO,iBACZ,KAAK,aAAaD,GAClB,KAAK,OAAOE,GAGR,MAAM,qBACR,MAAM,kBAAkB,MAAM,KAAK,WAAW;AAAA,EAElD;AACF;AAKO,MAAMC,UAA4BJ,EAAc;AAAA,EACrD,YAAYE,IAAkB,eAAeC,GAA4B;AACvE,UAAM,KAAKD,GAASC,CAAI,GACxB,KAAK,OAAO;AAAA,EACd;AACF;AAKO,MAAME,UAA0BL,EAAc;AAAA,EACnD,YAAYE,IAAkB,aAAaC,GAA4B;AACrE,UAAM,KAAKD,GAASC,CAAI,GACxB,KAAK,OAAO;AAAA,EACd;AACF;AAKO,MAAMG,UAAqCN,EAAc;AAAA,EAC9D,YAAYE,IAAkB,yBAAyBC,GAA4B;AACjF,UAAM,KAAKD,GAASC,CAAI,GACxB,KAAK,OAAO;AAAA,EACd;AACF;AAKO,MAAMI,UAAoCP,EAAc;AAAA,EAC7D,YAAYE,IAAkB,uBAAuBC,GAA4B;AAC/E,UAAM,KAAKD,GAASC,CAAI,GACxB,KAAK,OAAO;AAAA,EACd;AACF;AAKO,MAAMK,UAA0B,MAAM;AAAA,EAK3C,YAAYC,GAAaR,IAAqB,KAAKE,GAA4B;AAC7E,UAAM,eAAeM,CAAG,EAAE,GAC1B,KAAK,OAAO,qBACZ,KAAK,MAAMA,GACX,KAAK,aAAaR,GAClB,KAAK,OAAOE,GAER,MAAM,qBACR,MAAM,kBAAkB,MAAM,KAAK,WAAW;AAAA,EAElD;AACF;"}
@@ -1,5 +1,5 @@
1
1
  import { jsxFactory as t, Fragment as T } from "@withl5e/l5e/jsx-runtime";
2
- import { t as j, n as M, m as C, a as s, H as l, F as o } from "./jsx-runtime-C2Vw67N2.js";
2
+ import { t as j, n as M, m as C, a as s, H as l, F as o } from "./jsx-runtime-DVQ9eOji.js";
3
3
  function R({ metadata: h }) {
4
4
  const { request: w } = j(), u = M(), e = h ? C(u, h) : u;
5
5
  if (!e) return null;
@@ -141,4 +141,4 @@ function R({ metadata: h }) {
141
141
  export {
142
142
  R as M
143
143
  };
144
- //# sourceMappingURL=generateMetadata-C5QsMS-H.js.map
144
+ //# sourceMappingURL=generateMetadata-DLMaI0EO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateMetadata-C5QsMS-H.js","sources":["../src/seo/generateMetadata.tsx"],"sourcesContent":["/// <reference types=\"../core/jsx-types\" />\nimport { HEAD_PRIORITY } from '../core/head-priority';\nimport { Fragment, Head, resolveMetadata, useRequest } from '../core/jsx-runtime';\n\nimport { mergeMetadata } from './mergeMetadata';\nimport type { Metadata } from './types';\n\n/**\n * Converts Metadata object to SEO meta tags\n * This is the core function that transforms the metadata object into actual HTML tags\n *\n * If metadata is provided, it will be merged with metadata from the stack (from global/page loaders)\n * If no metadata is provided, it will use resolved metadata from the stack\n */\nexport function MetadataRenderer({ metadata }: { metadata?: Metadata }) {\n const { request } = useRequest();\n\n // Resolve metadata from stack (hierarchical metadata from loaders)\n const stackMetadata = resolveMetadata();\n\n // Merge: stack metadata (parent) + provided metadata (child)\n // If metadata is provided, it overrides stack metadata\n // If not provided, use stack metadata only\n const resolvedMetadata = metadata ? mergeMetadata(stackMetadata, metadata) : stackMetadata;\n\n if (!resolvedMetadata) return null;\n\n // Helper to normalize title\n const getTitle = () => {\n if (!resolvedMetadata.title) return null;\n if (typeof resolvedMetadata.title === 'string') return resolvedMetadata.title;\n // Handle TemplateString\n return resolvedMetadata.title.default;\n };\n\n // Helper to normalize robots\n const getRobots = () => {\n // tránh tiêm query\n const queryNames = Object.keys(request.query || {});\n // mặc định nếu có query sẽ ép robots về noindex\n // tuy nhiên 1 số trường hợp đặc biệt ví dụ như page=1 có chủ đích `allowQueryNames` sẽ bỏ qua nguyên tắc này\n\n const noindex =\n queryNames.filter((name) => {\n if (typeof resolvedMetadata.robots === 'string') return false;\n if (Array.isArray(resolvedMetadata.robots?.allowQueryNames))\n return !resolvedMetadata.robots.allowQueryNames.includes(name);\n return name !== resolvedMetadata.robots?.allowQueryNames;\n }).length > 0;\n\n if (noindex) return 'noindex, follow';\n\n if (!resolvedMetadata.robots) return null;\n if (typeof resolvedMetadata.robots === 'string') return resolvedMetadata.robots;\n\n const parts: string[] = [];\n if (resolvedMetadata.robots.index === false) parts.push('noindex');\n else if (resolvedMetadata.robots.index === true) parts.push('index');\n\n if (resolvedMetadata.robots.follow === false) parts.push('nofollow');\n else if (resolvedMetadata.robots.follow === true) parts.push('follow');\n\n if (resolvedMetadata.robots.noarchive) parts.push('noarchive');\n if (resolvedMetadata.robots.nosnippet) parts.push('nosnippet');\n if (resolvedMetadata.robots.noimageindex) parts.push('noimageindex');\n if (resolvedMetadata.robots.nocache) parts.push('nocache');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize viewport\n const getViewport = () => {\n if (!resolvedMetadata.viewport) return null;\n if (typeof resolvedMetadata.viewport === 'string') return resolvedMetadata.viewport;\n\n const parts: string[] = [];\n if (resolvedMetadata.viewport.width) parts.push(`width=${resolvedMetadata.viewport.width}`);\n if (resolvedMetadata.viewport.height) parts.push(`height=${resolvedMetadata.viewport.height}`);\n if (resolvedMetadata.viewport.initialScale)\n parts.push(`initial-scale=${resolvedMetadata.viewport.initialScale}`);\n if (resolvedMetadata.viewport.maximumScale)\n parts.push(`maximum-scale=${resolvedMetadata.viewport.maximumScale}`);\n if (resolvedMetadata.viewport.minimumScale)\n parts.push(`minimum-scale=${resolvedMetadata.viewport.minimumScale}`);\n if (resolvedMetadata.viewport.userScalable !== undefined) {\n parts.push(`user-scalable=${resolvedMetadata.viewport.userScalable ? 'yes' : 'no'}`);\n }\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize keywords\n const getKeywords = () => {\n if (!resolvedMetadata.keywords) return null;\n if (Array.isArray(resolvedMetadata.keywords)) return resolvedMetadata.keywords.join(', ');\n return resolvedMetadata.keywords;\n };\n\n // Helper to normalize authors\n const getAuthors = () => {\n if (!resolvedMetadata.author) return [];\n if (typeof resolvedMetadata.author === 'string') return [{ name: resolvedMetadata.author }];\n if (Array.isArray(resolvedMetadata.author)) return resolvedMetadata.author;\n return [resolvedMetadata.author];\n };\n\n // Helper to normalize format detection\n const getFormatDetection = () => {\n if (!resolvedMetadata.formatDetection) return null;\n\n const parts: string[] = [];\n if (resolvedMetadata.formatDetection.telephone === false) parts.push('telephone=no');\n if (resolvedMetadata.formatDetection.date === false) parts.push('date=no');\n if (resolvedMetadata.formatDetection.address === false) parts.push('address=no');\n if (resolvedMetadata.formatDetection.email === false) parts.push('email=no');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize Open Graph images\n const getOgImages = () => {\n if (!resolvedMetadata.openGraph?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.openGraph.images)\n ? resolvedMetadata.openGraph.images\n : [resolvedMetadata.openGraph.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to normalize Twitter images\n const getTwitterImages = () => {\n if (!resolvedMetadata.twitter?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.twitter.images)\n ? resolvedMetadata.twitter.images\n : [resolvedMetadata.twitter.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to get icon URLs\n const getIcons = () => {\n if (!resolvedMetadata.icons) return { icon: [], apple: [], shortcut: null, other: [] };\n\n const iconUrls = resolvedMetadata.icons.icon\n ? Array.isArray(resolvedMetadata.icons.icon)\n ? resolvedMetadata.icons.icon\n : [resolvedMetadata.icons.icon]\n : [];\n\n const appleUrls = resolvedMetadata.icons.apple\n ? Array.isArray(resolvedMetadata.icons.apple)\n ? resolvedMetadata.icons.apple\n : [resolvedMetadata.icons.apple]\n : [];\n\n return {\n icon: iconUrls,\n apple: appleUrls,\n shortcut: resolvedMetadata.icons.shortcut || null,\n other: resolvedMetadata.icons.other || [],\n };\n };\n\n const title = getTitle();\n const robots = getRobots();\n const viewport = getViewport();\n const keywords = getKeywords();\n const authors = getAuthors();\n const formatDetection = getFormatDetection();\n const ogImages = getOgImages();\n const twitterImages = getTwitterImages();\n const icons = getIcons();\n const themeColors = Array.isArray(resolvedMetadata.themeColor)\n ? resolvedMetadata.themeColor\n : resolvedMetadata.themeColor\n ? [resolvedMetadata.themeColor]\n : [];\n\n return (\n <>\n {/* Critical: charset, viewport - must be first */}\n {(resolvedMetadata.charset || viewport) && (\n <Head priority={HEAD_PRIORITY.CRITICAL}>\n {resolvedMetadata.charset && <meta charset={resolvedMetadata.charset} />}\n {viewport && <meta name=\"viewport\" content={viewport} />}\n </Head>\n )}\n\n {/* High priority: title, description, canonical, prev/next */}\n {(title ||\n resolvedMetadata.description ||\n resolvedMetadata.canonical ||\n resolvedMetadata.prev ||\n resolvedMetadata.next) && (\n <Head priority={HEAD_PRIORITY.HIGH}>\n {title && <title>{title}</title>}\n {resolvedMetadata.description && (\n <meta name=\"description\" content={resolvedMetadata.description} />\n )}\n {resolvedMetadata.canonical && <link rel=\"canonical\" href={resolvedMetadata.canonical} />}\n {resolvedMetadata.prev && <link rel=\"prev\" href={resolvedMetadata.prev} />}\n {resolvedMetadata.next && <link rel=\"next\" href={resolvedMetadata.next} />}\n </Head>\n )}\n\n {/* Medium priority: meta tags, robots */}\n <Head priority={HEAD_PRIORITY.MEDIUM}>\n {keywords && <meta name=\"keywords\" content={keywords} />}\n {robots && <meta name=\"robots\" content={robots} />}\n {resolvedMetadata.colorScheme && (\n <meta name=\"color-scheme\" content={resolvedMetadata.colorScheme} />\n )}\n\n {/* Theme colors */}\n {themeColors.map((color, index) => (\n <meta name=\"theme-color\" content={color} />\n ))}\n\n {resolvedMetadata.generator && (\n <meta name=\"generator\" content={resolvedMetadata.generator} />\n )}\n {resolvedMetadata.creator && <meta name=\"creator\" content={resolvedMetadata.creator} />}\n {resolvedMetadata.publisher && (\n <meta name=\"publisher\" content={resolvedMetadata.publisher} />\n )}\n {resolvedMetadata.referrer && <meta name=\"referrer\" content={resolvedMetadata.referrer} />}\n {resolvedMetadata.category && <meta name=\"category\" content={resolvedMetadata.category} />}\n {resolvedMetadata.classification && (\n <meta name=\"classification\" content={resolvedMetadata.classification} />\n )}\n {formatDetection && <meta name=\"format-detection\" content={formatDetection} />}\n\n {/* Authors */}\n {authors.map((author, index) => (\n <Fragment>\n <meta name=\"author\" content={author.name} />\n {author.url && <link rel=\"author\" href={author.url} />}\n </Fragment>\n ))}\n\n {/* Icons */}\n {icons.icon.map((url, index) => (\n <link rel=\"icon\" href={url} />\n ))}\n {icons.shortcut && <link rel=\"shortcut icon\" href={icons.shortcut} />}\n {icons.apple.map((url, index) => (\n <link rel=\"apple-touch-icon\" href={url} />\n ))}\n {icons.other.map((icon, index) => (\n <link\n rel={icon.rel || 'icon'}\n href={icon.url}\n {...(icon.sizes && { sizes: icon.sizes })}\n {...(icon.type && { type: icon.type })}\n />\n ))}\n\n {/* Manifest */}\n {resolvedMetadata.manifest && <link rel=\"manifest\" href={resolvedMetadata.manifest} />}\n\n {/* Feeds */}\n {resolvedMetadata.feed && (\n <link rel=\"alternate\" type=\"application/rss+xml\" href={resolvedMetadata.feed} />\n )}\n\n {/* Verification */}\n {resolvedMetadata.verification?.google && (\n <meta name=\"google-site-verification\" content={resolvedMetadata.verification.google} />\n )}\n {resolvedMetadata.verification?.yahoo && (\n <meta name=\"y_key\" content={resolvedMetadata.verification.yahoo} />\n )}\n {resolvedMetadata.verification?.yandex && (\n <meta name=\"yandex-verification\" content={resolvedMetadata.verification.yandex} />\n )}\n {resolvedMetadata.verification?.me &&\n (Array.isArray(resolvedMetadata.verification.me) ? (\n resolvedMetadata.verification.me.map((url, index) => <link rel=\"me\" href={url} />)\n ) : (\n <link rel=\"me\" href={resolvedMetadata.verification.me} />\n ))}\n {resolvedMetadata.verification?.other &&\n Object.entries(resolvedMetadata.verification.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={v} />)\n ) : (\n <meta name={key} content={value} />\n ),\n )}\n\n {/* App Links */}\n {resolvedMetadata.appLinks && (\n <Fragment>\n {resolvedMetadata.appLinks.ios?.url && (\n <meta property=\"al:ios:url\" content={resolvedMetadata.appLinks.ios.url} />\n )}\n {resolvedMetadata.appLinks.ios?.app_store_id && (\n <meta\n property=\"al:ios:app_store_id\"\n content={resolvedMetadata.appLinks.ios.app_store_id}\n />\n )}\n {resolvedMetadata.appLinks.ios?.app_name && (\n <meta property=\"al:ios:app_name\" content={resolvedMetadata.appLinks.ios.app_name} />\n )}\n {resolvedMetadata.appLinks.android?.package && (\n <meta\n property=\"al:android:package\"\n content={resolvedMetadata.appLinks.android.package}\n />\n )}\n {resolvedMetadata.appLinks.android?.app_name && (\n <meta\n property=\"al:android:app_name\"\n content={resolvedMetadata.appLinks.android.app_name}\n />\n )}\n {resolvedMetadata.appLinks.android?.url && (\n <meta property=\"al:android:url\" content={resolvedMetadata.appLinks.android.url} />\n )}\n {resolvedMetadata.appLinks.web?.url && (\n <meta property=\"al:web:url\" content={resolvedMetadata.appLinks.web.url} />\n )}\n {resolvedMetadata.appLinks.web?.should_fallback !== undefined && (\n <meta\n property=\"al:web:should_fallback\"\n content={String(resolvedMetadata.appLinks.web.should_fallback)}\n />\n )}\n </Fragment>\n )}\n\n {/* Additional meta tags */}\n {resolvedMetadata.other &&\n Object.entries(resolvedMetadata.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={String(v)} />)\n ) : (\n <meta name={key} content={String(value)} />\n ),\n )}\n </Head>\n\n {/* SEO: OpenGraph, Twitter - lower priority */}\n {(resolvedMetadata.openGraph || resolvedMetadata.twitter) && (\n <Head priority={HEAD_PRIORITY.SEO}>\n {/* Open Graph */}\n {resolvedMetadata.openGraph && (\n <Fragment>\n {resolvedMetadata.openGraph.title && (\n <meta property=\"og:title\" content={resolvedMetadata.openGraph.title} />\n )}\n {resolvedMetadata.openGraph.description && (\n <meta property=\"og:description\" content={resolvedMetadata.openGraph.description} />\n )}\n {resolvedMetadata.openGraph.type && (\n <meta property=\"og:type\" content={resolvedMetadata.openGraph.type} />\n )}\n {resolvedMetadata.openGraph.url && (\n <meta property=\"og:url\" content={resolvedMetadata.openGraph.url} />\n )}\n {resolvedMetadata.openGraph.siteName && (\n <meta property=\"og:site_name\" content={resolvedMetadata.openGraph.siteName} />\n )}\n {resolvedMetadata.openGraph.locale && (\n <meta property=\"og:locale\" content={resolvedMetadata.openGraph.locale} />\n )}\n {resolvedMetadata.openGraph.alternateLocale &&\n (Array.isArray(resolvedMetadata.openGraph.alternateLocale) ? (\n resolvedMetadata.openGraph.alternateLocale.map((locale, index) => (\n <meta property=\"og:locale:alternate\" content={locale} />\n ))\n ) : (\n <meta\n property=\"og:locale:alternate\"\n content={resolvedMetadata.openGraph.alternateLocale}\n />\n ))}\n {resolvedMetadata.openGraph.determiner && (\n <meta property=\"og:determiner\" content={resolvedMetadata.openGraph.determiner} />\n )}\n\n {/* OG Images */}\n {ogImages.map((image, index) => (\n <Fragment>\n <meta property=\"og:image\" content={image.url} />\n {image.secureUrl && (\n <meta property=\"og:image:secure_url\" content={image.secureUrl} />\n )}\n {image.alt && <meta property=\"og:image:alt\" content={image.alt} />}\n {image.type && <meta property=\"og:image:type\" content={image.type} />}\n {image.width && <meta property=\"og:image:width\" content={String(image.width)} />}\n {image.height && (\n <meta property=\"og:image:height\" content={String(image.height)} />\n )}\n </Fragment>\n ))}\n\n {/* Article specific */}\n {resolvedMetadata.openGraph.publishedTime && (\n <meta\n property=\"article:published_time\"\n content={resolvedMetadata.openGraph.publishedTime}\n />\n )}\n {resolvedMetadata.openGraph.modifiedTime && (\n <meta\n property=\"article:modified_time\"\n content={resolvedMetadata.openGraph.modifiedTime}\n />\n )}\n {resolvedMetadata.openGraph.expirationTime && (\n <meta\n property=\"article:expiration_time\"\n content={resolvedMetadata.openGraph.expirationTime}\n />\n )}\n {resolvedMetadata.openGraph.authors &&\n (Array.isArray(resolvedMetadata.openGraph.authors) ? (\n resolvedMetadata.openGraph.authors.map((author, index) => (\n <meta property=\"article:author\" content={author} />\n ))\n ) : (\n <meta property=\"article:author\" content={resolvedMetadata.openGraph.authors} />\n ))}\n {resolvedMetadata.openGraph.section && (\n <meta property=\"article:section\" content={resolvedMetadata.openGraph.section} />\n )}\n {resolvedMetadata.openGraph.tags &&\n (Array.isArray(resolvedMetadata.openGraph.tags) ? (\n resolvedMetadata.openGraph.tags.map((tag, index) => (\n <meta property=\"article:tag\" content={tag} />\n ))\n ) : (\n <meta property=\"article:tag\" content={resolvedMetadata.openGraph.tags} />\n ))}\n\n {/* Book specific */}\n {resolvedMetadata.openGraph.isbn && (\n <meta property=\"book:isbn\" content={resolvedMetadata.openGraph.isbn} />\n )}\n {resolvedMetadata.openGraph.releaseDate && (\n <meta\n property=\"book:release_date\"\n content={resolvedMetadata.openGraph.releaseDate}\n />\n )}\n\n {/* Profile specific */}\n {resolvedMetadata.openGraph.firstName && (\n <meta\n property=\"profile:first_name\"\n content={resolvedMetadata.openGraph.firstName}\n />\n )}\n {resolvedMetadata.openGraph.lastName && (\n <meta property=\"profile:last_name\" content={resolvedMetadata.openGraph.lastName} />\n )}\n {resolvedMetadata.openGraph.username && (\n <meta property=\"profile:username\" content={resolvedMetadata.openGraph.username} />\n )}\n {resolvedMetadata.openGraph.gender && (\n <meta property=\"profile:gender\" content={resolvedMetadata.openGraph.gender} />\n )}\n </Fragment>\n )}\n\n {/* Twitter Card */}\n {resolvedMetadata.twitter && (\n <Fragment>\n {resolvedMetadata.twitter.card && (\n <meta name=\"twitter:card\" content={resolvedMetadata.twitter.card} />\n )}\n {resolvedMetadata.twitter.site && (\n <meta name=\"twitter:site\" content={resolvedMetadata.twitter.site} />\n )}\n {resolvedMetadata.twitter.siteId && (\n <meta name=\"twitter:site:id\" content={resolvedMetadata.twitter.siteId} />\n )}\n {resolvedMetadata.twitter.creator && (\n <meta name=\"twitter:creator\" content={resolvedMetadata.twitter.creator} />\n )}\n {resolvedMetadata.twitter.creatorId && (\n <meta name=\"twitter:creator:id\" content={resolvedMetadata.twitter.creatorId} />\n )}\n {resolvedMetadata.twitter.title && (\n <meta name=\"twitter:title\" content={resolvedMetadata.twitter.title} />\n )}\n {resolvedMetadata.twitter.description && (\n <meta name=\"twitter:description\" content={resolvedMetadata.twitter.description} />\n )}\n\n {/* Twitter Images */}\n {twitterImages.map((image, index) => (\n <Fragment>\n <meta name=\"twitter:image\" content={image.url} />\n {image.alt && <meta name=\"twitter:image:alt\" content={image.alt} />}\n </Fragment>\n ))}\n\n {/* Twitter App */}\n {resolvedMetadata.twitter.app && (\n <Fragment>\n {resolvedMetadata.twitter.app.name && (\n <meta name=\"twitter:app:name\" content={resolvedMetadata.twitter.app.name} />\n )}\n {resolvedMetadata.twitter.app.id.iphone && (\n <meta\n name=\"twitter:app:id:iphone\"\n content={resolvedMetadata.twitter.app.id.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.id.ipad && (\n <meta\n name=\"twitter:app:id:ipad\"\n content={resolvedMetadata.twitter.app.id.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.id.googleplay && (\n <meta\n name=\"twitter:app:id:googleplay\"\n content={resolvedMetadata.twitter.app.id.googleplay}\n />\n )}\n {resolvedMetadata.twitter.app.url?.iphone && (\n <meta\n name=\"twitter:app:url:iphone\"\n content={resolvedMetadata.twitter.app.url.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.url?.ipad && (\n <meta\n name=\"twitter:app:url:ipad\"\n content={resolvedMetadata.twitter.app.url.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.url?.googleplay && (\n <meta\n name=\"twitter:app:url:googleplay\"\n content={resolvedMetadata.twitter.app.url.googleplay}\n />\n )}\n </Fragment>\n )}\n </Fragment>\n )}\n </Head>\n )}\n </>\n );\n}\n"],"names":["MetadataRenderer","metadata","request","useRequest","stackMetadata","resolveMetadata","resolvedMetadata","mergeMetadata","getTitle","getRobots","name","parts","getViewport","getKeywords","getAuthors","getFormatDetection","getOgImages","img","getTwitterImages","getIcons","iconUrls","appleUrls","title","robots","viewport","keywords","authors","formatDetection","ogImages","twitterImages","icons","themeColors","jsxFactory","__Fragment","Head","HEAD_PRIORITY","color","index","author","Fragment","url","icon","key","value","v","locale","image","tag"],"mappings":"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"}
1
+ {"version":3,"file":"generateMetadata-DLMaI0EO.js","sources":["../src/seo/generateMetadata.tsx"],"sourcesContent":["/// <reference types=\"../core/jsx-types\" />\nimport { HEAD_PRIORITY } from '../core/head-priority';\nimport { Fragment, Head, resolveMetadata, useRequest } from '../core/jsx-runtime';\n\nimport { mergeMetadata } from './mergeMetadata';\nimport type { Metadata } from './types';\n\n/**\n * Converts Metadata object to SEO meta tags\n * This is the core function that transforms the metadata object into actual HTML tags\n *\n * If metadata is provided, it will be merged with metadata from the stack (from global/page loaders)\n * If no metadata is provided, it will use resolved metadata from the stack\n */\nexport function MetadataRenderer({ metadata }: { metadata?: Metadata }) {\n const { request } = useRequest();\n\n // Resolve metadata from stack (hierarchical metadata from loaders)\n const stackMetadata = resolveMetadata();\n\n // Merge: stack metadata (parent) + provided metadata (child)\n // If metadata is provided, it overrides stack metadata\n // If not provided, use stack metadata only\n const resolvedMetadata = metadata ? mergeMetadata(stackMetadata, metadata) : stackMetadata;\n\n if (!resolvedMetadata) return null;\n\n // Helper to normalize title\n const getTitle = () => {\n if (!resolvedMetadata.title) return null;\n if (typeof resolvedMetadata.title === 'string') return resolvedMetadata.title;\n // Handle TemplateString\n return resolvedMetadata.title.default;\n };\n\n // Helper to normalize robots\n const getRobots = () => {\n // tránh tiêm query\n const queryNames = Object.keys(request.query || {});\n // mặc định nếu có query sẽ ép robots về noindex\n // tuy nhiên 1 số trường hợp đặc biệt ví dụ như page=1 có chủ đích `allowQueryNames` sẽ bỏ qua nguyên tắc này\n\n const noindex =\n queryNames.filter((name) => {\n if (typeof resolvedMetadata.robots === 'string') return false;\n if (Array.isArray(resolvedMetadata.robots?.allowQueryNames))\n return !resolvedMetadata.robots.allowQueryNames.includes(name);\n return name !== resolvedMetadata.robots?.allowQueryNames;\n }).length > 0;\n\n if (noindex) return 'noindex, follow';\n\n if (!resolvedMetadata.robots) return null;\n if (typeof resolvedMetadata.robots === 'string') return resolvedMetadata.robots;\n\n const parts: string[] = [];\n if (resolvedMetadata.robots.index === false) parts.push('noindex');\n else if (resolvedMetadata.robots.index === true) parts.push('index');\n\n if (resolvedMetadata.robots.follow === false) parts.push('nofollow');\n else if (resolvedMetadata.robots.follow === true) parts.push('follow');\n\n if (resolvedMetadata.robots.noarchive) parts.push('noarchive');\n if (resolvedMetadata.robots.nosnippet) parts.push('nosnippet');\n if (resolvedMetadata.robots.noimageindex) parts.push('noimageindex');\n if (resolvedMetadata.robots.nocache) parts.push('nocache');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize viewport\n const getViewport = () => {\n if (!resolvedMetadata.viewport) return null;\n if (typeof resolvedMetadata.viewport === 'string') return resolvedMetadata.viewport;\n\n const parts: string[] = [];\n if (resolvedMetadata.viewport.width) parts.push(`width=${resolvedMetadata.viewport.width}`);\n if (resolvedMetadata.viewport.height) parts.push(`height=${resolvedMetadata.viewport.height}`);\n if (resolvedMetadata.viewport.initialScale)\n parts.push(`initial-scale=${resolvedMetadata.viewport.initialScale}`);\n if (resolvedMetadata.viewport.maximumScale)\n parts.push(`maximum-scale=${resolvedMetadata.viewport.maximumScale}`);\n if (resolvedMetadata.viewport.minimumScale)\n parts.push(`minimum-scale=${resolvedMetadata.viewport.minimumScale}`);\n if (resolvedMetadata.viewport.userScalable !== undefined) {\n parts.push(`user-scalable=${resolvedMetadata.viewport.userScalable ? 'yes' : 'no'}`);\n }\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize keywords\n const getKeywords = () => {\n if (!resolvedMetadata.keywords) return null;\n if (Array.isArray(resolvedMetadata.keywords)) return resolvedMetadata.keywords.join(', ');\n return resolvedMetadata.keywords;\n };\n\n // Helper to normalize authors\n const getAuthors = () => {\n if (!resolvedMetadata.author) return [];\n if (typeof resolvedMetadata.author === 'string') return [{ name: resolvedMetadata.author }];\n if (Array.isArray(resolvedMetadata.author)) return resolvedMetadata.author;\n return [resolvedMetadata.author];\n };\n\n // Helper to normalize format detection\n const getFormatDetection = () => {\n if (!resolvedMetadata.formatDetection) return null;\n\n const parts: string[] = [];\n if (resolvedMetadata.formatDetection.telephone === false) parts.push('telephone=no');\n if (resolvedMetadata.formatDetection.date === false) parts.push('date=no');\n if (resolvedMetadata.formatDetection.address === false) parts.push('address=no');\n if (resolvedMetadata.formatDetection.email === false) parts.push('email=no');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize Open Graph images\n const getOgImages = () => {\n if (!resolvedMetadata.openGraph?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.openGraph.images)\n ? resolvedMetadata.openGraph.images\n : [resolvedMetadata.openGraph.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to normalize Twitter images\n const getTwitterImages = () => {\n if (!resolvedMetadata.twitter?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.twitter.images)\n ? resolvedMetadata.twitter.images\n : [resolvedMetadata.twitter.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to get icon URLs\n const getIcons = () => {\n if (!resolvedMetadata.icons) return { icon: [], apple: [], shortcut: null, other: [] };\n\n const iconUrls = resolvedMetadata.icons.icon\n ? Array.isArray(resolvedMetadata.icons.icon)\n ? resolvedMetadata.icons.icon\n : [resolvedMetadata.icons.icon]\n : [];\n\n const appleUrls = resolvedMetadata.icons.apple\n ? Array.isArray(resolvedMetadata.icons.apple)\n ? resolvedMetadata.icons.apple\n : [resolvedMetadata.icons.apple]\n : [];\n\n return {\n icon: iconUrls,\n apple: appleUrls,\n shortcut: resolvedMetadata.icons.shortcut || null,\n other: resolvedMetadata.icons.other || [],\n };\n };\n\n const title = getTitle();\n const robots = getRobots();\n const viewport = getViewport();\n const keywords = getKeywords();\n const authors = getAuthors();\n const formatDetection = getFormatDetection();\n const ogImages = getOgImages();\n const twitterImages = getTwitterImages();\n const icons = getIcons();\n const themeColors = Array.isArray(resolvedMetadata.themeColor)\n ? resolvedMetadata.themeColor\n : resolvedMetadata.themeColor\n ? [resolvedMetadata.themeColor]\n : [];\n\n return (\n <>\n {/* Critical: charset, viewport - must be first */}\n {(resolvedMetadata.charset || viewport) && (\n <Head priority={HEAD_PRIORITY.CRITICAL}>\n {resolvedMetadata.charset && <meta charset={resolvedMetadata.charset} />}\n {viewport && <meta name=\"viewport\" content={viewport} />}\n </Head>\n )}\n\n {/* High priority: title, description, canonical, prev/next */}\n {(title ||\n resolvedMetadata.description ||\n resolvedMetadata.canonical ||\n resolvedMetadata.prev ||\n resolvedMetadata.next) && (\n <Head priority={HEAD_PRIORITY.HIGH}>\n {title && <title>{title}</title>}\n {resolvedMetadata.description && (\n <meta name=\"description\" content={resolvedMetadata.description} />\n )}\n {resolvedMetadata.canonical && <link rel=\"canonical\" href={resolvedMetadata.canonical} />}\n {resolvedMetadata.prev && <link rel=\"prev\" href={resolvedMetadata.prev} />}\n {resolvedMetadata.next && <link rel=\"next\" href={resolvedMetadata.next} />}\n </Head>\n )}\n\n {/* Medium priority: meta tags, robots */}\n <Head priority={HEAD_PRIORITY.MEDIUM}>\n {keywords && <meta name=\"keywords\" content={keywords} />}\n {robots && <meta name=\"robots\" content={robots} />}\n {resolvedMetadata.colorScheme && (\n <meta name=\"color-scheme\" content={resolvedMetadata.colorScheme} />\n )}\n\n {/* Theme colors */}\n {themeColors.map((color, index) => (\n <meta name=\"theme-color\" content={color} />\n ))}\n\n {resolvedMetadata.generator && (\n <meta name=\"generator\" content={resolvedMetadata.generator} />\n )}\n {resolvedMetadata.creator && <meta name=\"creator\" content={resolvedMetadata.creator} />}\n {resolvedMetadata.publisher && (\n <meta name=\"publisher\" content={resolvedMetadata.publisher} />\n )}\n {resolvedMetadata.referrer && <meta name=\"referrer\" content={resolvedMetadata.referrer} />}\n {resolvedMetadata.category && <meta name=\"category\" content={resolvedMetadata.category} />}\n {resolvedMetadata.classification && (\n <meta name=\"classification\" content={resolvedMetadata.classification} />\n )}\n {formatDetection && <meta name=\"format-detection\" content={formatDetection} />}\n\n {/* Authors */}\n {authors.map((author, index) => (\n <Fragment>\n <meta name=\"author\" content={author.name} />\n {author.url && <link rel=\"author\" href={author.url} />}\n </Fragment>\n ))}\n\n {/* Icons */}\n {icons.icon.map((url, index) => (\n <link rel=\"icon\" href={url} />\n ))}\n {icons.shortcut && <link rel=\"shortcut icon\" href={icons.shortcut} />}\n {icons.apple.map((url, index) => (\n <link rel=\"apple-touch-icon\" href={url} />\n ))}\n {icons.other.map((icon, index) => (\n <link\n rel={icon.rel || 'icon'}\n href={icon.url}\n {...(icon.sizes && { sizes: icon.sizes })}\n {...(icon.type && { type: icon.type })}\n />\n ))}\n\n {/* Manifest */}\n {resolvedMetadata.manifest && <link rel=\"manifest\" href={resolvedMetadata.manifest} />}\n\n {/* Feeds */}\n {resolvedMetadata.feed && (\n <link rel=\"alternate\" type=\"application/rss+xml\" href={resolvedMetadata.feed} />\n )}\n\n {/* Verification */}\n {resolvedMetadata.verification?.google && (\n <meta name=\"google-site-verification\" content={resolvedMetadata.verification.google} />\n )}\n {resolvedMetadata.verification?.yahoo && (\n <meta name=\"y_key\" content={resolvedMetadata.verification.yahoo} />\n )}\n {resolvedMetadata.verification?.yandex && (\n <meta name=\"yandex-verification\" content={resolvedMetadata.verification.yandex} />\n )}\n {resolvedMetadata.verification?.me &&\n (Array.isArray(resolvedMetadata.verification.me) ? (\n resolvedMetadata.verification.me.map((url, index) => <link rel=\"me\" href={url} />)\n ) : (\n <link rel=\"me\" href={resolvedMetadata.verification.me} />\n ))}\n {resolvedMetadata.verification?.other &&\n Object.entries(resolvedMetadata.verification.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={v} />)\n ) : (\n <meta name={key} content={value} />\n ),\n )}\n\n {/* App Links */}\n {resolvedMetadata.appLinks && (\n <Fragment>\n {resolvedMetadata.appLinks.ios?.url && (\n <meta property=\"al:ios:url\" content={resolvedMetadata.appLinks.ios.url} />\n )}\n {resolvedMetadata.appLinks.ios?.app_store_id && (\n <meta\n property=\"al:ios:app_store_id\"\n content={resolvedMetadata.appLinks.ios.app_store_id}\n />\n )}\n {resolvedMetadata.appLinks.ios?.app_name && (\n <meta property=\"al:ios:app_name\" content={resolvedMetadata.appLinks.ios.app_name} />\n )}\n {resolvedMetadata.appLinks.android?.package && (\n <meta\n property=\"al:android:package\"\n content={resolvedMetadata.appLinks.android.package}\n />\n )}\n {resolvedMetadata.appLinks.android?.app_name && (\n <meta\n property=\"al:android:app_name\"\n content={resolvedMetadata.appLinks.android.app_name}\n />\n )}\n {resolvedMetadata.appLinks.android?.url && (\n <meta property=\"al:android:url\" content={resolvedMetadata.appLinks.android.url} />\n )}\n {resolvedMetadata.appLinks.web?.url && (\n <meta property=\"al:web:url\" content={resolvedMetadata.appLinks.web.url} />\n )}\n {resolvedMetadata.appLinks.web?.should_fallback !== undefined && (\n <meta\n property=\"al:web:should_fallback\"\n content={String(resolvedMetadata.appLinks.web.should_fallback)}\n />\n )}\n </Fragment>\n )}\n\n {/* Additional meta tags */}\n {resolvedMetadata.other &&\n Object.entries(resolvedMetadata.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={String(v)} />)\n ) : (\n <meta name={key} content={String(value)} />\n ),\n )}\n </Head>\n\n {/* SEO: OpenGraph, Twitter - lower priority */}\n {(resolvedMetadata.openGraph || resolvedMetadata.twitter) && (\n <Head priority={HEAD_PRIORITY.SEO}>\n {/* Open Graph */}\n {resolvedMetadata.openGraph && (\n <Fragment>\n {resolvedMetadata.openGraph.title && (\n <meta property=\"og:title\" content={resolvedMetadata.openGraph.title} />\n )}\n {resolvedMetadata.openGraph.description && (\n <meta property=\"og:description\" content={resolvedMetadata.openGraph.description} />\n )}\n {resolvedMetadata.openGraph.type && (\n <meta property=\"og:type\" content={resolvedMetadata.openGraph.type} />\n )}\n {resolvedMetadata.openGraph.url && (\n <meta property=\"og:url\" content={resolvedMetadata.openGraph.url} />\n )}\n {resolvedMetadata.openGraph.siteName && (\n <meta property=\"og:site_name\" content={resolvedMetadata.openGraph.siteName} />\n )}\n {resolvedMetadata.openGraph.locale && (\n <meta property=\"og:locale\" content={resolvedMetadata.openGraph.locale} />\n )}\n {resolvedMetadata.openGraph.alternateLocale &&\n (Array.isArray(resolvedMetadata.openGraph.alternateLocale) ? (\n resolvedMetadata.openGraph.alternateLocale.map((locale, index) => (\n <meta property=\"og:locale:alternate\" content={locale} />\n ))\n ) : (\n <meta\n property=\"og:locale:alternate\"\n content={resolvedMetadata.openGraph.alternateLocale}\n />\n ))}\n {resolvedMetadata.openGraph.determiner && (\n <meta property=\"og:determiner\" content={resolvedMetadata.openGraph.determiner} />\n )}\n\n {/* OG Images */}\n {ogImages.map((image, index) => (\n <Fragment>\n <meta property=\"og:image\" content={image.url} />\n {image.secureUrl && (\n <meta property=\"og:image:secure_url\" content={image.secureUrl} />\n )}\n {image.alt && <meta property=\"og:image:alt\" content={image.alt} />}\n {image.type && <meta property=\"og:image:type\" content={image.type} />}\n {image.width && <meta property=\"og:image:width\" content={String(image.width)} />}\n {image.height && (\n <meta property=\"og:image:height\" content={String(image.height)} />\n )}\n </Fragment>\n ))}\n\n {/* Article specific */}\n {resolvedMetadata.openGraph.publishedTime && (\n <meta\n property=\"article:published_time\"\n content={resolvedMetadata.openGraph.publishedTime}\n />\n )}\n {resolvedMetadata.openGraph.modifiedTime && (\n <meta\n property=\"article:modified_time\"\n content={resolvedMetadata.openGraph.modifiedTime}\n />\n )}\n {resolvedMetadata.openGraph.expirationTime && (\n <meta\n property=\"article:expiration_time\"\n content={resolvedMetadata.openGraph.expirationTime}\n />\n )}\n {resolvedMetadata.openGraph.authors &&\n (Array.isArray(resolvedMetadata.openGraph.authors) ? (\n resolvedMetadata.openGraph.authors.map((author, index) => (\n <meta property=\"article:author\" content={author} />\n ))\n ) : (\n <meta property=\"article:author\" content={resolvedMetadata.openGraph.authors} />\n ))}\n {resolvedMetadata.openGraph.section && (\n <meta property=\"article:section\" content={resolvedMetadata.openGraph.section} />\n )}\n {resolvedMetadata.openGraph.tags &&\n (Array.isArray(resolvedMetadata.openGraph.tags) ? (\n resolvedMetadata.openGraph.tags.map((tag, index) => (\n <meta property=\"article:tag\" content={tag} />\n ))\n ) : (\n <meta property=\"article:tag\" content={resolvedMetadata.openGraph.tags} />\n ))}\n\n {/* Book specific */}\n {resolvedMetadata.openGraph.isbn && (\n <meta property=\"book:isbn\" content={resolvedMetadata.openGraph.isbn} />\n )}\n {resolvedMetadata.openGraph.releaseDate && (\n <meta\n property=\"book:release_date\"\n content={resolvedMetadata.openGraph.releaseDate}\n />\n )}\n\n {/* Profile specific */}\n {resolvedMetadata.openGraph.firstName && (\n <meta\n property=\"profile:first_name\"\n content={resolvedMetadata.openGraph.firstName}\n />\n )}\n {resolvedMetadata.openGraph.lastName && (\n <meta property=\"profile:last_name\" content={resolvedMetadata.openGraph.lastName} />\n )}\n {resolvedMetadata.openGraph.username && (\n <meta property=\"profile:username\" content={resolvedMetadata.openGraph.username} />\n )}\n {resolvedMetadata.openGraph.gender && (\n <meta property=\"profile:gender\" content={resolvedMetadata.openGraph.gender} />\n )}\n </Fragment>\n )}\n\n {/* Twitter Card */}\n {resolvedMetadata.twitter && (\n <Fragment>\n {resolvedMetadata.twitter.card && (\n <meta name=\"twitter:card\" content={resolvedMetadata.twitter.card} />\n )}\n {resolvedMetadata.twitter.site && (\n <meta name=\"twitter:site\" content={resolvedMetadata.twitter.site} />\n )}\n {resolvedMetadata.twitter.siteId && (\n <meta name=\"twitter:site:id\" content={resolvedMetadata.twitter.siteId} />\n )}\n {resolvedMetadata.twitter.creator && (\n <meta name=\"twitter:creator\" content={resolvedMetadata.twitter.creator} />\n )}\n {resolvedMetadata.twitter.creatorId && (\n <meta name=\"twitter:creator:id\" content={resolvedMetadata.twitter.creatorId} />\n )}\n {resolvedMetadata.twitter.title && (\n <meta name=\"twitter:title\" content={resolvedMetadata.twitter.title} />\n )}\n {resolvedMetadata.twitter.description && (\n <meta name=\"twitter:description\" content={resolvedMetadata.twitter.description} />\n )}\n\n {/* Twitter Images */}\n {twitterImages.map((image, index) => (\n <Fragment>\n <meta name=\"twitter:image\" content={image.url} />\n {image.alt && <meta name=\"twitter:image:alt\" content={image.alt} />}\n </Fragment>\n ))}\n\n {/* Twitter App */}\n {resolvedMetadata.twitter.app && (\n <Fragment>\n {resolvedMetadata.twitter.app.name && (\n <meta name=\"twitter:app:name\" content={resolvedMetadata.twitter.app.name} />\n )}\n {resolvedMetadata.twitter.app.id.iphone && (\n <meta\n name=\"twitter:app:id:iphone\"\n content={resolvedMetadata.twitter.app.id.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.id.ipad && (\n <meta\n name=\"twitter:app:id:ipad\"\n content={resolvedMetadata.twitter.app.id.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.id.googleplay && (\n <meta\n name=\"twitter:app:id:googleplay\"\n content={resolvedMetadata.twitter.app.id.googleplay}\n />\n )}\n {resolvedMetadata.twitter.app.url?.iphone && (\n <meta\n name=\"twitter:app:url:iphone\"\n content={resolvedMetadata.twitter.app.url.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.url?.ipad && (\n <meta\n name=\"twitter:app:url:ipad\"\n content={resolvedMetadata.twitter.app.url.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.url?.googleplay && (\n <meta\n name=\"twitter:app:url:googleplay\"\n content={resolvedMetadata.twitter.app.url.googleplay}\n />\n )}\n </Fragment>\n )}\n </Fragment>\n )}\n </Head>\n )}\n </>\n );\n}\n"],"names":["MetadataRenderer","metadata","request","useRequest","stackMetadata","resolveMetadata","resolvedMetadata","mergeMetadata","getTitle","getRobots","name","parts","getViewport","getKeywords","getAuthors","getFormatDetection","getOgImages","img","getTwitterImages","getIcons","iconUrls","appleUrls","title","robots","viewport","keywords","authors","formatDetection","ogImages","twitterImages","icons","themeColors","jsxFactory","__Fragment","Head","HEAD_PRIORITY","color","index","author","Fragment","url","icon","key","value","v","locale","image","tag"],"mappings":"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"}