vinext 0.0.28 → 0.0.29
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/build/report.d.ts +117 -0
- package/dist/build/report.d.ts.map +1 -0
- package/dist/build/report.js +303 -0
- package/dist/build/report.js.map +1 -0
- package/dist/cli.js +106 -9
- package/dist/cli.js.map +1 -1
- package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -1
- package/dist/cloudflare/kv-cache-handler.js +14 -12
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/cloudflare/tpr.d.ts +10 -0
- package/dist/cloudflare/tpr.d.ts.map +1 -1
- package/dist/cloudflare/tpr.js +36 -41
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/next-config.d.ts.map +1 -1
- package/dist/config/next-config.js +16 -0
- package/dist/config/next-config.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts.map +1 -1
- package/dist/entries/app-rsc-entry.js +19 -24
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.d.ts.map +1 -1
- package/dist/entries/pages-server-entry.js +94 -44
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -38
- package/dist/index.js.map +1 -1
- package/dist/routing/app-router.d.ts +2 -0
- package/dist/routing/app-router.d.ts.map +1 -1
- package/dist/routing/app-router.js +92 -79
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/pages-router.d.ts.map +1 -1
- package/dist/routing/pages-router.js +17 -57
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/routing/route-trie.d.ts +57 -0
- package/dist/routing/route-trie.d.ts.map +1 -0
- package/dist/routing/route-trie.js +160 -0
- package/dist/routing/route-trie.js.map +1 -0
- package/dist/routing/route-validation.d.ts.map +1 -1
- package/dist/routing/route-validation.js +13 -1
- package/dist/routing/route-validation.js.map +1 -1
- package/dist/routing/utils.d.ts +19 -0
- package/dist/routing/utils.d.ts.map +1 -1
- package/dist/routing/utils.js +47 -0
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.d.ts.map +1 -1
- package/dist/server/api-handler.js +28 -13
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/dev-server.d.ts.map +1 -1
- package/dist/server/dev-server.js +58 -6
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/image-optimization.d.ts.map +1 -1
- package/dist/server/image-optimization.js +1 -1
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/instrumentation.js +17 -8
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/middleware-codegen.d.ts +10 -0
- package/dist/server/middleware-codegen.d.ts.map +1 -1
- package/dist/server/middleware-codegen.js +39 -0
- package/dist/server/middleware-codegen.js.map +1 -1
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +2 -1
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/prod-server.d.ts +8 -2
- package/dist/server/prod-server.d.ts.map +1 -1
- package/dist/server/prod-server.js +60 -20
- package/dist/server/prod-server.js.map +1 -1
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/headers.js +2 -5
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/link.d.ts.map +1 -1
- package/dist/shims/link.js +11 -43
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +56 -0
- package/dist/shims/metadata.d.ts.map +1 -1
- package/dist/shims/metadata.js +66 -0
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +2 -0
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/shims/navigation.js +41 -29
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/router.d.ts.map +1 -1
- package/dist/shims/router.js +13 -19
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/url-utils.d.ts +20 -6
- package/dist/shims/url-utils.d.ts.map +1 -1
- package/dist/shims/url-utils.js +79 -0
- package/dist/shims/url-utils.js.map +1 -1
- package/package.json +2 -2
package/dist/shims/metadata.js
CHANGED
|
@@ -386,6 +386,34 @@ export function MetadataHead({ metadata }) {
|
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
388
|
}
|
|
389
|
+
// Twitter player cards
|
|
390
|
+
if (tw.players) {
|
|
391
|
+
const players = Array.isArray(tw.players) ? tw.players : [tw.players];
|
|
392
|
+
for (const player of players) {
|
|
393
|
+
const playerUrl = player.playerUrl.toString();
|
|
394
|
+
const streamUrl = player.streamUrl.toString();
|
|
395
|
+
elements.push(_jsx("meta", { name: "twitter:player", content: resolveUrl(playerUrl) ?? playerUrl }, key++));
|
|
396
|
+
elements.push(_jsx("meta", { name: "twitter:player:stream", content: resolveUrl(streamUrl) ?? streamUrl }, key++));
|
|
397
|
+
elements.push(_jsx("meta", { name: "twitter:player:width", content: String(player.width) }, key++));
|
|
398
|
+
elements.push(_jsx("meta", { name: "twitter:player:height", content: String(player.height) }, key++));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// Twitter app cards
|
|
402
|
+
if (tw.app) {
|
|
403
|
+
const { app } = tw;
|
|
404
|
+
for (const platform of ["iphone", "ipad", "googleplay"]) {
|
|
405
|
+
if (app.name) {
|
|
406
|
+
elements.push(_jsx("meta", { name: `twitter:app:name:${platform}`, content: app.name }, key++));
|
|
407
|
+
}
|
|
408
|
+
if (app.id[platform] !== undefined) {
|
|
409
|
+
elements.push(_jsx("meta", { name: `twitter:app:id:${platform}`, content: String(app.id[platform]) }, key++));
|
|
410
|
+
}
|
|
411
|
+
if (app.url?.[platform] !== undefined) {
|
|
412
|
+
const appUrl = app.url[platform].toString();
|
|
413
|
+
elements.push(_jsx("meta", { name: `twitter:app:url:${platform}`, content: resolveUrl(appUrl) ?? appUrl }, key++));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
389
417
|
}
|
|
390
418
|
// Icons
|
|
391
419
|
if (metadata.icons) {
|
|
@@ -481,6 +509,44 @@ export function MetadataHead({ metadata }) {
|
|
|
481
509
|
}
|
|
482
510
|
}
|
|
483
511
|
}
|
|
512
|
+
// iTunes
|
|
513
|
+
if (metadata.itunes) {
|
|
514
|
+
const { appId, appArgument } = metadata.itunes;
|
|
515
|
+
let content = `app-id=${appId}`;
|
|
516
|
+
if (appArgument) {
|
|
517
|
+
content += `, app-argument=${appArgument}`;
|
|
518
|
+
}
|
|
519
|
+
elements.push(_jsx("meta", { name: "apple-itunes-app", content: content }, key++));
|
|
520
|
+
}
|
|
521
|
+
// App Links
|
|
522
|
+
if (metadata.appLinks) {
|
|
523
|
+
const al = metadata.appLinks;
|
|
524
|
+
const platforms = [
|
|
525
|
+
"ios",
|
|
526
|
+
"iphone",
|
|
527
|
+
"ipad",
|
|
528
|
+
"android",
|
|
529
|
+
"windows_phone",
|
|
530
|
+
"windows",
|
|
531
|
+
"windows_universal",
|
|
532
|
+
"web",
|
|
533
|
+
];
|
|
534
|
+
for (const platform of platforms) {
|
|
535
|
+
const entries = al[platform];
|
|
536
|
+
if (!entries)
|
|
537
|
+
continue;
|
|
538
|
+
const list = Array.isArray(entries) ? entries : [entries];
|
|
539
|
+
for (const entry of list) {
|
|
540
|
+
for (const [k, v] of Object.entries(entry)) {
|
|
541
|
+
if (v === undefined || v === null)
|
|
542
|
+
continue;
|
|
543
|
+
const str = String(v);
|
|
544
|
+
const content = k === "url" ? (resolveUrl(str) ?? str) : str;
|
|
545
|
+
elements.push(_jsx("meta", { property: `al:${platform}:${k}`, content: content }, key++));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
484
550
|
// Other custom meta tags
|
|
485
551
|
if (metadata.other) {
|
|
486
552
|
for (const [name, content] of Object.entries(metadata.other)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/shims/metadata.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Metadata support for App Router.\n *\n * Handles `export const metadata` and `export async function generateMetadata()`.\n * Resolves metadata from layouts and pages (pages override layouts).\n */\nimport React from \"react\";\n\n// ---------------------------------------------------------------------------\n// Viewport types and resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Normalize null-prototype objects from matchPattern() into thenable objects.\n * See entries/app-rsc-entry.ts makeThenableParams() for full explanation.\n */\nfunction makeThenableParams<T extends Record<string, unknown>>(obj: T): Promise<T> & T {\n const plain = { ...obj } as T;\n return Object.assign(Promise.resolve(plain), plain);\n}\n\nexport interface Viewport {\n /** Viewport width (default: \"device-width\") */\n width?: string | number;\n /** Viewport height */\n height?: string | number;\n /** Initial scale */\n initialScale?: number;\n /** Minimum scale */\n minimumScale?: number;\n /** Maximum scale */\n maximumScale?: number;\n /** Whether user can scale */\n userScalable?: boolean;\n /** Theme color — single color or array of { media, color } */\n themeColor?: string | Array<{ media?: string; color: string }>;\n /** Color scheme: 'light' | 'dark' | 'light dark' | 'normal' */\n colorScheme?: string;\n}\n\n/**\n * Resolve viewport config from a module. Handles both static `viewport` export\n * and async `generateViewport()` function.\n */\nexport async function resolveModuleViewport(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]>,\n): Promise<Viewport | null> {\n if (typeof mod.generateViewport === \"function\") {\n const asyncParams = makeThenableParams(params);\n return await mod.generateViewport({ params: asyncParams });\n }\n if (mod.viewport && typeof mod.viewport === \"object\") {\n return mod.viewport as Viewport;\n }\n return null;\n}\n\n/**\n * Merge viewport configs from multiple sources (layouts + page).\n * Later entries override earlier ones.\n */\nexport const DEFAULT_VIEWPORT: Viewport = {\n width: \"device-width\",\n initialScale: 1,\n};\n\nexport function mergeViewport(viewportList: Viewport[]): Viewport {\n const merged: Viewport = { ...DEFAULT_VIEWPORT };\n for (const vp of viewportList) {\n Object.assign(merged, vp);\n }\n return merged;\n}\n\n/**\n * React component that renders viewport meta tags into <head>.\n */\nexport function ViewportHead({ viewport }: { viewport: Viewport }) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Build viewport content string\n const parts: string[] = [];\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`);\n if (viewport.height !== undefined) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.minimumScale !== undefined) parts.push(`minimum-scale=${viewport.minimumScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined)\n parts.push(`user-scalable=${viewport.userScalable ? \"yes\" : \"no\"}`);\n\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"viewport\" content={parts.join(\", \")} />);\n }\n\n // Theme color\n if (viewport.themeColor) {\n if (typeof viewport.themeColor === \"string\") {\n elements.push(<meta key={key++} name=\"theme-color\" content={viewport.themeColor} />);\n } else if (Array.isArray(viewport.themeColor)) {\n for (const entry of viewport.themeColor) {\n elements.push(\n <meta\n key={key++}\n name=\"theme-color\"\n content={entry.color}\n {...(entry.media ? { media: entry.media } : {})}\n />,\n );\n }\n }\n }\n\n // Color scheme\n if (viewport.colorScheme) {\n elements.push(<meta key={key++} name=\"color-scheme\" content={viewport.colorScheme} />);\n }\n\n return <>{elements}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Metadata types and resolution\n// ---------------------------------------------------------------------------\n\nexport interface Metadata {\n title?: string | { default?: string; template?: string; absolute?: string };\n description?: string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n keywords?: string | string[];\n authors?: Array<{ name?: string; url?: string }> | { name?: string; url?: string };\n creator?: string;\n publisher?: string;\n robots?:\n | string\n | {\n index?: boolean;\n follow?: boolean;\n googleBot?: string | { index?: boolean; follow?: boolean; [key: string]: unknown };\n [key: string]: unknown;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string;\n siteName?: string;\n images?:\n | string\n | { url: string; width?: number; height?: number; alt?: string }\n | Array<string | { url: string; width?: number; height?: number; alt?: string }>;\n videos?: Array<{ url: string; width?: number; height?: number }>;\n audio?: Array<{ url: string }>;\n locale?: string;\n type?: string;\n publishedTime?: string;\n modifiedTime?: string;\n authors?: string[];\n };\n twitter?: {\n card?: string;\n site?: string;\n siteId?: string;\n title?: string;\n description?: string;\n images?:\n | string\n | { url: string; alt?: string; width?: number; height?: number }\n | Array<string | { url: string; alt?: string; width?: number; height?: number }>;\n creator?: string;\n creatorId?: string;\n };\n icons?: {\n icon?: string | Array<{ url: string; sizes?: string; type?: string; media?: string }>;\n shortcut?: string | string[];\n apple?: string | Array<{ url: string; sizes?: string; type?: string }>;\n other?: Array<{ rel: string; url: string; sizes?: string; type?: string }>;\n };\n manifest?: string;\n alternates?: {\n canonical?: string;\n languages?: Record<string, string>;\n media?: Record<string, string>;\n types?: Record<string, string>;\n };\n verification?: {\n google?: string;\n yahoo?: string;\n yandex?: string;\n other?: Record<string, string | string[]>;\n };\n metadataBase?: URL | null;\n appleWebApp?: {\n capable?: boolean;\n title?: string;\n statusBarStyle?: string;\n startupImage?: string | Array<{ url: string; media?: string }>;\n };\n formatDetection?: {\n email?: boolean;\n address?: boolean;\n telephone?: boolean;\n };\n category?: string;\n other?: Record<string, string | string[]>;\n [key: string]: unknown;\n}\n\n/**\n * Merge metadata from multiple sources (layouts + page).\n *\n * The list is ordered [rootLayout, nestedLayout, ..., page].\n * Title template from layouts applies to the page title but NOT to\n * the segment that defines the template itself. `title.absolute`\n * skips all templates. `title.default` is the fallback when no\n * child provides a title.\n *\n * Shallow merge: later entries override earlier ones (per Next.js docs).\n */\nexport function mergeMetadata(metadataList: Metadata[]): Metadata {\n if (metadataList.length === 0) return {};\n\n const merged: Metadata = {};\n\n // Track the most recent title template from LAYOUTS (not from page).\n // The page is always the last entry in metadataList.\n let parentTemplate: string | undefined;\n\n for (let i = 0; i < metadataList.length; i++) {\n const meta = metadataList[i];\n const isPage = i === metadataList.length - 1;\n\n // Collect template from layouts only (page templates are ignored per Next.js spec)\n if (!isPage && meta.title && typeof meta.title === \"object\" && meta.title.template) {\n parentTemplate = meta.title.template;\n }\n\n // Shallow merge — later entries override earlier for top-level keys\n for (const key of Object.keys(meta)) {\n if (key === \"title\") continue; // Handle title separately below\n (merged as Record<string, unknown>)[key] = (meta as Record<string, unknown>)[key];\n }\n\n // Title resolution\n if (meta.title !== undefined) {\n merged.title = meta.title;\n }\n }\n\n // Now resolve the final title, applying the parent template if applicable\n const finalTitle = merged.title;\n if (finalTitle) {\n if (typeof finalTitle === \"string\") {\n // Simple string title — apply parent template\n if (parentTemplate) {\n merged.title = parentTemplate.replace(\"%s\", finalTitle);\n }\n } else if (typeof finalTitle === \"object\") {\n if (finalTitle.absolute) {\n // Absolute title — skip all templates\n merged.title = finalTitle.absolute;\n } else if (finalTitle.default) {\n // Title object with default — this is used when the segment IS the\n // defining layout (its own default doesn't get template-wrapped)\n merged.title = finalTitle.default;\n } else if (finalTitle.template && !finalTitle.default && !finalTitle.absolute) {\n // Template only with no default — no title to render\n merged.title = undefined;\n }\n }\n }\n\n return merged;\n}\n\n/**\n * Resolve metadata from a module. Handles both static `metadata` export\n * and async `generateMetadata()` function.\n *\n * @param parent - A Promise that resolves to the accumulated (merged) metadata\n * from all ancestor segments. Passed as the second argument to\n * `generateMetadata()`, matching Next.js's eager-execution-with-serial-\n * resolution approach. If not provided, defaults to a promise that resolves\n * to an empty object (so `await parent` never throws).\n */\nexport async function resolveModuleMetadata(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]> = {},\n searchParams?: Record<string, string>,\n parent: Promise<Metadata> = Promise.resolve({}),\n): Promise<Metadata | null> {\n if (typeof mod.generateMetadata === \"function\") {\n // Next.js 16 passes params/searchParams as Promises (async pattern).\n // makeThenableParams() normalises null-prototype + preserves sync access.\n const asyncParams = makeThenableParams(params);\n const sp = searchParams ?? {};\n const asyncSp = makeThenableParams(sp);\n return await mod.generateMetadata({ params: asyncParams, searchParams: asyncSp }, parent);\n }\n if (mod.metadata && typeof mod.metadata === \"object\") {\n return mod.metadata as Metadata;\n }\n return null;\n}\n\n/**\n * React component that renders metadata as HTML head elements.\n * Used by the RSC entry to inject into the <head>.\n */\nexport function MetadataHead({ metadata }: { metadata: Metadata }) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Resolve metadataBase for URL composition\n const base = metadata.metadataBase;\n function resolveUrl(url: string | undefined): string | undefined {\n if (!url) return undefined;\n if (!base) return url;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\") || url.startsWith(\"//\")) return url;\n try {\n return new URL(url, base).toString();\n } catch {\n return url;\n }\n }\n\n // Title\n const title =\n typeof metadata.title === \"string\"\n ? metadata.title\n : typeof metadata.title === \"object\"\n ? metadata.title.absolute || metadata.title.default\n : undefined;\n if (title) {\n elements.push(<title key={key++}>{title}</title>);\n }\n\n // Description\n if (metadata.description) {\n elements.push(<meta key={key++} name=\"description\" content={metadata.description} />);\n }\n\n // Generator\n if (metadata.generator) {\n elements.push(<meta key={key++} name=\"generator\" content={metadata.generator} />);\n }\n\n // Application name\n if (metadata.applicationName) {\n elements.push(<meta key={key++} name=\"application-name\" content={metadata.applicationName} />);\n }\n\n // Referrer\n if (metadata.referrer) {\n elements.push(<meta key={key++} name=\"referrer\" content={metadata.referrer} />);\n }\n\n // Keywords\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(\",\") : metadata.keywords;\n elements.push(<meta key={key++} name=\"keywords\" content={kw} />);\n }\n\n // Authors\n if (metadata.authors) {\n const authorList = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n for (const author of authorList) {\n if (author.name) {\n elements.push(<meta key={key++} name=\"author\" content={author.name} />);\n }\n if (author.url) {\n elements.push(<link key={key++} rel=\"author\" href={author.url} />);\n }\n }\n }\n\n // Creator\n if (metadata.creator) {\n elements.push(<meta key={key++} name=\"creator\" content={metadata.creator} />);\n }\n\n // Publisher\n if (metadata.publisher) {\n elements.push(<meta key={key++} name=\"publisher\" content={metadata.publisher} />);\n }\n\n // Format detection\n if (metadata.formatDetection) {\n const parts: string[] = [];\n if (metadata.formatDetection.telephone === false) parts.push(\"telephone=no\");\n if (metadata.formatDetection.address === false) parts.push(\"address=no\");\n if (metadata.formatDetection.email === false) parts.push(\"email=no\");\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"format-detection\" content={parts.join(\", \")} />);\n }\n }\n\n // Category\n if (metadata.category) {\n elements.push(<meta key={key++} name=\"category\" content={metadata.category} />);\n }\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === \"string\") {\n elements.push(<meta key={key++} name=\"robots\" content={metadata.robots} />);\n } else {\n const { googleBot, ...robotsRest } = metadata.robots;\n const robotParts: string[] = [];\n for (const [k, v] of Object.entries(robotsRest)) {\n if (v === true) robotParts.push(k);\n else if (v === false) robotParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") robotParts.push(`${k}:${v}`);\n }\n if (robotParts.length > 0) {\n elements.push(<meta key={key++} name=\"robots\" content={robotParts.join(\", \")} />);\n }\n // googlebot\n if (googleBot) {\n if (typeof googleBot === \"string\") {\n elements.push(<meta key={key++} name=\"googlebot\" content={googleBot} />);\n } else {\n const gbParts: string[] = [];\n for (const [k, v] of Object.entries(googleBot)) {\n if (v === true) gbParts.push(k);\n else if (v === false) gbParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") gbParts.push(`${k}:${v}`);\n }\n if (gbParts.length > 0) {\n elements.push(<meta key={key++} name=\"googlebot\" content={gbParts.join(\", \")} />);\n }\n }\n }\n }\n }\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.title) elements.push(<meta key={key++} property=\"og:title\" content={og.title} />);\n if (og.description)\n elements.push(<meta key={key++} property=\"og:description\" content={og.description} />);\n if (og.url)\n elements.push(<meta key={key++} property=\"og:url\" content={resolveUrl(og.url) ?? og.url} />);\n if (og.siteName)\n elements.push(<meta key={key++} property=\"og:site_name\" content={og.siteName} />);\n if (og.type) elements.push(<meta key={key++} property=\"og:type\" content={og.type} />);\n if (og.locale) elements.push(<meta key={key++} property=\"og:locale\" content={og.locale} />);\n if (og.publishedTime)\n elements.push(\n <meta key={key++} property=\"article:published_time\" content={og.publishedTime} />,\n );\n if (og.modifiedTime)\n elements.push(\n <meta key={key++} property=\"article:modified_time\" content={og.modifiedTime} />,\n );\n if (og.authors) {\n for (const author of og.authors) {\n elements.push(<meta key={key++} property=\"article:author\" content={author} />);\n }\n }\n if (og.images) {\n const imgList =\n typeof og.images === \"string\"\n ? [{ url: og.images }]\n : Array.isArray(og.images)\n ? og.images\n : [og.images];\n for (const img of imgList) {\n const imgUrl = typeof img === \"string\" ? img : img.url;\n elements.push(\n <meta key={key++} property=\"og:image\" content={resolveUrl(imgUrl) ?? imgUrl} />,\n );\n if (typeof img !== \"string\") {\n if (img.width)\n elements.push(\n <meta key={key++} property=\"og:image:width\" content={String(img.width)} />,\n );\n if (img.height)\n elements.push(\n <meta key={key++} property=\"og:image:height\" content={String(img.height)} />,\n );\n if (img.alt)\n elements.push(<meta key={key++} property=\"og:image:alt\" content={img.alt} />);\n }\n }\n }\n if (og.videos) {\n for (const video of og.videos) {\n elements.push(\n <meta key={key++} property=\"og:video\" content={resolveUrl(video.url) ?? video.url} />,\n );\n if (video.width)\n elements.push(\n <meta key={key++} property=\"og:video:width\" content={String(video.width)} />,\n );\n if (video.height)\n elements.push(\n <meta key={key++} property=\"og:video:height\" content={String(video.height)} />,\n );\n }\n }\n if (og.audio) {\n for (const audio of og.audio) {\n elements.push(\n <meta key={key++} property=\"og:audio\" content={resolveUrl(audio.url) ?? audio.url} />,\n );\n }\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) elements.push(<meta key={key++} name=\"twitter:card\" content={tw.card} />);\n if (tw.site) elements.push(<meta key={key++} name=\"twitter:site\" content={tw.site} />);\n if (tw.siteId) elements.push(<meta key={key++} name=\"twitter:site:id\" content={tw.siteId} />);\n if (tw.title) elements.push(<meta key={key++} name=\"twitter:title\" content={tw.title} />);\n if (tw.description)\n elements.push(<meta key={key++} name=\"twitter:description\" content={tw.description} />);\n if (tw.creator) elements.push(<meta key={key++} name=\"twitter:creator\" content={tw.creator} />);\n if (tw.creatorId)\n elements.push(<meta key={key++} name=\"twitter:creator:id\" content={tw.creatorId} />);\n if (tw.images) {\n const imgList =\n typeof tw.images === \"string\"\n ? [tw.images]\n : Array.isArray(tw.images)\n ? tw.images\n : [tw.images];\n for (const img of imgList) {\n const imgUrl = typeof img === \"string\" ? img : img.url;\n elements.push(\n <meta key={key++} name=\"twitter:image\" content={resolveUrl(imgUrl) ?? imgUrl} />,\n );\n if (typeof img !== \"string\" && img.alt) {\n elements.push(<meta key={key++} name=\"twitter:image:alt\" content={img.alt} />);\n }\n }\n }\n }\n\n // Icons\n if (metadata.icons) {\n const { icon, shortcut, apple, other } = metadata.icons;\n // Shortcut icon\n if (shortcut) {\n const shortcuts = Array.isArray(shortcut) ? shortcut : [shortcut];\n for (const s of shortcuts) {\n elements.push(<link key={key++} rel=\"shortcut icon\" href={resolveUrl(s) ?? s} />);\n }\n }\n // Icon\n if (icon) {\n const icons = typeof icon === \"string\" ? [{ url: icon }] : icon;\n for (const i of icons) {\n elements.push(\n <link\n key={key++}\n rel=\"icon\"\n href={resolveUrl(i.url) ?? i.url}\n {...(i.sizes ? { sizes: i.sizes } : {})}\n {...(i.type ? { type: i.type } : {})}\n {...(i.media ? { media: i.media } : {})}\n />,\n );\n }\n }\n // Apple touch icon\n if (apple) {\n const apples = typeof apple === \"string\" ? [{ url: apple }] : apple;\n for (const a of apples) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-icon\"\n href={resolveUrl(a.url) ?? a.url}\n {...(a.sizes ? { sizes: a.sizes } : {})}\n {...(a.type ? { type: a.type } : {})}\n />,\n );\n }\n }\n // Other custom icon relations\n if (other) {\n for (const o of other) {\n elements.push(\n <link\n key={key++}\n rel={o.rel}\n href={resolveUrl(o.url) ?? o.url}\n {...(o.sizes ? { sizes: o.sizes } : {})}\n />,\n );\n }\n }\n }\n\n // Manifest\n if (metadata.manifest) {\n elements.push(\n <link key={key++} rel=\"manifest\" href={resolveUrl(metadata.manifest) ?? metadata.manifest} />,\n );\n }\n\n // Alternates\n if (metadata.alternates) {\n const alt = metadata.alternates;\n if (alt.canonical) {\n elements.push(\n <link key={key++} rel=\"canonical\" href={resolveUrl(alt.canonical) ?? alt.canonical} />,\n );\n }\n if (alt.languages) {\n for (const [lang, href] of Object.entries(alt.languages)) {\n elements.push(\n <link key={key++} rel=\"alternate\" hrefLang={lang} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n if (alt.media) {\n for (const [media, href] of Object.entries(alt.media)) {\n elements.push(\n <link key={key++} rel=\"alternate\" media={media} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n if (alt.types) {\n for (const [type, href] of Object.entries(alt.types)) {\n elements.push(\n <link key={key++} rel=\"alternate\" type={type} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n }\n\n // Verification\n if (metadata.verification) {\n const v = metadata.verification;\n if (v.google)\n elements.push(<meta key={key++} name=\"google-site-verification\" content={v.google} />);\n if (v.yahoo) elements.push(<meta key={key++} name=\"y_key\" content={v.yahoo} />);\n if (v.yandex) elements.push(<meta key={key++} name=\"yandex-verification\" content={v.yandex} />);\n if (v.other) {\n for (const [name, content] of Object.entries(v.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n }\n\n // Apple Web App\n if (metadata.appleWebApp) {\n const awa = metadata.appleWebApp;\n if (awa.capable !== false) {\n elements.push(<meta key={key++} name=\"mobile-web-app-capable\" content=\"yes\" />);\n }\n if (awa.title) {\n elements.push(<meta key={key++} name=\"apple-mobile-web-app-title\" content={awa.title} />);\n }\n if (awa.statusBarStyle) {\n elements.push(\n <meta\n key={key++}\n name=\"apple-mobile-web-app-status-bar-style\"\n content={awa.statusBarStyle}\n />,\n );\n }\n if (awa.startupImage) {\n const imgs =\n typeof awa.startupImage === \"string\" ? [{ url: awa.startupImage }] : awa.startupImage;\n for (const img of imgs) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-startup-image\"\n href={resolveUrl(img.url) ?? img.url}\n {...(img.media ? { media: img.media } : {})}\n />,\n );\n }\n }\n }\n\n // Other custom meta tags\n if (metadata.other) {\n for (const [name, content] of Object.entries(metadata.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n\n return <>{elements}</>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/shims/metadata.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Metadata support for App Router.\n *\n * Handles `export const metadata` and `export async function generateMetadata()`.\n * Resolves metadata from layouts and pages (pages override layouts).\n */\nimport React from \"react\";\n\n// ---------------------------------------------------------------------------\n// Viewport types and resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Normalize null-prototype objects from matchPattern() into thenable objects.\n * See entries/app-rsc-entry.ts makeThenableParams() for full explanation.\n */\nfunction makeThenableParams<T extends Record<string, unknown>>(obj: T): Promise<T> & T {\n const plain = { ...obj } as T;\n return Object.assign(Promise.resolve(plain), plain);\n}\n\nexport interface Viewport {\n /** Viewport width (default: \"device-width\") */\n width?: string | number;\n /** Viewport height */\n height?: string | number;\n /** Initial scale */\n initialScale?: number;\n /** Minimum scale */\n minimumScale?: number;\n /** Maximum scale */\n maximumScale?: number;\n /** Whether user can scale */\n userScalable?: boolean;\n /** Theme color — single color or array of { media, color } */\n themeColor?: string | Array<{ media?: string; color: string }>;\n /** Color scheme: 'light' | 'dark' | 'light dark' | 'normal' */\n colorScheme?: string;\n}\n\n/**\n * Resolve viewport config from a module. Handles both static `viewport` export\n * and async `generateViewport()` function.\n */\nexport async function resolveModuleViewport(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]>,\n): Promise<Viewport | null> {\n if (typeof mod.generateViewport === \"function\") {\n const asyncParams = makeThenableParams(params);\n return await mod.generateViewport({ params: asyncParams });\n }\n if (mod.viewport && typeof mod.viewport === \"object\") {\n return mod.viewport as Viewport;\n }\n return null;\n}\n\n/**\n * Merge viewport configs from multiple sources (layouts + page).\n * Later entries override earlier ones.\n */\nexport const DEFAULT_VIEWPORT: Viewport = {\n width: \"device-width\",\n initialScale: 1,\n};\n\nexport function mergeViewport(viewportList: Viewport[]): Viewport {\n const merged: Viewport = { ...DEFAULT_VIEWPORT };\n for (const vp of viewportList) {\n Object.assign(merged, vp);\n }\n return merged;\n}\n\n/**\n * React component that renders viewport meta tags into <head>.\n */\nexport function ViewportHead({ viewport }: { viewport: Viewport }) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Build viewport content string\n const parts: string[] = [];\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`);\n if (viewport.height !== undefined) parts.push(`height=${viewport.height}`);\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`);\n if (viewport.minimumScale !== undefined) parts.push(`minimum-scale=${viewport.minimumScale}`);\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`);\n if (viewport.userScalable !== undefined)\n parts.push(`user-scalable=${viewport.userScalable ? \"yes\" : \"no\"}`);\n\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"viewport\" content={parts.join(\", \")} />);\n }\n\n // Theme color\n if (viewport.themeColor) {\n if (typeof viewport.themeColor === \"string\") {\n elements.push(<meta key={key++} name=\"theme-color\" content={viewport.themeColor} />);\n } else if (Array.isArray(viewport.themeColor)) {\n for (const entry of viewport.themeColor) {\n elements.push(\n <meta\n key={key++}\n name=\"theme-color\"\n content={entry.color}\n {...(entry.media ? { media: entry.media } : {})}\n />,\n );\n }\n }\n }\n\n // Color scheme\n if (viewport.colorScheme) {\n elements.push(<meta key={key++} name=\"color-scheme\" content={viewport.colorScheme} />);\n }\n\n return <>{elements}</>;\n}\n\n// ---------------------------------------------------------------------------\n// Metadata types and resolution\n// ---------------------------------------------------------------------------\n\nexport interface Metadata {\n title?: string | { default?: string; template?: string; absolute?: string };\n description?: string;\n generator?: string;\n applicationName?: string;\n referrer?: string;\n keywords?: string | string[];\n authors?: Array<{ name?: string; url?: string }> | { name?: string; url?: string };\n creator?: string;\n publisher?: string;\n robots?:\n | string\n | {\n index?: boolean;\n follow?: boolean;\n googleBot?: string | { index?: boolean; follow?: boolean; [key: string]: unknown };\n [key: string]: unknown;\n };\n openGraph?: {\n title?: string;\n description?: string;\n url?: string;\n siteName?: string;\n images?:\n | string\n | { url: string; width?: number; height?: number; alt?: string }\n | Array<string | { url: string; width?: number; height?: number; alt?: string }>;\n videos?: Array<{ url: string; width?: number; height?: number }>;\n audio?: Array<{ url: string }>;\n locale?: string;\n type?: string;\n publishedTime?: string;\n modifiedTime?: string;\n authors?: string[];\n };\n twitter?: {\n card?: string;\n site?: string;\n siteId?: string;\n title?: string;\n description?: string;\n images?:\n | string\n | { url: string; alt?: string; width?: number; height?: number }\n | Array<string | { url: string; alt?: string; width?: number; height?: number }>;\n creator?: string;\n creatorId?: string;\n players?: TwitterPlayerDescriptor | TwitterPlayerDescriptor[];\n app?: TwitterAppDescriptor;\n };\n icons?: {\n icon?: string | Array<{ url: string; sizes?: string; type?: string; media?: string }>;\n shortcut?: string | string[];\n apple?: string | Array<{ url: string; sizes?: string; type?: string }>;\n other?: Array<{ rel: string; url: string; sizes?: string; type?: string }>;\n };\n manifest?: string;\n alternates?: {\n canonical?: string;\n languages?: Record<string, string>;\n media?: Record<string, string>;\n types?: Record<string, string>;\n };\n verification?: {\n google?: string;\n yahoo?: string;\n yandex?: string;\n other?: Record<string, string | string[]>;\n };\n metadataBase?: URL | null;\n appleWebApp?: {\n capable?: boolean;\n title?: string;\n statusBarStyle?: string;\n startupImage?: string | Array<{ url: string; media?: string }>;\n };\n formatDetection?: {\n email?: boolean;\n address?: boolean;\n telephone?: boolean;\n };\n category?: string;\n itunes?: {\n appId: string;\n appArgument?: string;\n };\n appLinks?: {\n ios?: AppLinksApple | AppLinksApple[];\n iphone?: AppLinksApple | AppLinksApple[];\n ipad?: AppLinksApple | AppLinksApple[];\n android?: AppLinksAndroid | AppLinksAndroid[];\n windows_phone?: AppLinksWindows | AppLinksWindows[];\n windows?: AppLinksWindows | AppLinksWindows[];\n windows_universal?: AppLinksWindows | AppLinksWindows[];\n web?: AppLinksWeb | AppLinksWeb[];\n };\n other?: Record<string, string | string[]>;\n [key: string]: unknown;\n}\n\ninterface AppLinksApple {\n url: string | URL;\n app_store_id?: string | number;\n app_name?: string;\n}\n\ninterface AppLinksAndroid {\n package: string;\n url?: string | URL;\n class?: string;\n app_name?: string;\n}\n\ninterface AppLinksWindows {\n url: string | URL;\n app_id?: string;\n app_name?: string;\n}\n\ninterface AppLinksWeb {\n url: string | URL;\n should_fallback?: boolean;\n}\n\ninterface TwitterPlayerDescriptor {\n playerUrl: string | URL;\n streamUrl: string | URL;\n width: number;\n height: number;\n}\n\ninterface TwitterAppDescriptor {\n id: {\n iphone?: string | number;\n ipad?: string | number;\n googleplay?: string;\n };\n url?: {\n iphone?: string | URL;\n ipad?: string | URL;\n googleplay?: string | URL;\n };\n name?: string;\n}\n\n/**\n * Merge metadata from multiple sources (layouts + page).\n *\n * The list is ordered [rootLayout, nestedLayout, ..., page].\n * Title template from layouts applies to the page title but NOT to\n * the segment that defines the template itself. `title.absolute`\n * skips all templates. `title.default` is the fallback when no\n * child provides a title.\n *\n * Shallow merge: later entries override earlier ones (per Next.js docs).\n */\nexport function mergeMetadata(metadataList: Metadata[]): Metadata {\n if (metadataList.length === 0) return {};\n\n const merged: Metadata = {};\n\n // Track the most recent title template from LAYOUTS (not from page).\n // The page is always the last entry in metadataList.\n let parentTemplate: string | undefined;\n\n for (let i = 0; i < metadataList.length; i++) {\n const meta = metadataList[i];\n const isPage = i === metadataList.length - 1;\n\n // Collect template from layouts only (page templates are ignored per Next.js spec)\n if (!isPage && meta.title && typeof meta.title === \"object\" && meta.title.template) {\n parentTemplate = meta.title.template;\n }\n\n // Shallow merge — later entries override earlier for top-level keys\n for (const key of Object.keys(meta)) {\n if (key === \"title\") continue; // Handle title separately below\n (merged as Record<string, unknown>)[key] = (meta as Record<string, unknown>)[key];\n }\n\n // Title resolution\n if (meta.title !== undefined) {\n merged.title = meta.title;\n }\n }\n\n // Now resolve the final title, applying the parent template if applicable\n const finalTitle = merged.title;\n if (finalTitle) {\n if (typeof finalTitle === \"string\") {\n // Simple string title — apply parent template\n if (parentTemplate) {\n merged.title = parentTemplate.replace(\"%s\", finalTitle);\n }\n } else if (typeof finalTitle === \"object\") {\n if (finalTitle.absolute) {\n // Absolute title — skip all templates\n merged.title = finalTitle.absolute;\n } else if (finalTitle.default) {\n // Title object with default — this is used when the segment IS the\n // defining layout (its own default doesn't get template-wrapped)\n merged.title = finalTitle.default;\n } else if (finalTitle.template && !finalTitle.default && !finalTitle.absolute) {\n // Template only with no default — no title to render\n merged.title = undefined;\n }\n }\n }\n\n return merged;\n}\n\n/**\n * Resolve metadata from a module. Handles both static `metadata` export\n * and async `generateMetadata()` function.\n *\n * @param parent - A Promise that resolves to the accumulated (merged) metadata\n * from all ancestor segments. Passed as the second argument to\n * `generateMetadata()`, matching Next.js's eager-execution-with-serial-\n * resolution approach. If not provided, defaults to a promise that resolves\n * to an empty object (so `await parent` never throws).\n */\nexport async function resolveModuleMetadata(\n mod: Record<string, unknown>,\n params: Record<string, string | string[]> = {},\n searchParams?: Record<string, string>,\n parent: Promise<Metadata> = Promise.resolve({}),\n): Promise<Metadata | null> {\n if (typeof mod.generateMetadata === \"function\") {\n // Next.js 16 passes params/searchParams as Promises (async pattern).\n // makeThenableParams() normalises null-prototype + preserves sync access.\n const asyncParams = makeThenableParams(params);\n const sp = searchParams ?? {};\n const asyncSp = makeThenableParams(sp);\n return await mod.generateMetadata({ params: asyncParams, searchParams: asyncSp }, parent);\n }\n if (mod.metadata && typeof mod.metadata === \"object\") {\n return mod.metadata as Metadata;\n }\n return null;\n}\n\n/**\n * React component that renders metadata as HTML head elements.\n * Used by the RSC entry to inject into the <head>.\n */\nexport function MetadataHead({ metadata }: { metadata: Metadata }) {\n const elements: React.ReactElement[] = [];\n let key = 0;\n\n // Resolve metadataBase for URL composition\n const base = metadata.metadataBase;\n function resolveUrl(url: string | undefined): string | undefined {\n if (!url) return undefined;\n if (!base) return url;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\") || url.startsWith(\"//\")) return url;\n try {\n return new URL(url, base).toString();\n } catch {\n return url;\n }\n }\n\n // Title\n const title =\n typeof metadata.title === \"string\"\n ? metadata.title\n : typeof metadata.title === \"object\"\n ? metadata.title.absolute || metadata.title.default\n : undefined;\n if (title) {\n elements.push(<title key={key++}>{title}</title>);\n }\n\n // Description\n if (metadata.description) {\n elements.push(<meta key={key++} name=\"description\" content={metadata.description} />);\n }\n\n // Generator\n if (metadata.generator) {\n elements.push(<meta key={key++} name=\"generator\" content={metadata.generator} />);\n }\n\n // Application name\n if (metadata.applicationName) {\n elements.push(<meta key={key++} name=\"application-name\" content={metadata.applicationName} />);\n }\n\n // Referrer\n if (metadata.referrer) {\n elements.push(<meta key={key++} name=\"referrer\" content={metadata.referrer} />);\n }\n\n // Keywords\n if (metadata.keywords) {\n const kw = Array.isArray(metadata.keywords) ? metadata.keywords.join(\",\") : metadata.keywords;\n elements.push(<meta key={key++} name=\"keywords\" content={kw} />);\n }\n\n // Authors\n if (metadata.authors) {\n const authorList = Array.isArray(metadata.authors) ? metadata.authors : [metadata.authors];\n for (const author of authorList) {\n if (author.name) {\n elements.push(<meta key={key++} name=\"author\" content={author.name} />);\n }\n if (author.url) {\n elements.push(<link key={key++} rel=\"author\" href={author.url} />);\n }\n }\n }\n\n // Creator\n if (metadata.creator) {\n elements.push(<meta key={key++} name=\"creator\" content={metadata.creator} />);\n }\n\n // Publisher\n if (metadata.publisher) {\n elements.push(<meta key={key++} name=\"publisher\" content={metadata.publisher} />);\n }\n\n // Format detection\n if (metadata.formatDetection) {\n const parts: string[] = [];\n if (metadata.formatDetection.telephone === false) parts.push(\"telephone=no\");\n if (metadata.formatDetection.address === false) parts.push(\"address=no\");\n if (metadata.formatDetection.email === false) parts.push(\"email=no\");\n if (parts.length > 0) {\n elements.push(<meta key={key++} name=\"format-detection\" content={parts.join(\", \")} />);\n }\n }\n\n // Category\n if (metadata.category) {\n elements.push(<meta key={key++} name=\"category\" content={metadata.category} />);\n }\n\n // Robots\n if (metadata.robots) {\n if (typeof metadata.robots === \"string\") {\n elements.push(<meta key={key++} name=\"robots\" content={metadata.robots} />);\n } else {\n const { googleBot, ...robotsRest } = metadata.robots;\n const robotParts: string[] = [];\n for (const [k, v] of Object.entries(robotsRest)) {\n if (v === true) robotParts.push(k);\n else if (v === false) robotParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") robotParts.push(`${k}:${v}`);\n }\n if (robotParts.length > 0) {\n elements.push(<meta key={key++} name=\"robots\" content={robotParts.join(\", \")} />);\n }\n // googlebot\n if (googleBot) {\n if (typeof googleBot === \"string\") {\n elements.push(<meta key={key++} name=\"googlebot\" content={googleBot} />);\n } else {\n const gbParts: string[] = [];\n for (const [k, v] of Object.entries(googleBot)) {\n if (v === true) gbParts.push(k);\n else if (v === false) gbParts.push(`no${k}`);\n else if (typeof v === \"string\" || typeof v === \"number\") gbParts.push(`${k}:${v}`);\n }\n if (gbParts.length > 0) {\n elements.push(<meta key={key++} name=\"googlebot\" content={gbParts.join(\", \")} />);\n }\n }\n }\n }\n }\n\n // Open Graph\n if (metadata.openGraph) {\n const og = metadata.openGraph;\n if (og.title) elements.push(<meta key={key++} property=\"og:title\" content={og.title} />);\n if (og.description)\n elements.push(<meta key={key++} property=\"og:description\" content={og.description} />);\n if (og.url)\n elements.push(<meta key={key++} property=\"og:url\" content={resolveUrl(og.url) ?? og.url} />);\n if (og.siteName)\n elements.push(<meta key={key++} property=\"og:site_name\" content={og.siteName} />);\n if (og.type) elements.push(<meta key={key++} property=\"og:type\" content={og.type} />);\n if (og.locale) elements.push(<meta key={key++} property=\"og:locale\" content={og.locale} />);\n if (og.publishedTime)\n elements.push(\n <meta key={key++} property=\"article:published_time\" content={og.publishedTime} />,\n );\n if (og.modifiedTime)\n elements.push(\n <meta key={key++} property=\"article:modified_time\" content={og.modifiedTime} />,\n );\n if (og.authors) {\n for (const author of og.authors) {\n elements.push(<meta key={key++} property=\"article:author\" content={author} />);\n }\n }\n if (og.images) {\n const imgList =\n typeof og.images === \"string\"\n ? [{ url: og.images }]\n : Array.isArray(og.images)\n ? og.images\n : [og.images];\n for (const img of imgList) {\n const imgUrl = typeof img === \"string\" ? img : img.url;\n elements.push(\n <meta key={key++} property=\"og:image\" content={resolveUrl(imgUrl) ?? imgUrl} />,\n );\n if (typeof img !== \"string\") {\n if (img.width)\n elements.push(\n <meta key={key++} property=\"og:image:width\" content={String(img.width)} />,\n );\n if (img.height)\n elements.push(\n <meta key={key++} property=\"og:image:height\" content={String(img.height)} />,\n );\n if (img.alt)\n elements.push(<meta key={key++} property=\"og:image:alt\" content={img.alt} />);\n }\n }\n }\n if (og.videos) {\n for (const video of og.videos) {\n elements.push(\n <meta key={key++} property=\"og:video\" content={resolveUrl(video.url) ?? video.url} />,\n );\n if (video.width)\n elements.push(\n <meta key={key++} property=\"og:video:width\" content={String(video.width)} />,\n );\n if (video.height)\n elements.push(\n <meta key={key++} property=\"og:video:height\" content={String(video.height)} />,\n );\n }\n }\n if (og.audio) {\n for (const audio of og.audio) {\n elements.push(\n <meta key={key++} property=\"og:audio\" content={resolveUrl(audio.url) ?? audio.url} />,\n );\n }\n }\n }\n\n // Twitter\n if (metadata.twitter) {\n const tw = metadata.twitter;\n if (tw.card) elements.push(<meta key={key++} name=\"twitter:card\" content={tw.card} />);\n if (tw.site) elements.push(<meta key={key++} name=\"twitter:site\" content={tw.site} />);\n if (tw.siteId) elements.push(<meta key={key++} name=\"twitter:site:id\" content={tw.siteId} />);\n if (tw.title) elements.push(<meta key={key++} name=\"twitter:title\" content={tw.title} />);\n if (tw.description)\n elements.push(<meta key={key++} name=\"twitter:description\" content={tw.description} />);\n if (tw.creator) elements.push(<meta key={key++} name=\"twitter:creator\" content={tw.creator} />);\n if (tw.creatorId)\n elements.push(<meta key={key++} name=\"twitter:creator:id\" content={tw.creatorId} />);\n if (tw.images) {\n const imgList =\n typeof tw.images === \"string\"\n ? [tw.images]\n : Array.isArray(tw.images)\n ? tw.images\n : [tw.images];\n for (const img of imgList) {\n const imgUrl = typeof img === \"string\" ? img : img.url;\n elements.push(\n <meta key={key++} name=\"twitter:image\" content={resolveUrl(imgUrl) ?? imgUrl} />,\n );\n if (typeof img !== \"string\" && img.alt) {\n elements.push(<meta key={key++} name=\"twitter:image:alt\" content={img.alt} />);\n }\n }\n }\n // Twitter player cards\n if (tw.players) {\n const players = Array.isArray(tw.players) ? tw.players : [tw.players];\n for (const player of players) {\n const playerUrl = player.playerUrl.toString();\n const streamUrl = player.streamUrl.toString();\n elements.push(\n <meta key={key++} name=\"twitter:player\" content={resolveUrl(playerUrl) ?? playerUrl} />,\n );\n elements.push(\n <meta\n key={key++}\n name=\"twitter:player:stream\"\n content={resolveUrl(streamUrl) ?? streamUrl}\n />,\n );\n elements.push(\n <meta key={key++} name=\"twitter:player:width\" content={String(player.width)} />,\n );\n elements.push(\n <meta key={key++} name=\"twitter:player:height\" content={String(player.height)} />,\n );\n }\n }\n // Twitter app cards\n if (tw.app) {\n const { app } = tw;\n for (const platform of [\"iphone\", \"ipad\", \"googleplay\"] as const) {\n if (app.name) {\n elements.push(\n <meta key={key++} name={`twitter:app:name:${platform}`} content={app.name} />,\n );\n }\n if (app.id[platform] !== undefined) {\n elements.push(\n <meta\n key={key++}\n name={`twitter:app:id:${platform}`}\n content={String(app.id[platform])}\n />,\n );\n }\n if (app.url?.[platform] !== undefined) {\n const appUrl = app.url[platform]!.toString();\n elements.push(\n <meta\n key={key++}\n name={`twitter:app:url:${platform}`}\n content={resolveUrl(appUrl) ?? appUrl}\n />,\n );\n }\n }\n }\n }\n\n // Icons\n if (metadata.icons) {\n const { icon, shortcut, apple, other } = metadata.icons;\n // Shortcut icon\n if (shortcut) {\n const shortcuts = Array.isArray(shortcut) ? shortcut : [shortcut];\n for (const s of shortcuts) {\n elements.push(<link key={key++} rel=\"shortcut icon\" href={resolveUrl(s) ?? s} />);\n }\n }\n // Icon\n if (icon) {\n const icons = typeof icon === \"string\" ? [{ url: icon }] : icon;\n for (const i of icons) {\n elements.push(\n <link\n key={key++}\n rel=\"icon\"\n href={resolveUrl(i.url) ?? i.url}\n {...(i.sizes ? { sizes: i.sizes } : {})}\n {...(i.type ? { type: i.type } : {})}\n {...(i.media ? { media: i.media } : {})}\n />,\n );\n }\n }\n // Apple touch icon\n if (apple) {\n const apples = typeof apple === \"string\" ? [{ url: apple }] : apple;\n for (const a of apples) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-icon\"\n href={resolveUrl(a.url) ?? a.url}\n {...(a.sizes ? { sizes: a.sizes } : {})}\n {...(a.type ? { type: a.type } : {})}\n />,\n );\n }\n }\n // Other custom icon relations\n if (other) {\n for (const o of other) {\n elements.push(\n <link\n key={key++}\n rel={o.rel}\n href={resolveUrl(o.url) ?? o.url}\n {...(o.sizes ? { sizes: o.sizes } : {})}\n />,\n );\n }\n }\n }\n\n // Manifest\n if (metadata.manifest) {\n elements.push(\n <link key={key++} rel=\"manifest\" href={resolveUrl(metadata.manifest) ?? metadata.manifest} />,\n );\n }\n\n // Alternates\n if (metadata.alternates) {\n const alt = metadata.alternates;\n if (alt.canonical) {\n elements.push(\n <link key={key++} rel=\"canonical\" href={resolveUrl(alt.canonical) ?? alt.canonical} />,\n );\n }\n if (alt.languages) {\n for (const [lang, href] of Object.entries(alt.languages)) {\n elements.push(\n <link key={key++} rel=\"alternate\" hrefLang={lang} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n if (alt.media) {\n for (const [media, href] of Object.entries(alt.media)) {\n elements.push(\n <link key={key++} rel=\"alternate\" media={media} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n if (alt.types) {\n for (const [type, href] of Object.entries(alt.types)) {\n elements.push(\n <link key={key++} rel=\"alternate\" type={type} href={resolveUrl(href) ?? href} />,\n );\n }\n }\n }\n\n // Verification\n if (metadata.verification) {\n const v = metadata.verification;\n if (v.google)\n elements.push(<meta key={key++} name=\"google-site-verification\" content={v.google} />);\n if (v.yahoo) elements.push(<meta key={key++} name=\"y_key\" content={v.yahoo} />);\n if (v.yandex) elements.push(<meta key={key++} name=\"yandex-verification\" content={v.yandex} />);\n if (v.other) {\n for (const [name, content] of Object.entries(v.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n }\n\n // Apple Web App\n if (metadata.appleWebApp) {\n const awa = metadata.appleWebApp;\n if (awa.capable !== false) {\n elements.push(<meta key={key++} name=\"mobile-web-app-capable\" content=\"yes\" />);\n }\n if (awa.title) {\n elements.push(<meta key={key++} name=\"apple-mobile-web-app-title\" content={awa.title} />);\n }\n if (awa.statusBarStyle) {\n elements.push(\n <meta\n key={key++}\n name=\"apple-mobile-web-app-status-bar-style\"\n content={awa.statusBarStyle}\n />,\n );\n }\n if (awa.startupImage) {\n const imgs =\n typeof awa.startupImage === \"string\" ? [{ url: awa.startupImage }] : awa.startupImage;\n for (const img of imgs) {\n elements.push(\n <link\n key={key++}\n rel=\"apple-touch-startup-image\"\n href={resolveUrl(img.url) ?? img.url}\n {...(img.media ? { media: img.media } : {})}\n />,\n );\n }\n }\n }\n\n // iTunes\n if (metadata.itunes) {\n const { appId, appArgument } = metadata.itunes;\n let content = `app-id=${appId}`;\n if (appArgument) {\n content += `, app-argument=${appArgument}`;\n }\n elements.push(<meta key={key++} name=\"apple-itunes-app\" content={content} />);\n }\n\n // App Links\n if (metadata.appLinks) {\n const al = metadata.appLinks;\n const platforms = [\n \"ios\",\n \"iphone\",\n \"ipad\",\n \"android\",\n \"windows_phone\",\n \"windows\",\n \"windows_universal\",\n \"web\",\n ] as const;\n for (const platform of platforms) {\n const entries = al[platform];\n if (!entries) continue;\n const list = Array.isArray(entries) ? entries : [entries];\n for (const entry of list) {\n for (const [k, v] of Object.entries(entry)) {\n if (v === undefined || v === null) continue;\n const str = String(v);\n const content = k === \"url\" ? (resolveUrl(str) ?? str) : str;\n elements.push(<meta key={key++} property={`al:${platform}:${k}`} content={content} />);\n }\n }\n }\n }\n\n // Other custom meta tags\n if (metadata.other) {\n for (const [name, content] of Object.entries(metadata.other)) {\n const values = Array.isArray(content) ? content : [content];\n for (const val of values) {\n elements.push(<meta key={key++} name={name} content={val} />);\n }\n }\n }\n\n return <>{elements}</>;\n}\n"]}
|
|
@@ -39,6 +39,8 @@ export declare function getNavigationContext(): NavigationContext | null;
|
|
|
39
39
|
* Called by the framework entry before rendering each request.
|
|
40
40
|
*/
|
|
41
41
|
export declare function setNavigationContext(ctx: NavigationContext | null): void;
|
|
42
|
+
/** Maximum number of entries in the RSC prefetch cache. */
|
|
43
|
+
export declare const MAX_PREFETCH_CACHE_SIZE = 50;
|
|
42
44
|
/** TTL for prefetch cache entries in ms (matches Next.js static prefetch TTL). */
|
|
43
45
|
export declare const PREFETCH_CACHE_TTL = 30000;
|
|
44
46
|
export interface PrefetchCacheEntry {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/shims/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAyB1E,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,OAAO,CACnD,CAAC,CAAC,QAAQ,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAC3C,GAAG,IAGM,CAAC;AAEX;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAKxE;AAuBD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,eAAe,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CAC3C;AAgCD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE;IACjD,gBAAgB,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,wBAAwB,EAAE,MAAM,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC;IACrD,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACxC,GAAG,IAAI,CAKP;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAE/D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAExE;
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/shims/navigation.ts"],"names":[],"mappings":"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"}
|
package/dist/shims/navigation.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// would throw at link time for missing bindings. With `import * as React`, the
|
|
11
11
|
// bindings are just `undefined` on the namespace object and we can guard at runtime.
|
|
12
12
|
import * as React from "react";
|
|
13
|
-
import {
|
|
13
|
+
import { toBrowserNavigationHref, toSameOriginAppPath } from "./url-utils.js";
|
|
14
14
|
import { stripBasePath } from "../utils/base-path.js";
|
|
15
15
|
import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
|
|
16
16
|
// ─── Layout segment context ───────────────────────────────────────────────────
|
|
@@ -116,17 +116,11 @@ export function setNavigationContext(ctx) {
|
|
|
116
116
|
const isServer = typeof window === "undefined";
|
|
117
117
|
/** basePath from next.config.js, injected by the plugin at build time */
|
|
118
118
|
const __basePath = process.env.__NEXT_ROUTER_BASEPATH ?? "";
|
|
119
|
-
/** Prepend basePath to a path for browser URLs / fetches */
|
|
120
|
-
function withBasePath(p) {
|
|
121
|
-
if (!__basePath)
|
|
122
|
-
return p;
|
|
123
|
-
return __basePath + p;
|
|
124
|
-
}
|
|
125
119
|
// ---------------------------------------------------------------------------
|
|
126
120
|
// RSC prefetch cache utilities (shared between link.tsx and browser entry)
|
|
127
121
|
// ---------------------------------------------------------------------------
|
|
128
122
|
/** Maximum number of entries in the RSC prefetch cache. */
|
|
129
|
-
const MAX_PREFETCH_CACHE_SIZE = 50;
|
|
123
|
+
export const MAX_PREFETCH_CACHE_SIZE = 50;
|
|
130
124
|
/** TTL for prefetch cache entries in ms (matches Next.js static prefetch TTL). */
|
|
131
125
|
export const PREFETCH_CACHE_TTL = 30_000;
|
|
132
126
|
/**
|
|
@@ -171,13 +165,26 @@ export function getPrefetchedUrls() {
|
|
|
171
165
|
*/
|
|
172
166
|
export function storePrefetchResponse(rscUrl, response) {
|
|
173
167
|
const cache = getPrefetchCache();
|
|
174
|
-
|
|
168
|
+
const now = Date.now();
|
|
169
|
+
// Sweep expired entries before resorting to FIFO eviction
|
|
170
|
+
if (cache.size >= MAX_PREFETCH_CACHE_SIZE) {
|
|
171
|
+
const prefetched = getPrefetchedUrls();
|
|
172
|
+
for (const [key, entry] of cache) {
|
|
173
|
+
if (now - entry.timestamp >= PREFETCH_CACHE_TTL) {
|
|
174
|
+
cache.delete(key);
|
|
175
|
+
prefetched.delete(key);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// FIFO fallback if still at capacity after sweep
|
|
175
180
|
if (cache.size >= MAX_PREFETCH_CACHE_SIZE) {
|
|
176
181
|
const oldest = cache.keys().next().value;
|
|
177
|
-
if (oldest !== undefined)
|
|
182
|
+
if (oldest !== undefined) {
|
|
178
183
|
cache.delete(oldest);
|
|
184
|
+
getPrefetchedUrls().delete(oldest);
|
|
185
|
+
}
|
|
179
186
|
}
|
|
180
|
-
cache.set(rscUrl, { response, timestamp:
|
|
187
|
+
cache.set(rscUrl, { response, timestamp: now });
|
|
181
188
|
}
|
|
182
189
|
const _listeners = new Set();
|
|
183
190
|
function notifyListeners() {
|
|
@@ -224,19 +231,34 @@ function getServerSearchParamsSnapshot() {
|
|
|
224
231
|
// Track client-side params (set during RSC hydration/navigation)
|
|
225
232
|
// We cache the params object for referential stability — only create a new
|
|
226
233
|
// object when the params actually change (shallow key/value comparison).
|
|
227
|
-
|
|
234
|
+
const _EMPTY_PARAMS = {};
|
|
235
|
+
let _clientParams = _EMPTY_PARAMS;
|
|
228
236
|
let _clientParamsJson = "{}";
|
|
229
237
|
export function setClientParams(params) {
|
|
230
238
|
const json = JSON.stringify(params);
|
|
231
239
|
if (json !== _clientParamsJson) {
|
|
232
240
|
_clientParams = params;
|
|
233
241
|
_clientParamsJson = json;
|
|
242
|
+
// Notify useSyncExternalStore subscribers so useParams() re-renders.
|
|
243
|
+
notifyListeners();
|
|
234
244
|
}
|
|
235
245
|
}
|
|
236
246
|
/** Get the current client params (for testing referential stability). */
|
|
237
247
|
export function getClientParams() {
|
|
238
248
|
return _clientParams;
|
|
239
249
|
}
|
|
250
|
+
function getClientParamsSnapshot() {
|
|
251
|
+
return _clientParams;
|
|
252
|
+
}
|
|
253
|
+
function getServerParamsSnapshot() {
|
|
254
|
+
return _getServerContext()?.params ?? _EMPTY_PARAMS;
|
|
255
|
+
}
|
|
256
|
+
function subscribeToNavigation(cb) {
|
|
257
|
+
_listeners.add(cb);
|
|
258
|
+
return () => {
|
|
259
|
+
_listeners.delete(cb);
|
|
260
|
+
};
|
|
261
|
+
}
|
|
240
262
|
// ---------------------------------------------------------------------------
|
|
241
263
|
// Hooks
|
|
242
264
|
// ---------------------------------------------------------------------------
|
|
@@ -251,12 +273,7 @@ export function usePathname() {
|
|
|
251
273
|
return _getServerContext()?.pathname ?? "/";
|
|
252
274
|
}
|
|
253
275
|
// Client-side: use the hook system for reactivity
|
|
254
|
-
return React.useSyncExternalStore((
|
|
255
|
-
_listeners.add(cb);
|
|
256
|
-
return () => {
|
|
257
|
-
_listeners.delete(cb);
|
|
258
|
-
};
|
|
259
|
-
}, getPathnameSnapshot, () => _getServerContext()?.pathname ?? "/");
|
|
276
|
+
return React.useSyncExternalStore(subscribeToNavigation, getPathnameSnapshot, () => _getServerContext()?.pathname ?? "/");
|
|
260
277
|
}
|
|
261
278
|
/**
|
|
262
279
|
* Returns the current search params as a read-only URLSearchParams.
|
|
@@ -267,12 +284,7 @@ export function useSearchParams() {
|
|
|
267
284
|
// Return a safe fallback — the client will hydrate with the real value.
|
|
268
285
|
return getServerSearchParamsSnapshot();
|
|
269
286
|
}
|
|
270
|
-
return React.useSyncExternalStore(
|
|
271
|
-
_listeners.add(cb);
|
|
272
|
-
return () => {
|
|
273
|
-
_listeners.delete(cb);
|
|
274
|
-
};
|
|
275
|
-
}, getSearchParamsSnapshot, getServerSearchParamsSnapshot);
|
|
287
|
+
return React.useSyncExternalStore(subscribeToNavigation, getSearchParamsSnapshot, getServerSearchParamsSnapshot);
|
|
276
288
|
}
|
|
277
289
|
/**
|
|
278
290
|
* Returns the dynamic params for the current route.
|
|
@@ -280,9 +292,9 @@ export function useSearchParams() {
|
|
|
280
292
|
export function useParams() {
|
|
281
293
|
if (isServer) {
|
|
282
294
|
// During SSR of "use client" components, the navigation context may not be set.
|
|
283
|
-
return (_getServerContext()?.params ??
|
|
295
|
+
return (_getServerContext()?.params ?? _EMPTY_PARAMS);
|
|
284
296
|
}
|
|
285
|
-
return
|
|
297
|
+
return React.useSyncExternalStore(subscribeToNavigation, getClientParamsSnapshot, getServerParamsSnapshot);
|
|
286
298
|
}
|
|
287
299
|
/**
|
|
288
300
|
* Check if a href is an external URL (any URL scheme per RFC 3986, or protocol-relative).
|
|
@@ -387,7 +399,7 @@ async function navigateImpl(href, mode, scroll) {
|
|
|
387
399
|
// Normalize same-origin absolute URLs to local paths for SPA navigation
|
|
388
400
|
let normalizedHref = href;
|
|
389
401
|
if (isExternalUrl(href)) {
|
|
390
|
-
const localPath =
|
|
402
|
+
const localPath = toSameOriginAppPath(href, __basePath);
|
|
391
403
|
if (localPath == null) {
|
|
392
404
|
// Truly external: use full page navigation
|
|
393
405
|
if (mode === "replace") {
|
|
@@ -400,7 +412,7 @@ async function navigateImpl(href, mode, scroll) {
|
|
|
400
412
|
}
|
|
401
413
|
normalizedHref = localPath;
|
|
402
414
|
}
|
|
403
|
-
const fullHref =
|
|
415
|
+
const fullHref = toBrowserNavigationHref(normalizedHref, window.location.href, __basePath);
|
|
404
416
|
// Save scroll position before navigating (for back/forward restoration)
|
|
405
417
|
if (mode === "push") {
|
|
406
418
|
saveScrollPosition();
|
|
@@ -487,7 +499,7 @@ const _appRouter = {
|
|
|
487
499
|
if (isServer)
|
|
488
500
|
return;
|
|
489
501
|
// Prefetch the RSC payload for the target route and store in cache
|
|
490
|
-
const fullHref =
|
|
502
|
+
const fullHref = toBrowserNavigationHref(href, window.location.href, __basePath);
|
|
491
503
|
const rscUrl = toRscUrl(fullHref);
|
|
492
504
|
const prefetched = getPrefetchedUrls();
|
|
493
505
|
if (prefetched.has(rscUrl))
|