reroute-js 0.40.2 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/bin.d.ts +1 -1
- package/cli/bin.js +101 -29
- package/cli/bin.js.map +10 -10
- package/cli/index.d.ts +1 -1
- package/cli/index.js +4 -4
- package/cli/index.js.map +1 -1
- package/cli/src/cli.d.ts +1 -1
- package/cli/src/commands/analyze.d.ts +1 -1
- package/cli/src/commands/build.d.ts +1 -1
- package/cli/src/commands/dev.d.ts +1 -1
- package/cli/src/commands/gen.d.ts +1 -1
- package/cli/src/commands/index.d.ts +1 -1
- package/cli/src/commands/init.d.ts +1 -1
- package/cli/src/commands/lib/assets.d.ts +1 -1
- package/cli/src/commands/lib/bundler.d.ts +1 -1
- package/cli/src/commands/lib/command.d.ts +1 -1
- package/cli/src/commands/lib/env.d.ts +1 -1
- package/cli/src/commands/lib/index.d.ts +1 -1
- package/cli/src/commands/lib/log.d.ts +1 -1
- package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
- package/cli/src/commands/lib/markdown/index.d.ts +1 -1
- package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
- package/cli/src/commands/lib/production.d.ts +1 -1
- package/cli/src/commands/lib/server.d.ts +1 -1
- package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
- package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
- package/cli/src/commands/lib/tailwind.d.ts +1 -1
- package/cli/src/commands/lib/terminal-ui.d.ts +1 -1
- package/cli/src/commands/lib/version.d.ts +1 -1
- package/cli/src/commands/og.d.ts +1 -1
- package/cli/src/commands/start.d.ts +1 -1
- package/cli/src/index.d.ts +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.js +97 -25
- package/core/index.js.map +10 -10
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +42 -2
- package/core/src/config.d.ts.map +1 -1
- package/core/src/content/discovery.d.ts +1 -1
- package/core/src/content/index.d.ts +1 -1
- package/core/src/content/metadata.d.ts +7 -2
- package/core/src/content/metadata.d.ts.map +1 -1
- package/core/src/index.d.ts +1 -1
- package/core/src/llms/extractor.d.ts +1 -1
- package/core/src/llms/formatter.d.ts +1 -1
- package/core/src/llms/full-generator.d.ts +1 -1
- package/core/src/llms/index-generator.d.ts +1 -1
- package/core/src/llms/index.d.ts +1 -1
- package/core/src/og/discovery.d.ts +1 -1
- package/core/src/og/index.d.ts +1 -1
- package/core/src/og/meta.d.ts +1 -1
- package/core/src/og/render.d.ts +1 -1
- package/core/src/og/types.d.ts +1 -1
- package/core/src/robots/discovery.d.ts +1 -1
- package/core/src/robots/generator.d.ts +1 -1
- package/core/src/robots/index.d.ts +1 -1
- package/core/src/robots/policies.d.ts +1 -1
- package/core/src/rss/discovery.d.ts +1 -1
- package/core/src/rss/generator.d.ts +1 -1
- package/core/src/rss/index.d.ts +1 -1
- package/core/src/sitemap/discovery.d.ts +1 -1
- package/core/src/sitemap/generator.d.ts +1 -1
- package/core/src/sitemap/index.d.ts +1 -1
- package/core/src/ssr/index.d.ts +1 -1
- package/core/src/ssr/lib/cache.d.ts +1 -1
- package/core/src/ssr/lib/collections.d.ts +1 -1
- package/core/src/ssr/lib/compression.d.ts +1 -1
- package/core/src/ssr/lib/compute/content.d.ts +1 -1
- package/core/src/ssr/lib/compute/index.d.ts +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts +1 -1
- package/core/src/ssr/lib/data.d.ts +1 -1
- package/core/src/ssr/lib/html.d.ts +6 -1
- package/core/src/ssr/lib/html.d.ts.map +1 -1
- package/core/src/ssr/lib/imports.d.ts +1 -1
- package/core/src/ssr/lib/index.d.ts +1 -1
- package/core/src/ssr/lib/layouts.d.ts +1 -1
- package/core/src/ssr/lib/metadata.d.ts +3 -3
- package/core/src/ssr/lib/metadata.d.ts.map +1 -1
- package/core/src/ssr/lib/mime.d.ts +1 -1
- package/core/src/ssr/lib/modules.d.ts +1 -1
- package/core/src/ssr/lib/path.d.ts +1 -1
- package/core/src/ssr/lib/preload.d.ts +1 -1
- package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
- package/core/src/ssr/lib/scripts/data.d.ts +1 -1
- package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
- package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
- package/core/src/ssr/lib/scripts/index.d.ts +1 -1
- package/core/src/ssr/lib/seed.d.ts +1 -1
- package/core/src/ssr/lib/serialize.d.ts +1 -1
- package/core/src/ssr/lib/setup.d.ts +3 -2
- package/core/src/ssr/lib/setup.d.ts.map +1 -1
- package/core/src/ssr/lib/styles.d.ts +1 -1
- package/core/src/ssr/lib/template.d.ts +1 -1
- package/core/src/ssr/lib/types.d.ts +1 -1
- package/core/src/ssr/render.d.ts +3 -2
- package/core/src/ssr/render.d.ts.map +1 -1
- package/core/src/ssr/stream.d.ts +3 -2
- package/core/src/ssr/stream.d.ts.map +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +100 -25
- package/elysia/index.js.map +12 -12
- package/elysia/src/index.d.ts +1 -1
- package/elysia/src/libs/assets.d.ts +1 -1
- package/elysia/src/libs/cache.d.ts +1 -1
- package/elysia/src/libs/caching.d.ts +1 -1
- package/elysia/src/libs/http.d.ts +1 -1
- package/elysia/src/libs/image.d.ts +1 -1
- package/elysia/src/libs/index.d.ts +1 -1
- package/elysia/src/libs/llms.d.ts +1 -1
- package/elysia/src/libs/response.d.ts +1 -1
- package/elysia/src/libs/serving.d.ts +1 -1
- package/elysia/src/plugin.d.ts +1 -1
- package/elysia/src/plugin.d.ts.map +1 -1
- package/elysia/src/routes/artifacts.d.ts +1 -1
- package/elysia/src/routes/content.d.ts +1 -1
- package/elysia/src/routes/image.d.ts +1 -1
- package/elysia/src/routes/index.d.ts +1 -1
- package/elysia/src/routes/internal.d.ts +1 -1
- package/elysia/src/routes/llms.d.ts +1 -1
- package/elysia/src/routes/og.d.ts +1 -1
- package/elysia/src/routes/redirects.d.ts +1 -1
- package/elysia/src/routes/robots.d.ts +1 -1
- package/elysia/src/routes/rss.d.ts +1 -1
- package/elysia/src/routes/search.d.ts +1 -1
- package/elysia/src/routes/sitemap.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts +3 -2
- package/elysia/src/routes/ssr.d.ts.map +1 -1
- package/elysia/src/routes/static.d.ts +1 -1
- package/elysia/src/types.d.ts +1 -1
- package/package.json +1 -1
- package/react/index.d.ts +1 -1
- package/react/index.js +2 -2
- package/react/index.js.map +1 -1
- package/react/src/components/ClientOnly.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts +1 -1
- package/react/src/components/Image.d.ts +1 -1
- package/react/src/components/LazyRoute.d.ts +1 -1
- package/react/src/components/Link.d.ts +1 -1
- package/react/src/components/Markdown.d.ts +1 -1
- package/react/src/components/Outlet.d.ts +1 -1
- package/react/src/components/index.d.ts +1 -1
- package/react/src/hooks/index.d.ts +1 -1
- package/react/src/hooks/useContent.d.ts +1 -1
- package/react/src/hooks/useData.d.ts +1 -1
- package/react/src/hooks/useFeed.d.ts +1 -1
- package/react/src/hooks/useLayoutData.d.ts +1 -1
- package/react/src/hooks/useLlms.d.ts +1 -1
- package/react/src/hooks/useNavigate.d.ts +1 -1
- package/react/src/hooks/useParams.d.ts +1 -1
- package/react/src/hooks/useRouter.d.ts +1 -1
- package/react/src/hooks/useSearch.d.ts +1 -1
- package/react/src/hooks/useSearchParams.d.ts +1 -1
- package/react/src/hooks/useToc.d.ts +1 -1
- package/react/src/index.d.ts +1 -1
- package/react/src/lib/collection.d.ts +1 -1
- package/react/src/lib/content.d.ts +1 -1
- package/react/src/lib/head.d.ts +1 -1
- package/react/src/lib/index.d.ts +1 -1
- package/react/src/lib/lazy-route.d.ts +1 -1
- package/react/src/lib/route-loader.d.ts +1 -1
- package/react/src/providers/ContentProvider.d.ts +1 -1
- package/react/src/providers/RerouteProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts +1 -1
- package/react/src/providers/index.d.ts +1 -1
- package/react/src/types/any.d.ts +1 -1
- package/react/src/types/index.d.ts +1 -1
- package/react/src/types/router.d.ts +1 -1
- package/telemetry/react.d.ts +1 -1
- package/telemetry/react.js +2 -2
- package/telemetry/react.js.map +1 -1
- package/telemetry/server.d.ts +1 -1
- package/telemetry/server.js +2 -2
- package/telemetry/server.js.map +8 -8
- package/telemetry/src/react/api.d.ts +1 -1
- package/telemetry/src/react/context.d.ts +1 -1
- package/telemetry/src/react/index.d.ts +1 -1
- package/telemetry/src/react/telemetry.d.ts +1 -1
- package/telemetry/src/server/context.d.ts +1 -1
- package/telemetry/src/server/headers/extractor.d.ts +1 -1
- package/telemetry/src/server/headers/index.d.ts +1 -1
- package/telemetry/src/server/headers/presets.d.ts +1 -1
- package/telemetry/src/server/index.d.ts +1 -1
- package/telemetry/src/server/instrumentation.d.ts +1 -1
- package/telemetry/src/server/plugin.d.ts +1 -1
- package/telemetry/src/server/sourcemap.d.ts +1 -1
package/cli/bin.d.ts
CHANGED
package/cli/bin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
3
|
/**
|
|
4
|
-
* reroute-js v0.
|
|
4
|
+
* reroute-js v0.41.0
|
|
5
5
|
*
|
|
6
6
|
* @license MIT
|
|
7
7
|
* @copyright 2026 stewones <hi@stewan.io>
|
|
@@ -48,7 +48,7 @@ async function getVersionString() {
|
|
|
48
48
|
}
|
|
49
49
|
async function getVersion() {
|
|
50
50
|
if (true) {
|
|
51
|
-
return "0.
|
|
51
|
+
return "0.41.0";
|
|
52
52
|
}
|
|
53
53
|
const possiblePaths = [
|
|
54
54
|
path.join(import.meta.dir, "../../../../package.json"),
|
|
@@ -66,7 +66,7 @@ async function getVersion() {
|
|
|
66
66
|
}
|
|
67
67
|
async function getCommit() {
|
|
68
68
|
if (true) {
|
|
69
|
-
return "
|
|
69
|
+
return "fdadb6d";
|
|
70
70
|
}
|
|
71
71
|
return "dev";
|
|
72
72
|
}
|
|
@@ -475,7 +475,7 @@ async function getContentMeta(absPath, isWatchMode) {
|
|
|
475
475
|
}
|
|
476
476
|
}
|
|
477
477
|
}
|
|
478
|
-
function buildHeadFromMeta(meta) {
|
|
478
|
+
function buildHeadFromMeta(meta, ogConfig) {
|
|
479
479
|
if (!meta || typeof meta !== "object")
|
|
480
480
|
return "";
|
|
481
481
|
const parts = [];
|
|
@@ -485,6 +485,23 @@ function buildHeadFromMeta(meta) {
|
|
|
485
485
|
parts.push(`<title>${escapeHtml(title)}</title>`);
|
|
486
486
|
if (description)
|
|
487
487
|
parts.push(`<meta name="description" content="${escapeHtml(description)}" />`);
|
|
488
|
+
const ogType = typeof meta.ogType === "string" ? meta.ogType : ogConfig?.defaultType || "website";
|
|
489
|
+
parts.push(`<meta property="og:type" content="${escapeHtml(ogType)}" />`);
|
|
490
|
+
if (title) {
|
|
491
|
+
parts.push(`<meta property="og:title" content="${escapeHtml(title)}" />`);
|
|
492
|
+
}
|
|
493
|
+
const finalDescription = description || ogConfig?.siteDescription;
|
|
494
|
+
if (finalDescription) {
|
|
495
|
+
parts.push(`<meta property="og:description" content="${escapeHtml(finalDescription)}" />`);
|
|
496
|
+
}
|
|
497
|
+
const twitterCard = ogConfig?.twitterCard || "summary_large_image";
|
|
498
|
+
parts.push(`<meta name="twitter:card" content="${twitterCard}" />`);
|
|
499
|
+
if (title) {
|
|
500
|
+
parts.push(`<meta name="twitter:title" content="${escapeHtml(title)}" />`);
|
|
501
|
+
}
|
|
502
|
+
if (finalDescription) {
|
|
503
|
+
parts.push(`<meta name="twitter:description" content="${escapeHtml(finalDescription)}" />`);
|
|
504
|
+
}
|
|
488
505
|
return parts.length ? `
|
|
489
506
|
${parts.join(`
|
|
490
507
|
`)}` : "";
|
|
@@ -1947,6 +1964,28 @@ function removeDefaultMetaTags(templateHtml) {
|
|
|
1947
1964
|
} catch {}
|
|
1948
1965
|
return result;
|
|
1949
1966
|
}
|
|
1967
|
+
function removeOverriddenMetaTags(templateHtml, injectedHead) {
|
|
1968
|
+
let result = templateHtml;
|
|
1969
|
+
try {
|
|
1970
|
+
const injectedOgProps = [
|
|
1971
|
+
...injectedHead.matchAll(/<meta\s+property\s*=\s*['"]([^'"]+)['"][^>]*>/gi)
|
|
1972
|
+
].map((m) => m[1].toLowerCase());
|
|
1973
|
+
const injectedNameMetas = [
|
|
1974
|
+
...injectedHead.matchAll(/<meta\s+name\s*=\s*['"]([^'"]+)['"][^>]*>/gi)
|
|
1975
|
+
].map((m) => m[1].toLowerCase());
|
|
1976
|
+
for (const prop of injectedOgProps) {
|
|
1977
|
+
const escapedProp = prop.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1978
|
+
const regex = new RegExp(`<meta\\s+property\\s*=\\s*['"]${escapedProp}['"][^>]*>`, "gi");
|
|
1979
|
+
result = result.replace(regex, "");
|
|
1980
|
+
}
|
|
1981
|
+
for (const name of injectedNameMetas) {
|
|
1982
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1983
|
+
const regex = new RegExp(`<meta\\s+name\\s*=\\s*['"]${escapedName}['"][^>]*>`, "gi");
|
|
1984
|
+
result = result.replace(regex, "");
|
|
1985
|
+
}
|
|
1986
|
+
} catch {}
|
|
1987
|
+
return result;
|
|
1988
|
+
}
|
|
1950
1989
|
function deduplicateHeadContent(templateHtml, headToInject) {
|
|
1951
1990
|
let cleanedTemplate = templateHtml;
|
|
1952
1991
|
let cleanedHead = headToInject;
|
|
@@ -1957,6 +1996,7 @@ function deduplicateHeadContent(templateHtml, headToInject) {
|
|
|
1957
1996
|
} else if (/<meta\s+name\s*=\s*['"]description['"][^>]*>/i.test(cleanedHead)) {
|
|
1958
1997
|
cleanedTemplate = cleanedTemplate.replace(/<meta\s+name\s*=\s*['"]description['"][^>]*>/i, "");
|
|
1959
1998
|
}
|
|
1999
|
+
cleanedTemplate = removeOverriddenMetaTags(cleanedTemplate, cleanedHead);
|
|
1960
2000
|
} catch {}
|
|
1961
2001
|
return { cleanedTemplate, cleanedHead };
|
|
1962
2002
|
}
|
|
@@ -2075,7 +2115,6 @@ async function generateOGImageMetaTags(pathname, clientDir, ogConfig) {
|
|
|
2075
2115
|
return `<meta property="og:image" content="${ogImagePath}" />
|
|
2076
2116
|
<meta property="og:image:width" content="${width}" />
|
|
2077
2117
|
<meta property="og:image:height" content="${height}" />
|
|
2078
|
-
<meta name="twitter:card" content="summary_large_image" />
|
|
2079
2118
|
<meta name="twitter:image" content="${ogImagePath}" />`;
|
|
2080
2119
|
}
|
|
2081
2120
|
var init_meta = __esm(() => {
|
|
@@ -2113,7 +2152,25 @@ function generateOgUrl(baseUrl, pathname) {
|
|
|
2113
2152
|
const ogUrl = `${cleanBaseUrl}${normalizedPath}`;
|
|
2114
2153
|
return `<meta property="og:url" content="${ogUrl}" />`;
|
|
2115
2154
|
}
|
|
2116
|
-
|
|
2155
|
+
function generateGlobalOGTags(ogConfig) {
|
|
2156
|
+
const tags = [];
|
|
2157
|
+
if (ogConfig.siteName) {
|
|
2158
|
+
tags.push(`<meta property="og:site_name" content="${escapeHtml2(ogConfig.siteName)}" />`);
|
|
2159
|
+
}
|
|
2160
|
+
if (ogConfig.locale) {
|
|
2161
|
+
tags.push(`<meta property="og:locale" content="${escapeHtml2(ogConfig.locale)}" />`);
|
|
2162
|
+
}
|
|
2163
|
+
if (ogConfig.twitterSite) {
|
|
2164
|
+
const handle = ogConfig.twitterSite.startsWith("@") ? ogConfig.twitterSite : `@${ogConfig.twitterSite}`;
|
|
2165
|
+
tags.push(`<meta name="twitter:site" content="${escapeHtml2(handle)}" />`);
|
|
2166
|
+
}
|
|
2167
|
+
return tags.length ? tags.join(`
|
|
2168
|
+
`) : "";
|
|
2169
|
+
}
|
|
2170
|
+
function escapeHtml2(input) {
|
|
2171
|
+
return input.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
2172
|
+
}
|
|
2173
|
+
async function extractPageMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ogImageConfig, ogConfig, baseUrl, autoCanonical, ssrData) {
|
|
2117
2174
|
let perPageHead = "";
|
|
2118
2175
|
let pageLang;
|
|
2119
2176
|
let statusOverride = currentStatusOverride;
|
|
@@ -2122,7 +2179,7 @@ async function extractPageMetadata(pathname, clientDir, cwd, isWatchMode, curren
|
|
|
2122
2179
|
}, (lang) => {
|
|
2123
2180
|
if (!pageLang)
|
|
2124
2181
|
pageLang = lang;
|
|
2125
|
-
});
|
|
2182
|
+
}, ogConfig);
|
|
2126
2183
|
const shouldGenerateCanonical = autoCanonical !== false && baseUrl !== undefined;
|
|
2127
2184
|
if (shouldGenerateCanonical) {
|
|
2128
2185
|
const canonicalTag = generateCanonicalUrl(baseUrl, pathname);
|
|
@@ -2132,8 +2189,15 @@ ${canonicalTag}`;
|
|
|
2132
2189
|
perPageHead += `
|
|
2133
2190
|
${ogUrlTag}`;
|
|
2134
2191
|
}
|
|
2192
|
+
if (ogConfig) {
|
|
2193
|
+
const ogGlobalTags = generateGlobalOGTags(ogConfig);
|
|
2194
|
+
if (ogGlobalTags) {
|
|
2195
|
+
perPageHead += `
|
|
2196
|
+
${ogGlobalTags}`;
|
|
2197
|
+
}
|
|
2198
|
+
}
|
|
2135
2199
|
try {
|
|
2136
|
-
const ogMetaTags = await generateOGImageMetaTags(pathname, clientDir,
|
|
2200
|
+
const ogMetaTags = await generateOGImageMetaTags(pathname, clientDir, ogImageConfig);
|
|
2137
2201
|
if (ogMetaTags) {
|
|
2138
2202
|
perPageHead += `
|
|
2139
2203
|
${ogMetaTags}`;
|
|
@@ -2145,22 +2209,22 @@ ${ogMetaTags}`;
|
|
|
2145
2209
|
perPageHead += head;
|
|
2146
2210
|
}, (lang) => {
|
|
2147
2211
|
pageLang = lang;
|
|
2148
|
-
});
|
|
2149
|
-
const routeResult = await extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ssrData);
|
|
2212
|
+
}, ogConfig);
|
|
2213
|
+
const routeResult = await extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ssrData, ogConfig);
|
|
2150
2214
|
perPageHead += routeResult.head;
|
|
2151
2215
|
if (routeResult.lang)
|
|
2152
2216
|
pageLang = routeResult.lang;
|
|
2153
2217
|
statusOverride = routeResult.statusOverride;
|
|
2154
2218
|
return { perPageHead, pageLang, statusOverride };
|
|
2155
2219
|
}
|
|
2156
|
-
async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang) {
|
|
2220
|
+
async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig) {
|
|
2157
2221
|
if (typeof layout?.path !== "string")
|
|
2158
2222
|
return;
|
|
2159
2223
|
try {
|
|
2160
2224
|
const abs = join2(clientDir, "routes", String(layout.path));
|
|
2161
2225
|
const { meta, ssr } = await loadModuleMetaAndSSR(layout, abs, isWatchMode);
|
|
2162
2226
|
if (meta)
|
|
2163
|
-
addHead(buildHeadFromMeta(meta));
|
|
2227
|
+
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
2164
2228
|
if (ssr) {
|
|
2165
2229
|
const ssrHead = extractSSRHead(ssr);
|
|
2166
2230
|
if (ssrHead)
|
|
@@ -2172,16 +2236,16 @@ ${ssrHead}`);
|
|
|
2172
2236
|
}
|
|
2173
2237
|
} catch {}
|
|
2174
2238
|
}
|
|
2175
|
-
async function extractLayoutMetadata(pathname, clientDir, cwd, isWatchMode, addHead, setLang) {
|
|
2239
|
+
async function extractLayoutMetadata(pathname, clientDir, cwd, isWatchMode, addHead, setLang, ogConfig) {
|
|
2176
2240
|
try {
|
|
2177
2241
|
const m = await loadRoutesModule(cwd, isWatchMode);
|
|
2178
2242
|
const matchingLayouts = getMatchingLayouts(pathname, m?.layouts);
|
|
2179
2243
|
for (const layout of matchingLayouts) {
|
|
2180
|
-
await processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang);
|
|
2244
|
+
await processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig);
|
|
2181
2245
|
}
|
|
2182
2246
|
} catch {}
|
|
2183
2247
|
}
|
|
2184
|
-
function extractContentMetadata(pathname, addHead, setLang) {
|
|
2248
|
+
function extractContentMetadata(pathname, addHead, setLang, ogConfig) {
|
|
2185
2249
|
try {
|
|
2186
2250
|
const parts = pathname.split("/").filter(Boolean);
|
|
2187
2251
|
if (parts.length < 2)
|
|
@@ -2191,7 +2255,7 @@ function extractContentMetadata(pathname, addHead, setLang) {
|
|
|
2191
2255
|
const exp = g.__REROUTE_SSR_EXPORTS__?.[key];
|
|
2192
2256
|
const meta = exp?.meta;
|
|
2193
2257
|
const ssr = exp?.ssr;
|
|
2194
|
-
addHead(buildHeadFromMeta(meta));
|
|
2258
|
+
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
2195
2259
|
const ssrHead = extractSSRHead(ssr);
|
|
2196
2260
|
if (ssrHead)
|
|
2197
2261
|
addHead(`
|
|
@@ -2201,7 +2265,7 @@ ${ssrHead}`);
|
|
|
2201
2265
|
setLang(lang);
|
|
2202
2266
|
} catch {}
|
|
2203
2267
|
}
|
|
2204
|
-
async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData) {
|
|
2268
|
+
async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData, ogConfig) {
|
|
2205
2269
|
const pathnameOnly = pathname.split("?")[0];
|
|
2206
2270
|
const match = typeof m.matchRoute === "function" ? m.matchRoute(pathnameOnly) : null;
|
|
2207
2271
|
const r = match?.route;
|
|
@@ -2214,7 +2278,7 @@ async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode,
|
|
|
2214
2278
|
const { meta, ssr } = await loadModuleMetaAndSSR(r, abs, isWatchMode);
|
|
2215
2279
|
let head = "";
|
|
2216
2280
|
if (meta)
|
|
2217
|
-
head += buildHeadFromMeta(meta);
|
|
2281
|
+
head += buildHeadFromMeta(meta, ogConfig);
|
|
2218
2282
|
if (ssr) {
|
|
2219
2283
|
const routeData = ssrData && typeof ssrData === "object" ? ssrData[pathname] : undefined;
|
|
2220
2284
|
const ssrHead = extractSSRHead(ssr, routeData);
|
|
@@ -2228,7 +2292,7 @@ ${ssrHead}`;
|
|
|
2228
2292
|
}
|
|
2229
2293
|
return { head: "", statusOverride };
|
|
2230
2294
|
}
|
|
2231
|
-
async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ssrData) {
|
|
2295
|
+
async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ssrData, ogConfig) {
|
|
2232
2296
|
let head = "";
|
|
2233
2297
|
let lang;
|
|
2234
2298
|
let statusOverride = currentStatusOverride;
|
|
@@ -2244,14 +2308,14 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
|
|
|
2244
2308
|
statusOverride = statusOverride || 404;
|
|
2245
2309
|
}
|
|
2246
2310
|
if (r && typeof r.path === "string") {
|
|
2247
|
-
const result = await extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData);
|
|
2311
|
+
const result = await extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData, ogConfig);
|
|
2248
2312
|
head = result.head;
|
|
2249
2313
|
lang = result.lang;
|
|
2250
2314
|
statusOverride = result.statusOverride;
|
|
2251
2315
|
} else {
|
|
2252
2316
|
head += await extractNotFoundMetadata(pathname, clientDir, m, isWatchMode, (l) => {
|
|
2253
2317
|
lang = l;
|
|
2254
|
-
});
|
|
2318
|
+
}, ogConfig);
|
|
2255
2319
|
}
|
|
2256
2320
|
} catch {}
|
|
2257
2321
|
return { head, lang, statusOverride };
|
|
@@ -2271,7 +2335,7 @@ function findBestNotFoundRoute(list, pathname) {
|
|
|
2271
2335
|
}
|
|
2272
2336
|
return chosen;
|
|
2273
2337
|
}
|
|
2274
|
-
async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatchMode, setLang) {
|
|
2338
|
+
async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatchMode, setLang, ogConfig) {
|
|
2275
2339
|
let head = "";
|
|
2276
2340
|
try {
|
|
2277
2341
|
const list = routesModule?.notFoundRoutes;
|
|
@@ -2282,7 +2346,7 @@ async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatc
|
|
|
2282
2346
|
const abs = join2(clientDir, "routes", String(chosen.path));
|
|
2283
2347
|
const { meta, ssr } = await loadModuleMetaAndSSR(chosen, abs, isWatchMode);
|
|
2284
2348
|
if (meta)
|
|
2285
|
-
head += buildHeadFromMeta(meta);
|
|
2349
|
+
head += buildHeadFromMeta(meta, ogConfig);
|
|
2286
2350
|
const ssrHead = extractSSRHead(ssr);
|
|
2287
2351
|
if (ssrHead)
|
|
2288
2352
|
head += `
|
|
@@ -2869,7 +2933,7 @@ async function performSSRSetupInternal(options, streaming) {
|
|
|
2869
2933
|
statusOverride = computeResult.statusContainer.value;
|
|
2870
2934
|
}
|
|
2871
2935
|
const metadataResult = await withSpan("ssr.extract.metadata", async (span) => {
|
|
2872
|
-
const result = await extractPageMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ogConfig, options.baseUrl, options.autoCanonical, computeResult.data);
|
|
2936
|
+
const result = await extractPageMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ogConfig, options.ogMetaConfig, options.baseUrl, options.autoCanonical, computeResult.data);
|
|
2873
2937
|
span.setAttributes({
|
|
2874
2938
|
"reroute.pathname": pathname,
|
|
2875
2939
|
"reroute.metadata.exists": !!result.perPageHead
|
|
@@ -3039,6 +3103,7 @@ async function renderSSRDocument(options) {
|
|
|
3039
3103
|
maxAge,
|
|
3040
3104
|
searchParams,
|
|
3041
3105
|
ogConfig,
|
|
3106
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
3042
3107
|
baseUrl: options.baseUrl,
|
|
3043
3108
|
autoCanonical: options.autoCanonical,
|
|
3044
3109
|
cachedCollections: options.cachedCollections,
|
|
@@ -5149,6 +5214,7 @@ async function renderSSRDocumentStream(options) {
|
|
|
5149
5214
|
maxAge,
|
|
5150
5215
|
searchParams,
|
|
5151
5216
|
ogConfig,
|
|
5217
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
5152
5218
|
baseUrl: options.baseUrl,
|
|
5153
5219
|
autoCanonical: options.autoCanonical,
|
|
5154
5220
|
cachedCollections: options.cachedCollections,
|
|
@@ -5183,7 +5249,11 @@ async function renderSSRDocumentStream(options) {
|
|
|
5183
5249
|
};
|
|
5184
5250
|
});
|
|
5185
5251
|
const pageLang = setup2.metadataResult.pageLang || lang;
|
|
5186
|
-
let headWithLang = htmlHead.replace(/<html([^>]*)>/i,
|
|
5252
|
+
let headWithLang = htmlHead.replace(/<html([^>]*)>/i, (_m, attrs) => {
|
|
5253
|
+
const hasLang = /(^|\s)lang\s*=/.test(attrs);
|
|
5254
|
+
const newAttrs = hasLang ? attrs.replace(/lang\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/i, `lang="${pageLang}"`) : `${attrs} lang="${pageLang}"`;
|
|
5255
|
+
return `<html${newAttrs}>`;
|
|
5256
|
+
});
|
|
5187
5257
|
const extraHead = setup2.bundlePreload + setup2.preloadExtraHead + setup2.metadataResult.perPageHead;
|
|
5188
5258
|
if (/<title[\s\S]*?<\/title>/i.test(extraHead)) {
|
|
5189
5259
|
headWithLang = headWithLang.replace(/<title[\s\S]*?<\/title>/i, "");
|
|
@@ -5191,6 +5261,7 @@ async function renderSSRDocumentStream(options) {
|
|
|
5191
5261
|
if (/<meta\s+name\s*=\s*['"]description['"][^>]*>/i.test(extraHead)) {
|
|
5192
5262
|
headWithLang = headWithLang.replace(/<meta\s+name\s*=\s*['"]description['"][^>]*>/i, "");
|
|
5193
5263
|
}
|
|
5264
|
+
headWithLang = removeOverriddenMetaTags(headWithLang, extraHead);
|
|
5194
5265
|
const config = await loadConfig(cwd);
|
|
5195
5266
|
const browserTelemetryConfigRaw = config.telemetry?.browser;
|
|
5196
5267
|
const { serializeBrowserTelemetryConfig: serializeBrowserTelemetryConfig2 } = await Promise.resolve().then(() => exports_serialize);
|
|
@@ -5239,7 +5310,7 @@ async function streamSSRContent(writer, encoder, ctx) {
|
|
|
5239
5310
|
try {
|
|
5240
5311
|
const combinedHead = deduplicateMetaTags([ctx.inlineStyleTag, ctx.head, ctx.extraHead].filter(Boolean).join(`
|
|
5241
5312
|
`));
|
|
5242
|
-
const headWithLangAndContent = ctx.headWithLang.replace(
|
|
5313
|
+
const headWithLangAndContent = ctx.headWithLang.replace(/<\/head>/i, `${combinedHead ? `${combinedHead}
|
|
5243
5314
|
` : ""}</head>`);
|
|
5244
5315
|
const headContent = `${headWithLangAndContent}`;
|
|
5245
5316
|
await writer.write(encoder.encode(headContent));
|
|
@@ -5379,6 +5450,7 @@ __export(exports_core, {
|
|
|
5379
5450
|
renderSSRDocumentStream: () => renderSSRDocumentStream,
|
|
5380
5451
|
renderSSRDocument: () => renderSSRDocument,
|
|
5381
5452
|
renderOGImageToPNG: () => renderOGImageToPNG,
|
|
5453
|
+
removeOverriddenMetaTags: () => removeOverriddenMetaTags,
|
|
5382
5454
|
processCollections: () => processCollections,
|
|
5383
5455
|
preloadContentModule: () => preloadContentModule,
|
|
5384
5456
|
performSSRSetup: () => performSSRSetup,
|
|
@@ -105700,7 +105772,7 @@ async function getVersionString2() {
|
|
|
105700
105772
|
}
|
|
105701
105773
|
async function getVersion2() {
|
|
105702
105774
|
if (true) {
|
|
105703
|
-
return "0.
|
|
105775
|
+
return "0.41.0";
|
|
105704
105776
|
}
|
|
105705
105777
|
const possiblePaths = [
|
|
105706
105778
|
path3.join(import.meta.dir, "../../../package.json"),
|
|
@@ -105717,10 +105789,10 @@ async function getVersion2() {
|
|
|
105717
105789
|
}
|
|
105718
105790
|
async function getCommit2() {
|
|
105719
105791
|
if (true) {
|
|
105720
|
-
return "
|
|
105792
|
+
return "fdadb6d";
|
|
105721
105793
|
}
|
|
105722
105794
|
return "dev";
|
|
105723
105795
|
}
|
|
105724
105796
|
main();
|
|
105725
105797
|
|
|
105726
|
-
//# debugId=
|
|
105798
|
+
//# debugId=E4248FFA7E75804564756E2164756E21
|