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.
Files changed (187) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +101 -29
  3. package/cli/bin.js.map +10 -10
  4. package/cli/index.d.ts +1 -1
  5. package/cli/index.js +4 -4
  6. package/cli/index.js.map +1 -1
  7. package/cli/src/cli.d.ts +1 -1
  8. package/cli/src/commands/analyze.d.ts +1 -1
  9. package/cli/src/commands/build.d.ts +1 -1
  10. package/cli/src/commands/dev.d.ts +1 -1
  11. package/cli/src/commands/gen.d.ts +1 -1
  12. package/cli/src/commands/index.d.ts +1 -1
  13. package/cli/src/commands/init.d.ts +1 -1
  14. package/cli/src/commands/lib/assets.d.ts +1 -1
  15. package/cli/src/commands/lib/bundler.d.ts +1 -1
  16. package/cli/src/commands/lib/command.d.ts +1 -1
  17. package/cli/src/commands/lib/env.d.ts +1 -1
  18. package/cli/src/commands/lib/index.d.ts +1 -1
  19. package/cli/src/commands/lib/log.d.ts +1 -1
  20. package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
  21. package/cli/src/commands/lib/markdown/index.d.ts +1 -1
  22. package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
  23. package/cli/src/commands/lib/production.d.ts +1 -1
  24. package/cli/src/commands/lib/server.d.ts +1 -1
  25. package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
  26. package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
  27. package/cli/src/commands/lib/tailwind.d.ts +1 -1
  28. package/cli/src/commands/lib/terminal-ui.d.ts +1 -1
  29. package/cli/src/commands/lib/version.d.ts +1 -1
  30. package/cli/src/commands/og.d.ts +1 -1
  31. package/cli/src/commands/start.d.ts +1 -1
  32. package/cli/src/index.d.ts +1 -1
  33. package/core/index.d.ts +1 -1
  34. package/core/index.js +97 -25
  35. package/core/index.js.map +10 -10
  36. package/core/src/bundler/hash.d.ts +1 -1
  37. package/core/src/bundler/index.d.ts +1 -1
  38. package/core/src/config.d.ts +42 -2
  39. package/core/src/config.d.ts.map +1 -1
  40. package/core/src/content/discovery.d.ts +1 -1
  41. package/core/src/content/index.d.ts +1 -1
  42. package/core/src/content/metadata.d.ts +7 -2
  43. package/core/src/content/metadata.d.ts.map +1 -1
  44. package/core/src/index.d.ts +1 -1
  45. package/core/src/llms/extractor.d.ts +1 -1
  46. package/core/src/llms/formatter.d.ts +1 -1
  47. package/core/src/llms/full-generator.d.ts +1 -1
  48. package/core/src/llms/index-generator.d.ts +1 -1
  49. package/core/src/llms/index.d.ts +1 -1
  50. package/core/src/og/discovery.d.ts +1 -1
  51. package/core/src/og/index.d.ts +1 -1
  52. package/core/src/og/meta.d.ts +1 -1
  53. package/core/src/og/render.d.ts +1 -1
  54. package/core/src/og/types.d.ts +1 -1
  55. package/core/src/robots/discovery.d.ts +1 -1
  56. package/core/src/robots/generator.d.ts +1 -1
  57. package/core/src/robots/index.d.ts +1 -1
  58. package/core/src/robots/policies.d.ts +1 -1
  59. package/core/src/rss/discovery.d.ts +1 -1
  60. package/core/src/rss/generator.d.ts +1 -1
  61. package/core/src/rss/index.d.ts +1 -1
  62. package/core/src/sitemap/discovery.d.ts +1 -1
  63. package/core/src/sitemap/generator.d.ts +1 -1
  64. package/core/src/sitemap/index.d.ts +1 -1
  65. package/core/src/ssr/index.d.ts +1 -1
  66. package/core/src/ssr/lib/cache.d.ts +1 -1
  67. package/core/src/ssr/lib/collections.d.ts +1 -1
  68. package/core/src/ssr/lib/compression.d.ts +1 -1
  69. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  70. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  71. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  72. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  73. package/core/src/ssr/lib/data.d.ts +1 -1
  74. package/core/src/ssr/lib/html.d.ts +6 -1
  75. package/core/src/ssr/lib/html.d.ts.map +1 -1
  76. package/core/src/ssr/lib/imports.d.ts +1 -1
  77. package/core/src/ssr/lib/index.d.ts +1 -1
  78. package/core/src/ssr/lib/layouts.d.ts +1 -1
  79. package/core/src/ssr/lib/metadata.d.ts +3 -3
  80. package/core/src/ssr/lib/metadata.d.ts.map +1 -1
  81. package/core/src/ssr/lib/mime.d.ts +1 -1
  82. package/core/src/ssr/lib/modules.d.ts +1 -1
  83. package/core/src/ssr/lib/path.d.ts +1 -1
  84. package/core/src/ssr/lib/preload.d.ts +1 -1
  85. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  86. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  87. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  88. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  89. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  90. package/core/src/ssr/lib/seed.d.ts +1 -1
  91. package/core/src/ssr/lib/serialize.d.ts +1 -1
  92. package/core/src/ssr/lib/setup.d.ts +3 -2
  93. package/core/src/ssr/lib/setup.d.ts.map +1 -1
  94. package/core/src/ssr/lib/styles.d.ts +1 -1
  95. package/core/src/ssr/lib/template.d.ts +1 -1
  96. package/core/src/ssr/lib/types.d.ts +1 -1
  97. package/core/src/ssr/render.d.ts +3 -2
  98. package/core/src/ssr/render.d.ts.map +1 -1
  99. package/core/src/ssr/stream.d.ts +3 -2
  100. package/core/src/ssr/stream.d.ts.map +1 -1
  101. package/elysia/index.d.ts +1 -1
  102. package/elysia/index.js +100 -25
  103. package/elysia/index.js.map +12 -12
  104. package/elysia/src/index.d.ts +1 -1
  105. package/elysia/src/libs/assets.d.ts +1 -1
  106. package/elysia/src/libs/cache.d.ts +1 -1
  107. package/elysia/src/libs/caching.d.ts +1 -1
  108. package/elysia/src/libs/http.d.ts +1 -1
  109. package/elysia/src/libs/image.d.ts +1 -1
  110. package/elysia/src/libs/index.d.ts +1 -1
  111. package/elysia/src/libs/llms.d.ts +1 -1
  112. package/elysia/src/libs/response.d.ts +1 -1
  113. package/elysia/src/libs/serving.d.ts +1 -1
  114. package/elysia/src/plugin.d.ts +1 -1
  115. package/elysia/src/plugin.d.ts.map +1 -1
  116. package/elysia/src/routes/artifacts.d.ts +1 -1
  117. package/elysia/src/routes/content.d.ts +1 -1
  118. package/elysia/src/routes/image.d.ts +1 -1
  119. package/elysia/src/routes/index.d.ts +1 -1
  120. package/elysia/src/routes/internal.d.ts +1 -1
  121. package/elysia/src/routes/llms.d.ts +1 -1
  122. package/elysia/src/routes/og.d.ts +1 -1
  123. package/elysia/src/routes/redirects.d.ts +1 -1
  124. package/elysia/src/routes/robots.d.ts +1 -1
  125. package/elysia/src/routes/rss.d.ts +1 -1
  126. package/elysia/src/routes/search.d.ts +1 -1
  127. package/elysia/src/routes/sitemap.d.ts +1 -1
  128. package/elysia/src/routes/ssr.d.ts +3 -2
  129. package/elysia/src/routes/ssr.d.ts.map +1 -1
  130. package/elysia/src/routes/static.d.ts +1 -1
  131. package/elysia/src/types.d.ts +1 -1
  132. package/package.json +1 -1
  133. package/react/index.d.ts +1 -1
  134. package/react/index.js +2 -2
  135. package/react/index.js.map +1 -1
  136. package/react/src/components/ClientOnly.d.ts +1 -1
  137. package/react/src/components/ContentRoute.d.ts +1 -1
  138. package/react/src/components/Image.d.ts +1 -1
  139. package/react/src/components/LazyRoute.d.ts +1 -1
  140. package/react/src/components/Link.d.ts +1 -1
  141. package/react/src/components/Markdown.d.ts +1 -1
  142. package/react/src/components/Outlet.d.ts +1 -1
  143. package/react/src/components/index.d.ts +1 -1
  144. package/react/src/hooks/index.d.ts +1 -1
  145. package/react/src/hooks/useContent.d.ts +1 -1
  146. package/react/src/hooks/useData.d.ts +1 -1
  147. package/react/src/hooks/useFeed.d.ts +1 -1
  148. package/react/src/hooks/useLayoutData.d.ts +1 -1
  149. package/react/src/hooks/useLlms.d.ts +1 -1
  150. package/react/src/hooks/useNavigate.d.ts +1 -1
  151. package/react/src/hooks/useParams.d.ts +1 -1
  152. package/react/src/hooks/useRouter.d.ts +1 -1
  153. package/react/src/hooks/useSearch.d.ts +1 -1
  154. package/react/src/hooks/useSearchParams.d.ts +1 -1
  155. package/react/src/hooks/useToc.d.ts +1 -1
  156. package/react/src/index.d.ts +1 -1
  157. package/react/src/lib/collection.d.ts +1 -1
  158. package/react/src/lib/content.d.ts +1 -1
  159. package/react/src/lib/head.d.ts +1 -1
  160. package/react/src/lib/index.d.ts +1 -1
  161. package/react/src/lib/lazy-route.d.ts +1 -1
  162. package/react/src/lib/route-loader.d.ts +1 -1
  163. package/react/src/providers/ContentProvider.d.ts +1 -1
  164. package/react/src/providers/RerouteProvider.d.ts +1 -1
  165. package/react/src/providers/RouterProvider.d.ts +1 -1
  166. package/react/src/providers/index.d.ts +1 -1
  167. package/react/src/types/any.d.ts +1 -1
  168. package/react/src/types/index.d.ts +1 -1
  169. package/react/src/types/router.d.ts +1 -1
  170. package/telemetry/react.d.ts +1 -1
  171. package/telemetry/react.js +2 -2
  172. package/telemetry/react.js.map +1 -1
  173. package/telemetry/server.d.ts +1 -1
  174. package/telemetry/server.js +2 -2
  175. package/telemetry/server.js.map +8 -8
  176. package/telemetry/src/react/api.d.ts +1 -1
  177. package/telemetry/src/react/context.d.ts +1 -1
  178. package/telemetry/src/react/index.d.ts +1 -1
  179. package/telemetry/src/react/telemetry.d.ts +1 -1
  180. package/telemetry/src/server/context.d.ts +1 -1
  181. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  182. package/telemetry/src/server/headers/index.d.ts +1 -1
  183. package/telemetry/src/server/headers/presets.d.ts +1 -1
  184. package/telemetry/src/server/index.d.ts +1 -1
  185. package/telemetry/src/server/instrumentation.d.ts +1 -1
  186. package/telemetry/src/server/plugin.d.ts +1 -1
  187. package/telemetry/src/server/sourcemap.d.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
2
+ * reroute-js v0.41.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
2
+ * reroute-js v0.41.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
2
+ * reroute-js v0.41.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
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;AAW5D,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,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,CA0I1B;AAED,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
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;AAa5D,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,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,CAgK7B;AA4ND,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
2
+ * reroute-js v0.41.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
package/elysia/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.40.2
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
- async function extractPageMetadata(pathname, clientDir, cwd, isWatchMode, currentStatusOverride, ogConfig, baseUrl, autoCanonical, ssrData) {
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
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, ogConfig);
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, `<html$1 lang="${pageLang}">`);
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(/<html([^>]*)>/i, `<html$1 lang="${ctx.pageLang}">`).replace(/<\/head>/i, `${combinedHead ? `${combinedHead}
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=E9B46B80C24001D364756E2164756E21
8345
+ //# debugId=EE0ACEF1418C00E864756E2164756E21