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/core/src/ssr/render.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* reroute-js v0.
|
|
2
|
+
* reroute-js v0.41.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright 2026 stewones <hi@stewan.io>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Span } from '@opentelemetry/api';
|
|
11
11
|
import { type ReactElement } from 'react';
|
|
12
|
-
import { type OGImageOptions } from '../config';
|
|
12
|
+
import { type OGImageOptions, type OGOptions } from '../config';
|
|
13
13
|
type SSRRenderOptions = {
|
|
14
14
|
pathname: string;
|
|
15
15
|
rootComponent: ReactElement;
|
|
@@ -26,6 +26,7 @@ type SSRRenderOptions = {
|
|
|
26
26
|
maxAge?: number;
|
|
27
27
|
searchParams?: URLSearchParams;
|
|
28
28
|
ogConfig?: OGImageOptions;
|
|
29
|
+
ogMetaConfig?: OGOptions;
|
|
29
30
|
baseUrl?: string;
|
|
30
31
|
autoCanonical?: boolean;
|
|
31
32
|
parentSpan?: Span | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAOxD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAOxD,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAW5E,KAAK,gBAAgB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,eAAe,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,iBAAe,iBAAiB,CAC/B,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,CAAC,CA2I1B;AAED,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
package/core/src/ssr/stream.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* reroute-js v0.
|
|
2
|
+
* reroute-js v0.41.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright 2026 stewones <hi@stewan.io>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Span } from '@opentelemetry/api';
|
|
11
11
|
import { type ReactElement } from 'react';
|
|
12
|
-
import { type OGImageOptions } from '../config';
|
|
12
|
+
import { type OGImageOptions, type OGOptions } from '../config';
|
|
13
13
|
type StreamingSSROptions = {
|
|
14
14
|
pathname: string;
|
|
15
15
|
rootComponent: ReactElement;
|
|
@@ -27,6 +27,7 @@ type StreamingSSROptions = {
|
|
|
27
27
|
maxAge?: number;
|
|
28
28
|
searchParams?: URLSearchParams;
|
|
29
29
|
ogConfig?: OGImageOptions;
|
|
30
|
+
ogMetaConfig?: OGOptions;
|
|
30
31
|
baseUrl?: string;
|
|
31
32
|
autoCanonical?: boolean;
|
|
32
33
|
parentSpan?: Span | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAOxD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/ssr/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAOxD,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAiB5E,KAAK,mBAAmB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACzB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,iBAAe,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA0K7B;AA0ND,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
|
package/elysia/index.d.ts
CHANGED
package/elysia/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* reroute-js v0.
|
|
2
|
+
* reroute-js v0.41.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright 2026 stewones <hi@stewan.io>
|
|
@@ -168,7 +168,7 @@ async function getContentMeta(absPath, isWatchMode) {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
function buildHeadFromMeta(meta) {
|
|
171
|
+
function buildHeadFromMeta(meta, ogConfig) {
|
|
172
172
|
if (!meta || typeof meta !== "object")
|
|
173
173
|
return "";
|
|
174
174
|
const parts = [];
|
|
@@ -178,6 +178,23 @@ function buildHeadFromMeta(meta) {
|
|
|
178
178
|
parts.push(`<title>${escapeHtml(title)}</title>`);
|
|
179
179
|
if (description)
|
|
180
180
|
parts.push(`<meta name="description" content="${escapeHtml(description)}" />`);
|
|
181
|
+
const ogType = typeof meta.ogType === "string" ? meta.ogType : ogConfig?.defaultType || "website";
|
|
182
|
+
parts.push(`<meta property="og:type" content="${escapeHtml(ogType)}" />`);
|
|
183
|
+
if (title) {
|
|
184
|
+
parts.push(`<meta property="og:title" content="${escapeHtml(title)}" />`);
|
|
185
|
+
}
|
|
186
|
+
const finalDescription = description || ogConfig?.siteDescription;
|
|
187
|
+
if (finalDescription) {
|
|
188
|
+
parts.push(`<meta property="og:description" content="${escapeHtml(finalDescription)}" />`);
|
|
189
|
+
}
|
|
190
|
+
const twitterCard = ogConfig?.twitterCard || "summary_large_image";
|
|
191
|
+
parts.push(`<meta name="twitter:card" content="${twitterCard}" />`);
|
|
192
|
+
if (title) {
|
|
193
|
+
parts.push(`<meta name="twitter:title" content="${escapeHtml(title)}" />`);
|
|
194
|
+
}
|
|
195
|
+
if (finalDescription) {
|
|
196
|
+
parts.push(`<meta name="twitter:description" content="${escapeHtml(finalDescription)}" />`);
|
|
197
|
+
}
|
|
181
198
|
return parts.length ? `
|
|
182
199
|
${parts.join(`
|
|
183
200
|
`)}` : "";
|
|
@@ -1640,6 +1657,28 @@ function removeDefaultMetaTags(templateHtml) {
|
|
|
1640
1657
|
} catch {}
|
|
1641
1658
|
return result;
|
|
1642
1659
|
}
|
|
1660
|
+
function removeOverriddenMetaTags(templateHtml, injectedHead) {
|
|
1661
|
+
let result = templateHtml;
|
|
1662
|
+
try {
|
|
1663
|
+
const injectedOgProps = [
|
|
1664
|
+
...injectedHead.matchAll(/<meta\s+property\s*=\s*['"]([^'"]+)['"][^>]*>/gi)
|
|
1665
|
+
].map((m) => m[1].toLowerCase());
|
|
1666
|
+
const injectedNameMetas = [
|
|
1667
|
+
...injectedHead.matchAll(/<meta\s+name\s*=\s*['"]([^'"]+)['"][^>]*>/gi)
|
|
1668
|
+
].map((m) => m[1].toLowerCase());
|
|
1669
|
+
for (const prop of injectedOgProps) {
|
|
1670
|
+
const escapedProp = prop.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1671
|
+
const regex = new RegExp(`<meta\\s+property\\s*=\\s*['"]${escapedProp}['"][^>]*>`, "gi");
|
|
1672
|
+
result = result.replace(regex, "");
|
|
1673
|
+
}
|
|
1674
|
+
for (const name of injectedNameMetas) {
|
|
1675
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1676
|
+
const regex = new RegExp(`<meta\\s+name\\s*=\\s*['"]${escapedName}['"][^>]*>`, "gi");
|
|
1677
|
+
result = result.replace(regex, "");
|
|
1678
|
+
}
|
|
1679
|
+
} catch {}
|
|
1680
|
+
return result;
|
|
1681
|
+
}
|
|
1643
1682
|
function deduplicateHeadContent(templateHtml, headToInject) {
|
|
1644
1683
|
let cleanedTemplate = templateHtml;
|
|
1645
1684
|
let cleanedHead = headToInject;
|
|
@@ -1650,6 +1689,7 @@ function deduplicateHeadContent(templateHtml, headToInject) {
|
|
|
1650
1689
|
} else if (/<meta\s+name\s*=\s*['"]description['"][^>]*>/i.test(cleanedHead)) {
|
|
1651
1690
|
cleanedTemplate = cleanedTemplate.replace(/<meta\s+name\s*=\s*['"]description['"][^>]*>/i, "");
|
|
1652
1691
|
}
|
|
1692
|
+
cleanedTemplate = removeOverriddenMetaTags(cleanedTemplate, cleanedHead);
|
|
1653
1693
|
} catch {}
|
|
1654
1694
|
return { cleanedTemplate, cleanedHead };
|
|
1655
1695
|
}
|
|
@@ -1768,7 +1808,6 @@ async function generateOGImageMetaTags(pathname, clientDir, ogConfig) {
|
|
|
1768
1808
|
return `<meta property="og:image" content="${ogImagePath}" />
|
|
1769
1809
|
<meta property="og:image:width" content="${width}" />
|
|
1770
1810
|
<meta property="og:image:height" content="${height}" />
|
|
1771
|
-
<meta name="twitter:card" content="summary_large_image" />
|
|
1772
1811
|
<meta name="twitter:image" content="${ogImagePath}" />`;
|
|
1773
1812
|
}
|
|
1774
1813
|
var init_meta = __esm(() => {
|
|
@@ -1806,7 +1845,25 @@ function generateOgUrl(baseUrl, pathname) {
|
|
|
1806
1845
|
const ogUrl = `${cleanBaseUrl}${normalizedPath}`;
|
|
1807
1846
|
return `<meta property="og:url" content="${ogUrl}" />`;
|
|
1808
1847
|
}
|
|
1809
|
-
|
|
1848
|
+
function generateGlobalOGTags(ogConfig) {
|
|
1849
|
+
const tags = [];
|
|
1850
|
+
if (ogConfig.siteName) {
|
|
1851
|
+
tags.push(`<meta property="og:site_name" content="${escapeHtml2(ogConfig.siteName)}" />`);
|
|
1852
|
+
}
|
|
1853
|
+
if (ogConfig.locale) {
|
|
1854
|
+
tags.push(`<meta property="og:locale" content="${escapeHtml2(ogConfig.locale)}" />`);
|
|
1855
|
+
}
|
|
1856
|
+
if (ogConfig.twitterSite) {
|
|
1857
|
+
const handle = ogConfig.twitterSite.startsWith("@") ? ogConfig.twitterSite : `@${ogConfig.twitterSite}`;
|
|
1858
|
+
tags.push(`<meta name="twitter:site" content="${escapeHtml2(handle)}" />`);
|
|
1859
|
+
}
|
|
1860
|
+
return tags.length ? tags.join(`
|
|
1861
|
+
`) : "";
|
|
1862
|
+
}
|
|
1863
|
+
function escapeHtml2(input) {
|
|
1864
|
+
return input.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
1865
|
+
}
|
|
1866
|
+
async function extractPageMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ogImageConfig, ogConfig, baseUrl, autoCanonical, ssrData) {
|
|
1810
1867
|
let perPageHead = "";
|
|
1811
1868
|
let pageLang;
|
|
1812
1869
|
let statusOverride = currentStatusOverride;
|
|
@@ -1815,7 +1872,7 @@ async function extractPageMetadata(pathname, clientDir, cwd, isWatchMode, curren
|
|
|
1815
1872
|
}, (lang) => {
|
|
1816
1873
|
if (!pageLang)
|
|
1817
1874
|
pageLang = lang;
|
|
1818
|
-
});
|
|
1875
|
+
}, ogConfig);
|
|
1819
1876
|
const shouldGenerateCanonical = autoCanonical !== false && baseUrl !== undefined;
|
|
1820
1877
|
if (shouldGenerateCanonical) {
|
|
1821
1878
|
const canonicalTag = generateCanonicalUrl(baseUrl, pathname);
|
|
@@ -1825,8 +1882,15 @@ ${canonicalTag}`;
|
|
|
1825
1882
|
perPageHead += `
|
|
1826
1883
|
${ogUrlTag}`;
|
|
1827
1884
|
}
|
|
1885
|
+
if (ogConfig) {
|
|
1886
|
+
const ogGlobalTags = generateGlobalOGTags(ogConfig);
|
|
1887
|
+
if (ogGlobalTags) {
|
|
1888
|
+
perPageHead += `
|
|
1889
|
+
${ogGlobalTags}`;
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1828
1892
|
try {
|
|
1829
|
-
const ogMetaTags = await generateOGImageMetaTags(pathname, clientDir,
|
|
1893
|
+
const ogMetaTags = await generateOGImageMetaTags(pathname, clientDir, ogImageConfig);
|
|
1830
1894
|
if (ogMetaTags) {
|
|
1831
1895
|
perPageHead += `
|
|
1832
1896
|
${ogMetaTags}`;
|
|
@@ -1838,22 +1902,22 @@ ${ogMetaTags}`;
|
|
|
1838
1902
|
perPageHead += head;
|
|
1839
1903
|
}, (lang) => {
|
|
1840
1904
|
pageLang = lang;
|
|
1841
|
-
});
|
|
1842
|
-
const routeResult = await extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ssrData);
|
|
1905
|
+
}, ogConfig);
|
|
1906
|
+
const routeResult = await extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ssrData, ogConfig);
|
|
1843
1907
|
perPageHead += routeResult.head;
|
|
1844
1908
|
if (routeResult.lang)
|
|
1845
1909
|
pageLang = routeResult.lang;
|
|
1846
1910
|
statusOverride = routeResult.statusOverride;
|
|
1847
1911
|
return { perPageHead, pageLang, statusOverride };
|
|
1848
1912
|
}
|
|
1849
|
-
async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang) {
|
|
1913
|
+
async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig) {
|
|
1850
1914
|
if (typeof layout?.path !== "string")
|
|
1851
1915
|
return;
|
|
1852
1916
|
try {
|
|
1853
1917
|
const abs = join(clientDir, "routes", String(layout.path));
|
|
1854
1918
|
const { meta, ssr } = await loadModuleMetaAndSSR(layout, abs, isWatchMode);
|
|
1855
1919
|
if (meta)
|
|
1856
|
-
addHead(buildHeadFromMeta(meta));
|
|
1920
|
+
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
1857
1921
|
if (ssr) {
|
|
1858
1922
|
const ssrHead = extractSSRHead(ssr);
|
|
1859
1923
|
if (ssrHead)
|
|
@@ -1865,16 +1929,16 @@ ${ssrHead}`);
|
|
|
1865
1929
|
}
|
|
1866
1930
|
} catch {}
|
|
1867
1931
|
}
|
|
1868
|
-
async function extractLayoutMetadata(pathname, clientDir, cwd, isWatchMode, addHead, setLang) {
|
|
1932
|
+
async function extractLayoutMetadata(pathname, clientDir, cwd, isWatchMode, addHead, setLang, ogConfig) {
|
|
1869
1933
|
try {
|
|
1870
1934
|
const m = await loadRoutesModule(cwd, isWatchMode);
|
|
1871
1935
|
const matchingLayouts = getMatchingLayouts(pathname, m?.layouts);
|
|
1872
1936
|
for (const layout of matchingLayouts) {
|
|
1873
|
-
await processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang);
|
|
1937
|
+
await processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig);
|
|
1874
1938
|
}
|
|
1875
1939
|
} catch {}
|
|
1876
1940
|
}
|
|
1877
|
-
function extractContentMetadata(pathname, addHead, setLang) {
|
|
1941
|
+
function extractContentMetadata(pathname, addHead, setLang, ogConfig) {
|
|
1878
1942
|
try {
|
|
1879
1943
|
const parts = pathname.split("/").filter(Boolean);
|
|
1880
1944
|
if (parts.length < 2)
|
|
@@ -1884,7 +1948,7 @@ function extractContentMetadata(pathname, addHead, setLang) {
|
|
|
1884
1948
|
const exp = g.__REROUTE_SSR_EXPORTS__?.[key];
|
|
1885
1949
|
const meta = exp?.meta;
|
|
1886
1950
|
const ssr = exp?.ssr;
|
|
1887
|
-
addHead(buildHeadFromMeta(meta));
|
|
1951
|
+
addHead(buildHeadFromMeta(meta, ogConfig));
|
|
1888
1952
|
const ssrHead = extractSSRHead(ssr);
|
|
1889
1953
|
if (ssrHead)
|
|
1890
1954
|
addHead(`
|
|
@@ -1894,7 +1958,7 @@ ${ssrHead}`);
|
|
|
1894
1958
|
setLang(lang);
|
|
1895
1959
|
} catch {}
|
|
1896
1960
|
}
|
|
1897
|
-
async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData) {
|
|
1961
|
+
async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData, ogConfig) {
|
|
1898
1962
|
const pathnameOnly = pathname.split("?")[0];
|
|
1899
1963
|
const match = typeof m.matchRoute === "function" ? m.matchRoute(pathnameOnly) : null;
|
|
1900
1964
|
const r = match?.route;
|
|
@@ -1907,7 +1971,7 @@ async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode,
|
|
|
1907
1971
|
const { meta, ssr } = await loadModuleMetaAndSSR(r, abs, isWatchMode);
|
|
1908
1972
|
let head = "";
|
|
1909
1973
|
if (meta)
|
|
1910
|
-
head += buildHeadFromMeta(meta);
|
|
1974
|
+
head += buildHeadFromMeta(meta, ogConfig);
|
|
1911
1975
|
if (ssr) {
|
|
1912
1976
|
const routeData = ssrData && typeof ssrData === "object" ? ssrData[pathname] : undefined;
|
|
1913
1977
|
const ssrHead = extractSSRHead(ssr, routeData);
|
|
@@ -1921,7 +1985,7 @@ ${ssrHead}`;
|
|
|
1921
1985
|
}
|
|
1922
1986
|
return { head: "", statusOverride };
|
|
1923
1987
|
}
|
|
1924
|
-
async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ssrData) {
|
|
1988
|
+
async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ssrData, ogConfig) {
|
|
1925
1989
|
let head = "";
|
|
1926
1990
|
let lang;
|
|
1927
1991
|
let statusOverride = currentStatusOverride;
|
|
@@ -1937,14 +2001,14 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
|
|
|
1937
2001
|
statusOverride = statusOverride || 404;
|
|
1938
2002
|
}
|
|
1939
2003
|
if (r && typeof r.path === "string") {
|
|
1940
|
-
const result = await extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData);
|
|
2004
|
+
const result = await extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode, statusOverride, ssrData, ogConfig);
|
|
1941
2005
|
head = result.head;
|
|
1942
2006
|
lang = result.lang;
|
|
1943
2007
|
statusOverride = result.statusOverride;
|
|
1944
2008
|
} else {
|
|
1945
2009
|
head += await extractNotFoundMetadata(pathname, clientDir, m, isWatchMode, (l) => {
|
|
1946
2010
|
lang = l;
|
|
1947
|
-
});
|
|
2011
|
+
}, ogConfig);
|
|
1948
2012
|
}
|
|
1949
2013
|
} catch {}
|
|
1950
2014
|
return { head, lang, statusOverride };
|
|
@@ -1964,7 +2028,7 @@ function findBestNotFoundRoute(list, pathname) {
|
|
|
1964
2028
|
}
|
|
1965
2029
|
return chosen;
|
|
1966
2030
|
}
|
|
1967
|
-
async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatchMode, setLang) {
|
|
2031
|
+
async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatchMode, setLang, ogConfig) {
|
|
1968
2032
|
let head = "";
|
|
1969
2033
|
try {
|
|
1970
2034
|
const list = routesModule?.notFoundRoutes;
|
|
@@ -1975,7 +2039,7 @@ async function extractNotFoundMetadata(pathname, clientDir, routesModule, isWatc
|
|
|
1975
2039
|
const abs = join(clientDir, "routes", String(chosen.path));
|
|
1976
2040
|
const { meta, ssr } = await loadModuleMetaAndSSR(chosen, abs, isWatchMode);
|
|
1977
2041
|
if (meta)
|
|
1978
|
-
head += buildHeadFromMeta(meta);
|
|
2042
|
+
head += buildHeadFromMeta(meta, ogConfig);
|
|
1979
2043
|
const ssrHead = extractSSRHead(ssr);
|
|
1980
2044
|
if (ssrHead)
|
|
1981
2045
|
head += `
|
|
@@ -2562,7 +2626,7 @@ async function performSSRSetupInternal(options, streaming) {
|
|
|
2562
2626
|
statusOverride = computeResult.statusContainer.value;
|
|
2563
2627
|
}
|
|
2564
2628
|
const metadataResult = await withSpan("ssr.extract.metadata", async (span) => {
|
|
2565
|
-
const result = await extractPageMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ogConfig, options.baseUrl, options.autoCanonical, computeResult.data);
|
|
2629
|
+
const result = await extractPageMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ogConfig, options.ogMetaConfig, options.baseUrl, options.autoCanonical, computeResult.data);
|
|
2566
2630
|
span.setAttributes({
|
|
2567
2631
|
"reroute.pathname": pathname,
|
|
2568
2632
|
"reroute.metadata.exists": !!result.perPageHead
|
|
@@ -2732,6 +2796,7 @@ async function renderSSRDocument(options) {
|
|
|
2732
2796
|
maxAge,
|
|
2733
2797
|
searchParams,
|
|
2734
2798
|
ogConfig,
|
|
2799
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
2735
2800
|
baseUrl: options.baseUrl,
|
|
2736
2801
|
autoCanonical: options.autoCanonical,
|
|
2737
2802
|
cachedCollections: options.cachedCollections,
|
|
@@ -4842,6 +4907,7 @@ async function renderSSRDocumentStream(options) {
|
|
|
4842
4907
|
maxAge,
|
|
4843
4908
|
searchParams,
|
|
4844
4909
|
ogConfig,
|
|
4910
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
4845
4911
|
baseUrl: options.baseUrl,
|
|
4846
4912
|
autoCanonical: options.autoCanonical,
|
|
4847
4913
|
cachedCollections: options.cachedCollections,
|
|
@@ -4876,7 +4942,11 @@ async function renderSSRDocumentStream(options) {
|
|
|
4876
4942
|
};
|
|
4877
4943
|
});
|
|
4878
4944
|
const pageLang = setup2.metadataResult.pageLang || lang;
|
|
4879
|
-
let headWithLang = htmlHead.replace(/<html([^>]*)>/i,
|
|
4945
|
+
let headWithLang = htmlHead.replace(/<html([^>]*)>/i, (_m, attrs) => {
|
|
4946
|
+
const hasLang = /(^|\s)lang\s*=/.test(attrs);
|
|
4947
|
+
const newAttrs = hasLang ? attrs.replace(/lang\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/i, `lang="${pageLang}"`) : `${attrs} lang="${pageLang}"`;
|
|
4948
|
+
return `<html${newAttrs}>`;
|
|
4949
|
+
});
|
|
4880
4950
|
const extraHead = setup2.bundlePreload + setup2.preloadExtraHead + setup2.metadataResult.perPageHead;
|
|
4881
4951
|
if (/<title[\s\S]*?<\/title>/i.test(extraHead)) {
|
|
4882
4952
|
headWithLang = headWithLang.replace(/<title[\s\S]*?<\/title>/i, "");
|
|
@@ -4884,6 +4954,7 @@ async function renderSSRDocumentStream(options) {
|
|
|
4884
4954
|
if (/<meta\s+name\s*=\s*['"]description['"][^>]*>/i.test(extraHead)) {
|
|
4885
4955
|
headWithLang = headWithLang.replace(/<meta\s+name\s*=\s*['"]description['"][^>]*>/i, "");
|
|
4886
4956
|
}
|
|
4957
|
+
headWithLang = removeOverriddenMetaTags(headWithLang, extraHead);
|
|
4887
4958
|
const config = await loadConfig(cwd);
|
|
4888
4959
|
const browserTelemetryConfigRaw = config.telemetry?.browser;
|
|
4889
4960
|
const { serializeBrowserTelemetryConfig: serializeBrowserTelemetryConfig2 } = await Promise.resolve().then(() => exports_serialize);
|
|
@@ -4932,7 +5003,7 @@ async function streamSSRContent(writer, encoder, ctx) {
|
|
|
4932
5003
|
try {
|
|
4933
5004
|
const combinedHead = deduplicateMetaTags([ctx.inlineStyleTag, ctx.head, ctx.extraHead].filter(Boolean).join(`
|
|
4934
5005
|
`));
|
|
4935
|
-
const headWithLangAndContent = ctx.headWithLang.replace(
|
|
5006
|
+
const headWithLangAndContent = ctx.headWithLang.replace(/<\/head>/i, `${combinedHead ? `${combinedHead}
|
|
4936
5007
|
` : ""}</head>`);
|
|
4937
5008
|
const headContent = `${headWithLangAndContent}`;
|
|
4938
5009
|
await writer.write(encoder.encode(headContent));
|
|
@@ -5072,6 +5143,7 @@ __export(exports_core, {
|
|
|
5072
5143
|
renderSSRDocumentStream: () => renderSSRDocumentStream,
|
|
5073
5144
|
renderSSRDocument: () => renderSSRDocument,
|
|
5074
5145
|
renderOGImageToPNG: () => renderOGImageToPNG,
|
|
5146
|
+
removeOverriddenMetaTags: () => removeOverriddenMetaTags,
|
|
5075
5147
|
processCollections: () => processCollections,
|
|
5076
5148
|
preloadContentModule: () => preloadContentModule,
|
|
5077
5149
|
performSSRSetup: () => performSSRSetup,
|
|
@@ -7552,6 +7624,7 @@ function registerSSRRoutes(app, options) {
|
|
|
7552
7624
|
maxAge,
|
|
7553
7625
|
searchParams,
|
|
7554
7626
|
ogConfig: options.ogConfig,
|
|
7627
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
7555
7628
|
baseUrl: options.baseUrl,
|
|
7556
7629
|
autoCanonical: options.autoCanonical,
|
|
7557
7630
|
parentSpan: renderSpan,
|
|
@@ -7730,6 +7803,7 @@ function registerSSRRoutes(app, options) {
|
|
|
7730
7803
|
maxAge,
|
|
7731
7804
|
searchParams,
|
|
7732
7805
|
ogConfig: options.ogConfig,
|
|
7806
|
+
ogMetaConfig: options.ogMetaConfig,
|
|
7733
7807
|
baseUrl: options.baseUrl,
|
|
7734
7808
|
autoCanonical: options.autoCanonical,
|
|
7735
7809
|
parentSpan: renderSpan,
|
|
@@ -8197,6 +8271,7 @@ var reroute = () => async (app) => {
|
|
|
8197
8271
|
streamingEnabled,
|
|
8198
8272
|
streamingTimeout: globalConfig.streaming?.timeout,
|
|
8199
8273
|
ogConfig,
|
|
8274
|
+
ogMetaConfig: globalConfig.og,
|
|
8200
8275
|
baseUrl,
|
|
8201
8276
|
autoCanonical
|
|
8202
8277
|
});
|
|
@@ -8267,4 +8342,4 @@ export {
|
|
|
8267
8342
|
reroute
|
|
8268
8343
|
};
|
|
8269
8344
|
|
|
8270
|
-
//# debugId=
|
|
8345
|
+
//# debugId=EE0ACEF1418C00E864756E2164756E21
|