reroute-js 0.42.0 → 0.43.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 +183 -25
- package/cli/bin.js.map +6 -6
- 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 +179 -21
- package/core/index.js.map +6 -6
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +81 -5
- 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 +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 +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 +1 -1
- 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 +4 -1
- 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 +3 -1
- package/core/src/ssr/lib/types.d.ts.map +1 -1
- package/core/src/ssr/render.d.ts +1 -1
- package/core/src/ssr/stream.d.ts +1 -1
- package/core/src/ssr/stream.d.ts.map +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +235 -58
- package/elysia/index.js.map +8 -8
- 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 +6 -3
- 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 +17 -5
- package/react/index.js.map +3 -3
- 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/RouterProvider.d.ts.map +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 +6 -6
- 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.43.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.43.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 "8a3c652";
|
|
70
70
|
}
|
|
71
71
|
return "dev";
|
|
72
72
|
}
|
|
@@ -2215,7 +2215,12 @@ ${ogMetaTags}`;
|
|
|
2215
2215
|
if (routeResult.lang)
|
|
2216
2216
|
pageLang = routeResult.lang;
|
|
2217
2217
|
statusOverride = routeResult.statusOverride;
|
|
2218
|
-
return {
|
|
2218
|
+
return {
|
|
2219
|
+
perPageHead,
|
|
2220
|
+
pageLang,
|
|
2221
|
+
statusOverride,
|
|
2222
|
+
ssrExport: routeResult.ssrExport
|
|
2223
|
+
};
|
|
2219
2224
|
}
|
|
2220
2225
|
async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig) {
|
|
2221
2226
|
if (typeof layout?.path !== "string")
|
|
@@ -2226,7 +2231,7 @@ async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead,
|
|
|
2226
2231
|
if (meta)
|
|
2227
2232
|
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
2228
2233
|
if (ssr) {
|
|
2229
|
-
const ssrHead = extractSSRHead(ssr);
|
|
2234
|
+
const ssrHead = extractSSRHead(ssr, undefined, ogConfig);
|
|
2230
2235
|
if (ssrHead)
|
|
2231
2236
|
addHead(`
|
|
2232
2237
|
${ssrHead}`);
|
|
@@ -2256,7 +2261,7 @@ function extractContentMetadata(pathname, addHead, setLang, ogConfig) {
|
|
|
2256
2261
|
const meta = exp?.meta;
|
|
2257
2262
|
const ssr = exp?.ssr;
|
|
2258
2263
|
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
2259
|
-
const ssrHead = extractSSRHead(ssr);
|
|
2264
|
+
const ssrHead = extractSSRHead(ssr, undefined, ogConfig);
|
|
2260
2265
|
if (ssrHead)
|
|
2261
2266
|
addHead(`
|
|
2262
2267
|
${ssrHead}`);
|
|
@@ -2281,11 +2286,16 @@ async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode,
|
|
|
2281
2286
|
head += buildHeadFromMeta(meta, ogConfig);
|
|
2282
2287
|
if (ssr) {
|
|
2283
2288
|
const routeData = ssrData && typeof ssrData === "object" ? ssrData[pathname] : undefined;
|
|
2284
|
-
const ssrHead = extractSSRHead(ssr, routeData);
|
|
2289
|
+
const ssrHead = extractSSRHead(ssr, routeData, ogConfig, head);
|
|
2285
2290
|
if (ssrHead)
|
|
2286
2291
|
head += `
|
|
2287
2292
|
${ssrHead}`;
|
|
2288
|
-
return {
|
|
2293
|
+
return {
|
|
2294
|
+
head,
|
|
2295
|
+
lang: extractSSRLang(ssr),
|
|
2296
|
+
statusOverride,
|
|
2297
|
+
ssrExport: ssr
|
|
2298
|
+
};
|
|
2289
2299
|
}
|
|
2290
2300
|
return { head, statusOverride };
|
|
2291
2301
|
} catch {}
|
|
@@ -2296,6 +2306,7 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
|
|
|
2296
2306
|
let head = "";
|
|
2297
2307
|
let lang;
|
|
2298
2308
|
let statusOverride = currentStatusOverride;
|
|
2309
|
+
let ssrExport;
|
|
2299
2310
|
try {
|
|
2300
2311
|
const m = await loadRoutesModule(cwd, isWatchMode);
|
|
2301
2312
|
if (!m) {
|
|
@@ -2312,13 +2323,14 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
|
|
|
2312
2323
|
head = result.head;
|
|
2313
2324
|
lang = result.lang;
|
|
2314
2325
|
statusOverride = result.statusOverride;
|
|
2326
|
+
ssrExport = result.ssrExport;
|
|
2315
2327
|
} else {
|
|
2316
2328
|
head += await extractNotFoundMetadata(pathname, clientDir, m, isWatchMode, (l) => {
|
|
2317
2329
|
lang = l;
|
|
2318
2330
|
}, ogConfig);
|
|
2319
2331
|
}
|
|
2320
2332
|
} catch {}
|
|
2321
|
-
return { head, lang, statusOverride };
|
|
2333
|
+
return { head, lang, statusOverride, ssrExport };
|
|
2322
2334
|
}
|
|
2323
2335
|
function findBestNotFoundRoute(list, pathname) {
|
|
2324
2336
|
let chosen;
|
|
@@ -2347,7 +2359,7 @@ async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatc
|
|
|
2347
2359
|
const { meta, ssr } = await loadModuleMetaAndSSR(chosen, abs, isWatchMode);
|
|
2348
2360
|
if (meta)
|
|
2349
2361
|
head += buildHeadFromMeta(meta, ogConfig);
|
|
2350
|
-
const ssrHead = extractSSRHead(ssr);
|
|
2362
|
+
const ssrHead = extractSSRHead(ssr, undefined, ogConfig);
|
|
2351
2363
|
if (ssrHead)
|
|
2352
2364
|
head += `
|
|
2353
2365
|
${ssrHead}`;
|
|
@@ -2358,29 +2370,86 @@ ${ssrHead}`;
|
|
|
2358
2370
|
} catch {}
|
|
2359
2371
|
return head;
|
|
2360
2372
|
}
|
|
2361
|
-
function
|
|
2373
|
+
function parseTitleFromHead(head) {
|
|
2374
|
+
const match = head.match(/<title[^>]*>(.*?)<\/title>/is);
|
|
2375
|
+
if (match?.[1])
|
|
2376
|
+
return unescapeHtml(match[1].trim());
|
|
2377
|
+
return;
|
|
2378
|
+
}
|
|
2379
|
+
function parseDescriptionFromHead(head) {
|
|
2380
|
+
let match = head.match(/<meta\s+name=["']description["']\s+content=["'](.+?)["']\s*\/?>/i);
|
|
2381
|
+
if (match?.[1])
|
|
2382
|
+
return unescapeHtml(match[1].trim());
|
|
2383
|
+
match = head.match(/<meta\s+content=["'](.+?)["']\s+name=["']description["']\s*\/?>/i);
|
|
2384
|
+
if (match?.[1])
|
|
2385
|
+
return unescapeHtml(match[1].trim());
|
|
2386
|
+
return;
|
|
2387
|
+
}
|
|
2388
|
+
function unescapeHtml(input) {
|
|
2389
|
+
return input.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
|
|
2390
|
+
}
|
|
2391
|
+
function hasMetaTag(head, property) {
|
|
2392
|
+
const propRegex = new RegExp(`<meta\\s+(?:property|name)=["']${property}["']`, "i");
|
|
2393
|
+
const contentFirstRegex = new RegExp(`<meta\\s+content=["'][^"']*["']\\s+(?:property|name)=["']${property}["']`, "i");
|
|
2394
|
+
return propRegex.test(head) || contentFirstRegex.test(head);
|
|
2395
|
+
}
|
|
2396
|
+
function generateMissingOGTags(head, ogConfig) {
|
|
2397
|
+
const title = parseTitleFromHead(head);
|
|
2398
|
+
const description = parseDescriptionFromHead(head);
|
|
2399
|
+
const additionalTags = [];
|
|
2400
|
+
if (title && !hasMetaTag(head, "og:title")) {
|
|
2401
|
+
additionalTags.push(`<meta property="og:title" content="${escapeHtml2(title)}" />`);
|
|
2402
|
+
}
|
|
2403
|
+
const finalDescription = description || ogConfig?.siteDescription;
|
|
2404
|
+
if (finalDescription && !hasMetaTag(head, "og:description")) {
|
|
2405
|
+
additionalTags.push(`<meta property="og:description" content="${escapeHtml2(finalDescription)}" />`);
|
|
2406
|
+
}
|
|
2407
|
+
if (title && !hasMetaTag(head, "twitter:title")) {
|
|
2408
|
+
additionalTags.push(`<meta name="twitter:title" content="${escapeHtml2(title)}" />`);
|
|
2409
|
+
}
|
|
2410
|
+
if (finalDescription && !hasMetaTag(head, "twitter:description")) {
|
|
2411
|
+
additionalTags.push(`<meta name="twitter:description" content="${escapeHtml2(finalDescription)}" />`);
|
|
2412
|
+
}
|
|
2413
|
+
if (!hasMetaTag(head, "og:type")) {
|
|
2414
|
+
const ogType = ogConfig?.defaultType || "website";
|
|
2415
|
+
additionalTags.push(`<meta property="og:type" content="${escapeHtml2(ogType)}" />`);
|
|
2416
|
+
}
|
|
2417
|
+
if (!hasMetaTag(head, "twitter:card")) {
|
|
2418
|
+
const twitterCard = ogConfig?.twitterCard || "summary_large_image";
|
|
2419
|
+
additionalTags.push(`<meta name="twitter:card" content="${twitterCard}" />`);
|
|
2420
|
+
}
|
|
2421
|
+
return additionalTags.length > 0 ? `
|
|
2422
|
+
${additionalTags.join(`
|
|
2423
|
+
`)}` : "";
|
|
2424
|
+
}
|
|
2425
|
+
function extractSSRHead(ssr, data, ogConfig, existingHead) {
|
|
2362
2426
|
if (!ssr)
|
|
2363
2427
|
return "";
|
|
2428
|
+
let headContent = "";
|
|
2364
2429
|
if (typeof ssr.head === "function") {
|
|
2365
2430
|
try {
|
|
2366
2431
|
const result = ssr.head({ data });
|
|
2367
2432
|
if (typeof result === "string")
|
|
2368
|
-
|
|
2369
|
-
if (Array.isArray(result))
|
|
2370
|
-
|
|
2433
|
+
headContent = result;
|
|
2434
|
+
else if (Array.isArray(result))
|
|
2435
|
+
headContent = String(result.join(`
|
|
2371
2436
|
`));
|
|
2372
|
-
return "";
|
|
2373
2437
|
} catch (err) {
|
|
2374
2438
|
console.error("[extractSSRHead] Error calling head function:", err);
|
|
2375
2439
|
return "";
|
|
2376
2440
|
}
|
|
2377
|
-
}
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
return String(ssr.head.join(`
|
|
2441
|
+
} else if (typeof ssr.head === "string") {
|
|
2442
|
+
headContent = ssr.head;
|
|
2443
|
+
} else if (Array.isArray(ssr.head)) {
|
|
2444
|
+
headContent = String(ssr.head.join(`
|
|
2382
2445
|
`));
|
|
2383
|
-
|
|
2446
|
+
}
|
|
2447
|
+
if (!headContent)
|
|
2448
|
+
return "";
|
|
2449
|
+
const combinedHead = existingHead ? `${existingHead}
|
|
2450
|
+
${headContent}` : headContent;
|
|
2451
|
+
const additionalOGTags = generateMissingOGTags(combinedHead, ogConfig);
|
|
2452
|
+
return headContent + additionalOGTags;
|
|
2384
2453
|
}
|
|
2385
2454
|
function extractSSRLang(ssr) {
|
|
2386
2455
|
if (!ssr)
|
|
@@ -5323,7 +5392,8 @@ async function renderSSRDocumentStream(options) {
|
|
|
5323
5392
|
browserTelemetryConfig,
|
|
5324
5393
|
traceContext,
|
|
5325
5394
|
parentSpan: options.parentSpan,
|
|
5326
|
-
timeout: options.timeout
|
|
5395
|
+
timeout: options.timeout,
|
|
5396
|
+
ssrExport: setup2.metadataResult.ssrExport
|
|
5327
5397
|
});
|
|
5328
5398
|
if (debug)
|
|
5329
5399
|
console.log(`[renderStream] ${pathname} - returning stream: ${(performance.now() - t0).toFixed(2)}ms`);
|
|
@@ -5431,12 +5501,100 @@ function buildStreamingScripts(ctx) {
|
|
|
5431
5501
|
const feedsScript = createFeedsScript();
|
|
5432
5502
|
const llmsScript = createLlmsScript();
|
|
5433
5503
|
let allScripts = dataScript + feedsScript + llmsScript + collectionScripts + ctx.preloadHydrationScript;
|
|
5504
|
+
const metaUpdateScript = generateMetaUpdateScript(ctx, ssrDataSnapshot);
|
|
5505
|
+
if (metaUpdateScript) {
|
|
5506
|
+
allScripts += metaUpdateScript;
|
|
5507
|
+
}
|
|
5434
5508
|
allScripts += `<script type="module" src="${ctx.bundleUrl}"></script>`;
|
|
5435
5509
|
if (ctx.isWatchMode) {
|
|
5436
5510
|
allScripts += `<script type="module" src="/__reroute_watch.js"></script>`;
|
|
5437
5511
|
}
|
|
5438
5512
|
return allScripts;
|
|
5439
5513
|
}
|
|
5514
|
+
function generateMetaUpdateScript(ctx, ssrDataSnapshot) {
|
|
5515
|
+
if (typeof ctx.ssrExport?.head !== "function") {
|
|
5516
|
+
return "";
|
|
5517
|
+
}
|
|
5518
|
+
const routeData = ssrDataSnapshot[ctx.pathname];
|
|
5519
|
+
if (!routeData) {
|
|
5520
|
+
return "";
|
|
5521
|
+
}
|
|
5522
|
+
let headResult;
|
|
5523
|
+
try {
|
|
5524
|
+
headResult = ctx.ssrExport.head({ data: routeData });
|
|
5525
|
+
} catch (err) {
|
|
5526
|
+
console.error("[reroute] Error calling ssr.head() at stream end:", err);
|
|
5527
|
+
return "";
|
|
5528
|
+
}
|
|
5529
|
+
if (!headResult) {
|
|
5530
|
+
return "";
|
|
5531
|
+
}
|
|
5532
|
+
const headHtml = Array.isArray(headResult) ? headResult.join(`
|
|
5533
|
+
`) : headResult;
|
|
5534
|
+
if (!headHtml) {
|
|
5535
|
+
return "";
|
|
5536
|
+
}
|
|
5537
|
+
const metaUpdates = parseHeadForMetaUpdates(headHtml);
|
|
5538
|
+
if (Object.keys(metaUpdates).length === 0) {
|
|
5539
|
+
return "";
|
|
5540
|
+
}
|
|
5541
|
+
const updatesJson = JSON.stringify(metaUpdates);
|
|
5542
|
+
return `<script>(function(){var u=${updatesJson};if(u.title){document.title=u.title}Object.keys(u).forEach(function(k){if(k==='title')return;var s=k.split(':');var isOg=s[0]==='og'||s[0]==='twitter';var el=isOg?document.querySelector('meta[property="'+k+'"]')||document.querySelector('meta[name="'+k+'"]'):document.querySelector('meta[name="'+k+'"]');if(el){el.setAttribute('content',u[k])}else{var m=document.createElement('meta');m.setAttribute(isOg?'property':'name',k);m.setAttribute('content',u[k]);document.head.appendChild(m)}})})()</script>`;
|
|
5543
|
+
}
|
|
5544
|
+
function parseHeadForMetaUpdates(headHtml) {
|
|
5545
|
+
const updates = {};
|
|
5546
|
+
const titleMatch = headHtml.match(/<title[^>]*>(.*?)<\/title>/is);
|
|
5547
|
+
if (titleMatch?.[1]) {
|
|
5548
|
+
updates.title = unescapeHtmlEntities(titleMatch[1].trim());
|
|
5549
|
+
}
|
|
5550
|
+
let descMatch = headHtml.match(/<meta\s+name=["']description["']\s+content=["'](.+?)["']/i);
|
|
5551
|
+
if (!descMatch) {
|
|
5552
|
+
descMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']description["']/i);
|
|
5553
|
+
}
|
|
5554
|
+
if (descMatch?.[1]) {
|
|
5555
|
+
updates.description = unescapeHtmlEntities(descMatch[1].trim());
|
|
5556
|
+
}
|
|
5557
|
+
let ogTitleMatch = headHtml.match(/<meta\s+property=["']og:title["']\s+content=["'](.+?)["']/i);
|
|
5558
|
+
if (!ogTitleMatch) {
|
|
5559
|
+
ogTitleMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+property=["']og:title["']/i);
|
|
5560
|
+
}
|
|
5561
|
+
if (ogTitleMatch?.[1]) {
|
|
5562
|
+
updates["og:title"] = unescapeHtmlEntities(ogTitleMatch[1].trim());
|
|
5563
|
+
} else if (updates.title) {
|
|
5564
|
+
updates["og:title"] = updates.title;
|
|
5565
|
+
}
|
|
5566
|
+
let ogDescMatch = headHtml.match(/<meta\s+property=["']og:description["']\s+content=["'](.+?)["']/i);
|
|
5567
|
+
if (!ogDescMatch) {
|
|
5568
|
+
ogDescMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+property=["']og:description["']/i);
|
|
5569
|
+
}
|
|
5570
|
+
if (ogDescMatch?.[1]) {
|
|
5571
|
+
updates["og:description"] = unescapeHtmlEntities(ogDescMatch[1].trim());
|
|
5572
|
+
} else if (updates.description) {
|
|
5573
|
+
updates["og:description"] = updates.description;
|
|
5574
|
+
}
|
|
5575
|
+
let twitterTitleMatch = headHtml.match(/<meta\s+name=["']twitter:title["']\s+content=["'](.+?)["']/i);
|
|
5576
|
+
if (!twitterTitleMatch) {
|
|
5577
|
+
twitterTitleMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']twitter:title["']/i);
|
|
5578
|
+
}
|
|
5579
|
+
if (twitterTitleMatch?.[1]) {
|
|
5580
|
+
updates["twitter:title"] = unescapeHtmlEntities(twitterTitleMatch[1].trim());
|
|
5581
|
+
} else if (updates.title) {
|
|
5582
|
+
updates["twitter:title"] = updates.title;
|
|
5583
|
+
}
|
|
5584
|
+
let twitterDescMatch = headHtml.match(/<meta\s+name=["']twitter:description["']\s+content=["'](.+?)["']/i);
|
|
5585
|
+
if (!twitterDescMatch) {
|
|
5586
|
+
twitterDescMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']twitter:description["']/i);
|
|
5587
|
+
}
|
|
5588
|
+
if (twitterDescMatch?.[1]) {
|
|
5589
|
+
updates["twitter:description"] = unescapeHtmlEntities(twitterDescMatch[1].trim());
|
|
5590
|
+
} else if (updates.description) {
|
|
5591
|
+
updates["twitter:description"] = updates.description;
|
|
5592
|
+
}
|
|
5593
|
+
return updates;
|
|
5594
|
+
}
|
|
5595
|
+
function unescapeHtmlEntities(str) {
|
|
5596
|
+
return str.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&");
|
|
5597
|
+
}
|
|
5440
5598
|
var init_stream = __esm(() => {
|
|
5441
5599
|
init_server2();
|
|
5442
5600
|
init_config();
|
|
@@ -105839,7 +105997,7 @@ async function getVersionString2() {
|
|
|
105839
105997
|
}
|
|
105840
105998
|
async function getVersion2() {
|
|
105841
105999
|
if (true) {
|
|
105842
|
-
return "0.
|
|
106000
|
+
return "0.43.0";
|
|
105843
106001
|
}
|
|
105844
106002
|
const possiblePaths = [
|
|
105845
106003
|
path3.join(import.meta.dir, "../../../package.json"),
|
|
@@ -105856,10 +106014,10 @@ async function getVersion2() {
|
|
|
105856
106014
|
}
|
|
105857
106015
|
async function getCommit2() {
|
|
105858
106016
|
if (true) {
|
|
105859
|
-
return "
|
|
106017
|
+
return "8a3c652";
|
|
105860
106018
|
}
|
|
105861
106019
|
return "dev";
|
|
105862
106020
|
}
|
|
105863
106021
|
main();
|
|
105864
106022
|
|
|
105865
|
-
//# debugId=
|
|
106023
|
+
//# debugId=F78EC5575219E60664756E2164756E21
|