hermium 0.1.10 → 0.3.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 (216) hide show
  1. package/README.md +56 -0
  2. package/bin/hermium.mjs +201 -136
  3. package/dist/api.mjs +3513 -0
  4. package/dist/{web-server → server}/_chunks/ssr-renderer.mjs +1 -1
  5. package/dist/{web-server → server}/_libs/base-ui__react.mjs +338 -34
  6. package/dist/{web-server → server}/_libs/base-ui__utils.mjs +38 -33
  7. package/dist/server/_libs/comma-separated-tokens.mjs +10 -0
  8. package/dist/{web-server → server}/_libs/floating-ui__core.mjs +3 -3
  9. package/dist/{web-server → server}/_libs/floating-ui__dom.mjs +4 -4
  10. package/dist/{web-server → server}/_libs/floating-ui__react-dom.mjs +3 -3
  11. package/dist/{web-server → server}/_libs/floating-ui__utils.mjs +38 -38
  12. package/dist/{web-server → server}/_libs/h3.mjs +3 -3
  13. package/dist/server/_libs/hast-util-is-element.mjs +75 -0
  14. package/dist/{web-server → server}/_libs/hast-util-to-jsx-runtime.mjs +2 -2
  15. package/dist/server/_libs/hast-util-to-text.mjs +305 -0
  16. package/dist/server/_libs/highlight.js.mjs +14756 -0
  17. package/dist/server/_libs/lowlight.mjs +262 -0
  18. package/dist/{web-server → server}/_libs/mdast-util-from-markdown.mjs +1 -1
  19. package/dist/{web-server → server}/_libs/mdast-util-gfm-autolink-literal+[...].mjs +2 -2
  20. package/dist/{web-server → server}/_libs/mdast-util-to-hast.mjs +1 -1
  21. package/dist/{web-server → server}/_libs/micromark-core-commonmark.mjs +24 -24
  22. package/dist/{web-server → server}/_libs/micromark-extension-gfm-autolink-literal+[...].mjs +1 -1
  23. package/dist/{web-server → server}/_libs/micromark-extension-gfm-footnote+[...].mjs +2 -2
  24. package/dist/{web-server → server}/_libs/micromark-extension-gfm-table.mjs +1 -1
  25. package/dist/{web-server → server}/_libs/micromark-extension-gfm-task-list-item+[...].mjs +1 -1
  26. package/dist/{web-server → server}/_libs/micromark-factory-destination.mjs +1 -1
  27. package/dist/{web-server → server}/_libs/micromark-factory-label.mjs +1 -1
  28. package/dist/{web-server → server}/_libs/micromark-factory-space.mjs +1 -1
  29. package/dist/{web-server → server}/_libs/micromark-factory-whitespace.mjs +1 -1
  30. package/dist/{web-server → server}/_libs/micromark-util-character.mjs +12 -12
  31. package/dist/{web-server → server}/_libs/micromark-util-classify-character+[...].mjs +1 -1
  32. package/dist/{web-server → server}/_libs/micromark-util-html-tag-name.mjs +2 -2
  33. package/dist/{web-server → server}/_libs/micromark-util-sanitize-uri.mjs +1 -1
  34. package/dist/{web-server → server}/_libs/micromark.mjs +3 -3
  35. package/dist/{web-server → server}/_libs/property-information.mjs +2 -3
  36. package/dist/{web-server → server}/_libs/react-dom.mjs +1 -1
  37. package/dist/{web-server → server}/_libs/react.mjs +42 -42
  38. package/dist/server/_libs/rehype-highlight.mjs +94 -0
  39. package/dist/server/_libs/space-separated-tokens.mjs +6 -0
  40. package/dist/server/_libs/tabler__icons-react.mjs +140 -0
  41. package/dist/server/_libs/tailwind-merge.mjs +3255 -0
  42. package/dist/server/_libs/tanstack__history.mjs +29 -0
  43. package/dist/{web-server → server}/_libs/tanstack__react-router.mjs +3 -3
  44. package/dist/{web-server → server}/_libs/tanstack__router-core.mjs +47 -741
  45. package/dist/server/_libs/unist-util-find-after.mjs +41 -0
  46. package/dist/{web-server → server}/_libs/unist-util-position.mjs +2 -2
  47. package/dist/{web-server → server}/_libs/use-sync-external-store.mjs +1 -1
  48. package/dist/server/_libs/zustand.mjs +43 -0
  49. package/dist/server/_ssr/ChatInputBlock-Bu2-iop_.mjs +220 -0
  50. package/dist/server/_ssr/MarkdownMessage-CNS7OSKN.mjs +68 -0
  51. package/dist/server/_ssr/chat._sessionId-P02iSfut.mjs +477 -0
  52. package/dist/{web-server/_ssr/index-CoDfv1vI.mjs → server/_ssr/chat.index-BYB_48NC.mjs} +6 -8
  53. package/dist/server/_ssr/index-C1mT_2d8.mjs +4890 -0
  54. package/dist/server/_ssr/index-DFV9_oCk.mjs +43 -0
  55. package/dist/server/_ssr/memory-CW_fSOG9.mjs +257 -0
  56. package/dist/{web-server/_ssr/router-CS6Zq3md.mjs → server/_ssr/router-CUAfx91O.mjs} +1009 -1108
  57. package/dist/server/_ssr/settings-DoXurzvn.mjs +10 -0
  58. package/dist/server/_ssr/skills-Cs7A5ZwO.mjs +422 -0
  59. package/dist/server/_ssr/theme-BK4-7E2h.mjs +42 -0
  60. package/dist/server/_ssr/usage-Bs2-LXGz.mjs +298 -0
  61. package/dist/server/_tanstack-start-manifest_v-C7Upe2TI.mjs +4 -0
  62. package/dist/server/index.mjs +502 -240
  63. package/package.json +4 -3
  64. package/dist/public/assets/IconAlertCircle-BW147gsG.js +0 -1
  65. package/dist/public/assets/IconAlertTriangle-DCoTLVSd.js +0 -1
  66. package/dist/public/assets/IconCheck-DAO7Fpl9.js +0 -1
  67. package/dist/public/assets/IconCode-BqfTl5wU.js +0 -1
  68. package/dist/public/assets/IconLoader2-B_pehSXN.js +0 -1
  69. package/dist/public/assets/IconRefresh-BbMGoMV8.js +0 -1
  70. package/dist/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
  71. package/dist/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
  72. package/dist/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
  73. package/dist/public/assets/index-BL9a2Xg9.js +0 -1
  74. package/dist/public/assets/index-BSwXjgjr.js +0 -1
  75. package/dist/public/assets/index-BWl8tn18.js +0 -1
  76. package/dist/public/assets/index-CQh8SXb2.js +0 -94
  77. package/dist/public/assets/index-Cxd-kSUY.js +0 -1
  78. package/dist/public/assets/index-DA5SH--7.js +0 -2
  79. package/dist/public/assets/index-DCHbvtBS.js +0 -1
  80. package/dist/public/assets/index-DCYXJZEe.js +0 -1
  81. package/dist/public/assets/index-DFDfp0ca.js +0 -1
  82. package/dist/public/assets/index-GuAAqSCJ.js +0 -14
  83. package/dist/public/assets/index-WIDirTHx.js +0 -29
  84. package/dist/public/assets/index-X3XZcAzy.js +0 -1
  85. package/dist/public/assets/input-7TQEEJq6.js +0 -1
  86. package/dist/public/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  87. package/dist/public/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  88. package/dist/public/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  89. package/dist/public/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  90. package/dist/public/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  91. package/dist/public/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  92. package/dist/public/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  93. package/dist/public/assets/models-BlUb1eaf.js +0 -1
  94. package/dist/public/assets/styles-PHtUFHUr.css +0 -1
  95. package/dist/public/assets/switch-B_iYUUM3.js +0 -1
  96. package/dist/public/assets/syntax-highlighter-DcBYfnEK.js +0 -6
  97. package/dist/public/assets/textarea-Dm4aaRqS.js +0 -1
  98. package/dist/public/favicon.ico +0 -0
  99. package/dist/public/favicon.png +0 -0
  100. package/dist/public/manifest.json +0 -25
  101. package/dist/public/nous-logo.png +0 -0
  102. package/dist/public/robots.txt +0 -3
  103. package/dist/web-server/_libs/babel__runtime.mjs +0 -237
  104. package/dist/web-server/_libs/character-entities-legacy.mjs +0 -111
  105. package/dist/web-server/_libs/character-reference-invalid.mjs +0 -33
  106. package/dist/web-server/_libs/comma-separated-tokens.mjs +0 -31
  107. package/dist/web-server/_libs/cookie-es.mjs +0 -44
  108. package/dist/web-server/_libs/hast-util-parse-selector.mjs +0 -39
  109. package/dist/web-server/_libs/hastscript.mjs +0 -200
  110. package/dist/web-server/_libs/is-alphabetical.mjs +0 -7
  111. package/dist/web-server/_libs/is-alphanumerical.mjs +0 -8
  112. package/dist/web-server/_libs/is-decimal.mjs +0 -7
  113. package/dist/web-server/_libs/is-hexadecimal.mjs +0 -7
  114. package/dist/web-server/_libs/lowlight.mjs +0 -1
  115. package/dist/web-server/_libs/parse-entities.mjs +0 -245
  116. package/dist/web-server/_libs/react-syntax-highlighter.mjs +0 -941
  117. package/dist/web-server/_libs/refractor.mjs +0 -2425
  118. package/dist/web-server/_libs/seroval-plugins.mjs +0 -58
  119. package/dist/web-server/_libs/seroval.mjs +0 -1775
  120. package/dist/web-server/_libs/space-separated-tokens.mjs +0 -11
  121. package/dist/web-server/_libs/tabler__icons-react.mjs +0 -233
  122. package/dist/web-server/_libs/tanstack__history.mjs +0 -204
  123. package/dist/web-server/_libs/tanstack__query-core.mjs +0 -2552
  124. package/dist/web-server/_libs/tanstack__react-query.mjs +0 -190
  125. package/dist/web-server/_libs/zod.mjs +0 -3915
  126. package/dist/web-server/_libs/zustand.mjs +0 -343
  127. package/dist/web-server/_ssr/index--Bo2_ipW.mjs +0 -277
  128. package/dist/web-server/_ssr/index-BEvygh5x.mjs +0 -612
  129. package/dist/web-server/_ssr/index-BFaKxYfN.mjs +0 -40
  130. package/dist/web-server/_ssr/index-BdrMzRTd.mjs +0 -513
  131. package/dist/web-server/_ssr/index-Cwp8Gyl1.mjs +0 -1812
  132. package/dist/web-server/_ssr/index-DQsfKYjV.mjs +0 -449
  133. package/dist/web-server/_ssr/index-Dbs9k8Ea.mjs +0 -251
  134. package/dist/web-server/_ssr/index-Dk93oyZD.mjs +0 -213
  135. package/dist/web-server/_ssr/index-KNJ7huw_.mjs +0 -369
  136. package/dist/web-server/_ssr/index.mjs +0 -1558
  137. package/dist/web-server/_ssr/input-BV1DMASc.mjs +0 -20
  138. package/dist/web-server/_ssr/models-MzrvbL2i.mjs +0 -43
  139. package/dist/web-server/_ssr/start-HYkvq4Ni.mjs +0 -4
  140. package/dist/web-server/_ssr/switch-Bd-Sg0HG.mjs +0 -33
  141. package/dist/web-server/_ssr/syntax-highlighter-5vezNTce.mjs +0 -62
  142. package/dist/web-server/_ssr/textarea-CB4kQp9w.mjs +0 -18
  143. package/dist/web-server/_tanstack-start-manifest_v-m5lY48LR.mjs +0 -4
  144. package/dist/web-server/index.mjs +0 -611
  145. /package/dist/{web-server → server}/__23tanstack-start-plugin-adapters-Cwee5PKy.mjs +0 -0
  146. /package/dist/{web-server → server}/_libs/bail.mjs +0 -0
  147. /package/dist/{web-server → server}/_libs/ccount.mjs +0 -0
  148. /package/dist/{web-server → server}/_libs/character-entities.mjs +0 -0
  149. /package/dist/{web-server → server}/_libs/class-variance-authority.mjs +0 -0
  150. /package/dist/{web-server → server}/_libs/clsx.mjs +0 -0
  151. /package/dist/{web-server/_libs/croner.mjs → server/_libs/cookie-es.mjs} +0 -0
  152. /package/dist/{web-server/_libs/crossws.mjs → server/_libs/croner.mjs} +0 -0
  153. /package/dist/{web-server/_libs/fault.mjs → server/_libs/crossws.mjs} +0 -0
  154. /package/dist/{web-server → server}/_libs/decode-named-character-reference+[...].mjs +0 -0
  155. /package/dist/{web-server → server}/_libs/devlop.mjs +0 -0
  156. /package/dist/{web-server → server}/_libs/escape-string-regexp.mjs +0 -0
  157. /package/dist/{web-server → server}/_libs/estree-util-is-identifier-name.mjs +0 -0
  158. /package/dist/{web-server → server}/_libs/extend.mjs +0 -0
  159. /package/dist/{web-server → server}/_libs/hast-util-whitespace.mjs +0 -0
  160. /package/dist/{web-server → server}/_libs/hookable.mjs +0 -0
  161. /package/dist/{web-server → server}/_libs/html-url-attributes.mjs +0 -0
  162. /package/dist/{web-server → server}/_libs/inline-style-parser.mjs +0 -0
  163. /package/dist/{web-server → server}/_libs/is-plain-obj.mjs +0 -0
  164. /package/dist/{web-server → server}/_libs/isbot.mjs +0 -0
  165. /package/dist/{web-server → server}/_libs/longest-streak.mjs +0 -0
  166. /package/dist/{web-server → server}/_libs/markdown-table.mjs +0 -0
  167. /package/dist/{web-server → server}/_libs/mdast-util-find-and-replace.mjs +0 -0
  168. /package/dist/{web-server → server}/_libs/mdast-util-gfm-footnote.mjs +0 -0
  169. /package/dist/{web-server → server}/_libs/mdast-util-gfm-strikethrough.mjs +0 -0
  170. /package/dist/{web-server → server}/_libs/mdast-util-gfm-table.mjs +0 -0
  171. /package/dist/{web-server → server}/_libs/mdast-util-gfm-task-list-item.mjs +0 -0
  172. /package/dist/{web-server → server}/_libs/mdast-util-gfm.mjs +0 -0
  173. /package/dist/{web-server → server}/_libs/mdast-util-phrasing.mjs +0 -0
  174. /package/dist/{web-server → server}/_libs/mdast-util-to-markdown.mjs +0 -0
  175. /package/dist/{web-server → server}/_libs/mdast-util-to-string.mjs +0 -0
  176. /package/dist/{web-server → server}/_libs/micromark-extension-gfm-strikethrough+[...].mjs +0 -0
  177. /package/dist/{web-server → server}/_libs/micromark-extension-gfm-tagfilter+[...].mjs +0 -0
  178. /package/dist/{web-server → server}/_libs/micromark-extension-gfm.mjs +0 -0
  179. /package/dist/{web-server → server}/_libs/micromark-factory-title.mjs +0 -0
  180. /package/dist/{web-server → server}/_libs/micromark-util-chunked.mjs +0 -0
  181. /package/dist/{web-server → server}/_libs/micromark-util-combine-extensions+[...].mjs +0 -0
  182. /package/dist/{web-server → server}/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +0 -0
  183. /package/dist/{web-server → server}/_libs/micromark-util-decode-string.mjs +0 -0
  184. /package/dist/{web-server → server}/_libs/micromark-util-encode.mjs +0 -0
  185. /package/dist/{web-server → server}/_libs/micromark-util-normalize-identifier+[...].mjs +0 -0
  186. /package/dist/{web-server → server}/_libs/micromark-util-resolve-all.mjs +0 -0
  187. /package/dist/{web-server → server}/_libs/micromark-util-subtokenize.mjs +0 -0
  188. /package/dist/{web-server → server}/_libs/ocache.mjs +0 -0
  189. /package/dist/{web-server → server}/_libs/ohash.mjs +0 -0
  190. /package/dist/{web-server → server}/_libs/react-markdown.mjs +0 -0
  191. /package/dist/{web-server → server}/_libs/remark-gfm.mjs +0 -0
  192. /package/dist/{web-server → server}/_libs/remark-parse.mjs +0 -0
  193. /package/dist/{web-server → server}/_libs/remark-rehype.mjs +0 -0
  194. /package/dist/{web-server → server}/_libs/reselect.mjs +0 -0
  195. /package/dist/{web-server → server}/_libs/rou3.mjs +0 -0
  196. /package/dist/{web-server/_libs/format.mjs → server/_libs/seroval-plugins.mjs} +0 -0
  197. /package/dist/{web-server/_libs/highlight.js.mjs → server/_libs/seroval.mjs} +0 -0
  198. /package/dist/{web-server → server}/_libs/srvx.mjs +0 -0
  199. /package/dist/{web-server → server}/_libs/style-to-js.mjs +0 -0
  200. /package/dist/{web-server → server}/_libs/style-to-object.mjs +0 -0
  201. /package/dist/{web-server → server}/_libs/tanstack__react-store.mjs +0 -0
  202. /package/dist/{web-server → server}/_libs/tanstack__store.mjs +0 -0
  203. /package/dist/{web-server → server}/_libs/trim-lines.mjs +0 -0
  204. /package/dist/{web-server → server}/_libs/trough.mjs +0 -0
  205. /package/dist/{web-server → server}/_libs/ufo.mjs +0 -0
  206. /package/dist/{web-server → server}/_libs/unctx.mjs +0 -0
  207. /package/dist/{web-server → server}/_libs/ungap__structured-clone.mjs +0 -0
  208. /package/dist/{web-server → server}/_libs/unified.mjs +0 -0
  209. /package/dist/{web-server → server}/_libs/unist-util-is.mjs +0 -0
  210. /package/dist/{web-server → server}/_libs/unist-util-stringify-position.mjs +0 -0
  211. /package/dist/{web-server → server}/_libs/unist-util-visit-parents.mjs +0 -0
  212. /package/dist/{web-server → server}/_libs/unist-util-visit.mjs +0 -0
  213. /package/dist/{web-server → server}/_libs/unstorage.mjs +0 -0
  214. /package/dist/{web-server → server}/_libs/vfile-message.mjs +0 -0
  215. /package/dist/{web-server → server}/_libs/vfile.mjs +0 -0
  216. /package/dist/{web-server → server}/_libs/zwitch.mjs +0 -0
@@ -1,7 +1,4 @@
1
1
  import { p as parseHref } from "./tanstack__history.mjs";
2
- import { s as splitSetCookieString } from "./cookie-es.mjs";
3
- import { a as ai, r as re, S as Sn, d as dn } from "./seroval.mjs";
4
- import { p } from "./seroval-plugins.mjs";
5
2
  import { ReadableStream as ReadableStream$1 } from "node:stream/web";
6
3
  import { Readable } from "node:stream";
7
4
  const isServer = true;
@@ -145,13 +142,13 @@ function decodePath(path) {
145
142
  path,
146
143
  handledProtocolRelativeURL: false
147
144
  };
148
- const re2 = /%25|%5C/gi;
145
+ const re = /%25|%5C/gi;
149
146
  let cursor = 0;
150
147
  let result = "";
151
148
  let match;
152
- while (null !== (match = re2.exec(path))) {
149
+ while (null !== (match = re.exec(path))) {
153
150
  result += decodeSegment(path.slice(cursor, match.index)) + match[0];
154
- cursor = re2.lastIndex;
151
+ cursor = re.lastIndex;
155
152
  }
156
153
  result = result + decodeSegment(cursor ? path.slice(cursor) : path);
157
154
  let handledProtocolRelativeURL = false;
@@ -448,6 +445,7 @@ function parseSegments(defaultCaseSensitive, data, route, start, node, depth, on
448
445
  node = indexNode;
449
446
  }
450
447
  node.parse = parseParams ?? null;
448
+ node.priority = route.options?.params?.priority ?? 0;
451
449
  if (isLeaf && !node.route) {
452
450
  node.route = route;
453
451
  node.fullPath = route.fullPath ?? route.from;
@@ -458,6 +456,7 @@ function parseSegments(defaultCaseSensitive, data, route, start, node, depth, on
458
456
  function sortDynamic(a, b) {
459
457
  if (a.parse && !b.parse) return -1;
460
458
  if (!a.parse && b.parse) return 1;
459
+ if (a.parse && b.parse && (a.priority || b.priority)) return b.priority - a.priority;
461
460
  if (a.prefix && b.prefix && a.prefix !== b.prefix) {
462
461
  if (a.prefix.startsWith(b.prefix)) return -1;
463
462
  if (b.prefix.startsWith(a.prefix)) return 1;
@@ -505,7 +504,8 @@ function createStaticNode(fullPath) {
505
504
  route: null,
506
505
  fullPath,
507
506
  parent: null,
508
- parse: null
507
+ parse: null,
508
+ priority: 0
509
509
  };
510
510
  }
511
511
  function createDynamicNode(kind, fullPath, caseSensitive, prefix, suffix) {
@@ -523,6 +523,7 @@ function createDynamicNode(kind, fullPath, caseSensitive, prefix, suffix) {
523
523
  fullPath,
524
524
  parent: null,
525
525
  parse: null,
526
+ priority: 0,
526
527
  caseSensitive,
527
528
  prefix,
528
529
  suffix
@@ -1232,9 +1233,6 @@ function redirect(opts) {
1232
1233
  function isRedirect(obj) {
1233
1234
  return obj instanceof Response && !!obj.options;
1234
1235
  }
1235
- function isResolvedRedirect(obj) {
1236
- return isRedirect(obj) && !!obj.options.href;
1237
- }
1238
1236
  function composeRewrites(rewrites) {
1239
1237
  return {
1240
1238
  input: ({ url }) => {
@@ -2137,7 +2135,7 @@ var RouterCore = class {
2137
2135
  needsLocationUpdate = true;
2138
2136
  }
2139
2137
  if (needsLocationUpdate && this.stores) this.stores.location.set(this.latestLocation);
2140
- if (typeof window !== "undefined" && "CSS" in window && typeof window.CSS?.supports === "function") this.isViewTransitionTypesSupported = window.CSS.supports("selector(:active-view-transition-type(a)");
2138
+ if (typeof window !== "undefined" && "CSS" in window && typeof window.CSS?.supports === "function") this.isViewTransitionTypesSupported = window.CSS.supports("selector(:active-view-transition-type(a))");
2141
2139
  };
2142
2140
  this.updateLatestLocation = () => {
2143
2141
  this.latestLocation = this.parseLocation(this.history.location, this.latestLocation);
@@ -3159,21 +3157,6 @@ function isInlinableStylesheet(manifest, asset) {
3159
3157
  const href = getStylesheetHref(asset);
3160
3158
  return !!href && manifest?.inlineCss?.styles[href] !== void 0;
3161
3159
  }
3162
- function createInlineCssStyleAsset(css) {
3163
- return {
3164
- tag: "style",
3165
- attrs: { suppressHydrationWarning: true },
3166
- inlineCss: true,
3167
- children: css
3168
- };
3169
- }
3170
- function createInlineCssPlaceholderAsset() {
3171
- return {
3172
- tag: "style",
3173
- attrs: { suppressHydrationWarning: true },
3174
- inlineCss: true
3175
- };
3176
- }
3177
3160
  var BaseRoute = class {
3178
3161
  get to() {
3179
3162
  return this._to;
@@ -3246,672 +3229,28 @@ var BaseRootRoute = class extends BaseRoute {
3246
3229
  super(options);
3247
3230
  }
3248
3231
  };
3249
- const GLOBAL_TSR = "$_TSR";
3250
- const TSR_SCRIPT_BARRIER_ID = "$tsr-stream-barrier";
3251
- function createSerializationAdapter(opts) {
3252
- return opts;
3253
- }
3254
- // @__NO_SIDE_EFFECTS__
3255
- function makeSsrSerovalPlugin(serializationAdapter, options) {
3256
- return /* @__PURE__ */ ai({
3257
- tag: "$TSR/t/" + serializationAdapter.key,
3258
- test: serializationAdapter.test,
3259
- parse: { stream(value, ctx, _data) {
3260
- return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
3261
- } },
3262
- serialize(node, ctx, _data) {
3263
- options.didRun = true;
3264
- return GLOBAL_TSR + '.t.get("' + serializationAdapter.key + '")(' + ctx.serialize(node.v) + ")";
3265
- },
3266
- deserialize: void 0
3267
- });
3268
- }
3269
- // @__NO_SIDE_EFFECTS__
3270
- function makeSerovalPlugin(serializationAdapter) {
3271
- return /* @__PURE__ */ ai({
3272
- tag: "$TSR/t/" + serializationAdapter.key,
3273
- test: serializationAdapter.test,
3274
- parse: {
3275
- sync(value, ctx, _data) {
3276
- return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
3277
- },
3278
- async async(value, ctx, _data) {
3279
- return { v: await ctx.parse(serializationAdapter.toSerializable(value)) };
3280
- },
3281
- stream(value, ctx, _data) {
3282
- return { v: ctx.parse(serializationAdapter.toSerializable(value)) };
3283
- }
3284
- },
3285
- serialize: void 0,
3286
- deserialize(node, ctx, _data) {
3287
- return serializationAdapter.fromSerializable(ctx.deserialize(node.v));
3288
- }
3289
- });
3290
- }
3291
- var RawStream = class {
3292
- constructor(stream, options) {
3293
- this.stream = stream;
3294
- this.hint = options?.hint ?? "binary";
3295
- }
3296
- };
3297
- const BufferCtor = globalThis.Buffer;
3298
- const hasNodeBuffer = !!BufferCtor && typeof BufferCtor.from === "function";
3299
- function uint8ArrayToBase64(bytes) {
3300
- if (bytes.length === 0) return "";
3301
- if (hasNodeBuffer) return BufferCtor.from(bytes).toString("base64");
3302
- const CHUNK_SIZE = 32768;
3303
- const chunks = [];
3304
- for (let i = 0; i < bytes.length; i += CHUNK_SIZE) {
3305
- const chunk = bytes.subarray(i, i + CHUNK_SIZE);
3306
- chunks.push(String.fromCharCode.apply(null, chunk));
3307
- }
3308
- return btoa(chunks.join(""));
3309
- }
3310
- function base64ToUint8Array(base64) {
3311
- if (base64.length === 0) return new Uint8Array(0);
3312
- if (hasNodeBuffer) {
3313
- const buf = BufferCtor.from(base64, "base64");
3314
- return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
3315
- }
3316
- const binary = atob(base64);
3317
- const bytes = new Uint8Array(binary.length);
3318
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
3319
- return bytes;
3320
- }
3321
- const RAW_STREAM_FACTORY_BINARY = /* @__PURE__ */ Object.create(null);
3322
- const RAW_STREAM_FACTORY_TEXT = /* @__PURE__ */ Object.create(null);
3323
- const RAW_STREAM_FACTORY_CONSTRUCTOR_BINARY = (stream) => new ReadableStream({ start(controller) {
3324
- stream.on({
3325
- next(base64) {
3326
- try {
3327
- controller.enqueue(base64ToUint8Array(base64));
3328
- } catch {
3329
- }
3330
- },
3331
- throw(error) {
3332
- controller.error(error);
3333
- },
3334
- return() {
3335
- try {
3336
- controller.close();
3337
- } catch {
3338
- }
3339
- }
3340
- });
3341
- } });
3342
- const textEncoderForFactory = new TextEncoder();
3343
- const RAW_STREAM_FACTORY_CONSTRUCTOR_TEXT = (stream) => {
3344
- return new ReadableStream({ start(controller) {
3345
- stream.on({
3346
- next(value) {
3347
- try {
3348
- if (typeof value === "string") controller.enqueue(textEncoderForFactory.encode(value));
3349
- else controller.enqueue(base64ToUint8Array(value.$b64));
3350
- } catch {
3351
- }
3352
- },
3353
- throw(error) {
3354
- controller.error(error);
3355
- },
3356
- return() {
3357
- try {
3358
- controller.close();
3359
- } catch {
3360
- }
3361
- }
3362
- });
3363
- } });
3364
- };
3365
- const FACTORY_BINARY = `(s=>new ReadableStream({start(c){s.on({next(b){try{const d=atob(b),a=new Uint8Array(d.length);for(let i=0;i<d.length;i++)a[i]=d.charCodeAt(i);c.enqueue(a)}catch(_){}},throw(e){c.error(e)},return(){try{c.close()}catch(_){}}})}}))`;
3366
- const FACTORY_TEXT = `(s=>{const e=new TextEncoder();return new ReadableStream({start(c){s.on({next(v){try{if(typeof v==='string'){c.enqueue(e.encode(v))}else{const d=atob(v.$b64),a=new Uint8Array(d.length);for(let i=0;i<d.length;i++)a[i]=d.charCodeAt(i);c.enqueue(a)}}catch(_){}},throw(x){c.error(x)},return(){try{c.close()}catch(_){}}})}})})`;
3367
- function toBinaryStream(readable) {
3368
- const stream = re();
3369
- const reader = readable.getReader();
3370
- (async () => {
3371
- try {
3372
- while (true) {
3373
- const { done, value } = await reader.read();
3374
- if (done) {
3375
- stream.return(void 0);
3376
- break;
3377
- }
3378
- stream.next(uint8ArrayToBase64(value));
3379
- }
3380
- } catch (error) {
3381
- stream.throw(error);
3382
- } finally {
3383
- reader.releaseLock();
3384
- }
3385
- })();
3386
- return stream;
3387
- }
3388
- function toTextStream(readable) {
3389
- const stream = re();
3390
- const reader = readable.getReader();
3391
- const decoder = new TextDecoder("utf-8", { fatal: true });
3392
- (async () => {
3393
- try {
3394
- while (true) {
3395
- const { done, value } = await reader.read();
3396
- if (done) {
3397
- try {
3398
- const remaining = decoder.decode();
3399
- if (remaining.length > 0) stream.next(remaining);
3400
- } catch {
3401
- }
3402
- stream.return(void 0);
3403
- break;
3404
- }
3405
- try {
3406
- const text = decoder.decode(value, { stream: true });
3407
- if (text.length > 0) stream.next(text);
3408
- } catch {
3409
- stream.next({ $b64: uint8ArrayToBase64(value) });
3410
- }
3411
- }
3412
- } catch (error) {
3413
- stream.throw(error);
3414
- } finally {
3415
- reader.releaseLock();
3416
- }
3417
- })();
3418
- return stream;
3232
+ var scroll_restoration_inline_default = 'function(t){let s;try{s=JSON.parse(sessionStorage.getItem(t.storageKey)||"{}")}catch(e){console.error(e);return}const c=t.key||window.history.state?.__TSR_key,r=c?s[c]:void 0;if(t.shouldScrollRestoration&&r&&typeof r=="object"&&Object.keys(r).length>0){for(const e in r){const o=r[e];if(!o||typeof o!="object")continue;const l=o.scrollX,i=o.scrollY;if(!(!Number.isFinite(l)||!Number.isFinite(i))){if(e==="window")window.scrollTo({top:i,left:l,behavior:t.behavior});else if(e){let n;try{n=document.querySelector(e)}catch{continue}n&&(n.scrollLeft=l,n.scrollTop=i)}}}return}const a=window.location.hash.split("#",2)[1];if(a){const e=window.history.state?.__hashScrollIntoViewOptions??!0;if(e){const o=document.getElementById(a);o&&o.scrollIntoView(e)}return}window.scrollTo({top:0,left:0,behavior:t.behavior})}';
3233
+ const defaultInlineScrollRestorationScript = `(${scroll_restoration_inline_default})(${escapeHtml(JSON.stringify({
3234
+ storageKey,
3235
+ shouldScrollRestoration: true
3236
+ }))})`;
3237
+ function getScrollRestorationScript(options) {
3238
+ if (options.storageKey === "tsr-scroll-restoration-v1_3" && options.shouldScrollRestoration === true && options.key === void 0 && options.behavior === void 0) return defaultInlineScrollRestorationScript;
3239
+ return `(${scroll_restoration_inline_default})(${escapeHtml(JSON.stringify(options))})`;
3419
3240
  }
3420
- const RawStreamSSRPlugin = /* @__PURE__ */ ai({
3421
- tag: "tss/RawStream",
3422
- extends: [/* @__PURE__ */ ai({
3423
- tag: "tss/RawStreamFactory",
3424
- test(value) {
3425
- return value === RAW_STREAM_FACTORY_BINARY;
3426
- },
3427
- parse: {
3428
- sync(_value, _ctx, _data) {
3429
- return {};
3430
- },
3431
- async async(_value, _ctx, _data) {
3432
- return {};
3433
- },
3434
- stream(_value, _ctx, _data) {
3435
- return {};
3436
- }
3437
- },
3438
- serialize(_node, _ctx, _data) {
3439
- return FACTORY_BINARY;
3440
- },
3441
- deserialize(_node, _ctx, _data) {
3442
- return RAW_STREAM_FACTORY_BINARY;
3443
- }
3444
- }), /* @__PURE__ */ ai({
3445
- tag: "tss/RawStreamFactoryText",
3446
- test(value) {
3447
- return value === RAW_STREAM_FACTORY_TEXT;
3448
- },
3449
- parse: {
3450
- sync(_value, _ctx, _data) {
3451
- return {};
3452
- },
3453
- async async(_value, _ctx, _data) {
3454
- return {};
3455
- },
3456
- stream(_value, _ctx, _data) {
3457
- return {};
3458
- }
3459
- },
3460
- serialize(_node, _ctx, _data) {
3461
- return FACTORY_TEXT;
3462
- },
3463
- deserialize(_node, _ctx, _data) {
3464
- return RAW_STREAM_FACTORY_TEXT;
3465
- }
3466
- })],
3467
- test(value) {
3468
- return value instanceof RawStream;
3469
- },
3470
- parse: {
3471
- sync(value, ctx, _data) {
3472
- const factory = value.hint === "text" ? RAW_STREAM_FACTORY_TEXT : RAW_STREAM_FACTORY_BINARY;
3473
- return {
3474
- hint: ctx.parse(value.hint),
3475
- factory: ctx.parse(factory),
3476
- stream: ctx.parse(re())
3477
- };
3478
- },
3479
- async async(value, ctx, _data) {
3480
- const factory = value.hint === "text" ? RAW_STREAM_FACTORY_TEXT : RAW_STREAM_FACTORY_BINARY;
3481
- const encodedStream = value.hint === "text" ? toTextStream(value.stream) : toBinaryStream(value.stream);
3482
- return {
3483
- hint: await ctx.parse(value.hint),
3484
- factory: await ctx.parse(factory),
3485
- stream: await ctx.parse(encodedStream)
3486
- };
3487
- },
3488
- stream(value, ctx, _data) {
3489
- const factory = value.hint === "text" ? RAW_STREAM_FACTORY_TEXT : RAW_STREAM_FACTORY_BINARY;
3490
- const encodedStream = value.hint === "text" ? toTextStream(value.stream) : toBinaryStream(value.stream);
3491
- return {
3492
- hint: ctx.parse(value.hint),
3493
- factory: ctx.parse(factory),
3494
- stream: ctx.parse(encodedStream)
3495
- };
3496
- }
3497
- },
3498
- serialize(node, ctx, _data) {
3499
- return "(" + ctx.serialize(node.factory) + ")(" + ctx.serialize(node.stream) + ")";
3500
- },
3501
- deserialize(node, ctx, _data) {
3502
- const stream = ctx.deserialize(node.stream);
3503
- return ctx.deserialize(node.hint) === "text" ? RAW_STREAM_FACTORY_CONSTRUCTOR_TEXT(stream) : RAW_STREAM_FACTORY_CONSTRUCTOR_BINARY(stream);
3504
- }
3505
- });
3506
- // @__NO_SIDE_EFFECTS__
3507
- function createRawStreamRPCPlugin(onRawStream) {
3508
- let nextStreamId = 1;
3509
- return /* @__PURE__ */ ai({
3510
- tag: "tss/RawStream",
3511
- test(value) {
3512
- return value instanceof RawStream;
3513
- },
3514
- parse: {
3515
- async async(value, ctx, _data) {
3516
- const streamId = nextStreamId++;
3517
- onRawStream(streamId, value.stream);
3518
- return { streamId: await ctx.parse(streamId) };
3519
- },
3520
- stream(value, ctx, _data) {
3521
- const streamId = nextStreamId++;
3522
- onRawStream(streamId, value.stream);
3523
- return { streamId: ctx.parse(streamId) };
3524
- }
3525
- },
3526
- serialize() {
3527
- throw new Error("RawStreamRPCPlugin.serialize should not be called. RPC uses JSON serialization, not JS code generation.");
3528
- },
3529
- deserialize() {
3530
- throw new Error("RawStreamRPCPlugin.deserialize should not be called. Use createRawStreamDeserializePlugin on client.");
3531
- }
3241
+ function getScrollRestorationScriptForRouter(router) {
3242
+ if (typeof router.options.scrollRestoration === "function" && !router.options.scrollRestoration({ location: router.latestLocation })) return null;
3243
+ const getKey = router.options.getScrollRestorationKey;
3244
+ if (!getKey) return defaultInlineScrollRestorationScript;
3245
+ const location = router.latestLocation;
3246
+ const userKey = getKey(location);
3247
+ if (userKey === defaultGetScrollRestorationKey(location)) return defaultInlineScrollRestorationScript;
3248
+ return getScrollRestorationScript({
3249
+ storageKey,
3250
+ shouldScrollRestoration: true,
3251
+ key: userKey
3532
3252
  });
3533
3253
  }
3534
- const ShallowErrorPlugin = /* @__PURE__ */ ai({
3535
- tag: "$TSR/Error",
3536
- test(value) {
3537
- return value instanceof Error;
3538
- },
3539
- parse: {
3540
- sync(value, ctx) {
3541
- return { message: ctx.parse(value.message) };
3542
- },
3543
- async async(value, ctx) {
3544
- return { message: await ctx.parse(value.message) };
3545
- },
3546
- stream(value, ctx) {
3547
- return { message: ctx.parse(value.message) };
3548
- }
3549
- },
3550
- serialize(node, ctx) {
3551
- return "new Error(" + ctx.serialize(node.message) + ")";
3552
- },
3553
- deserialize(node, ctx) {
3554
- return new Error(ctx.deserialize(node.message));
3555
- }
3556
- });
3557
- const defaultSerovalPlugins = [
3558
- ShallowErrorPlugin,
3559
- RawStreamSSRPlugin,
3560
- p
3561
- ];
3562
- function toHeadersInstance(init) {
3563
- if (init instanceof Headers) return init;
3564
- else if (Array.isArray(init)) return new Headers(init);
3565
- else if (typeof init === "object") return new Headers(init);
3566
- else return null;
3567
- }
3568
- function mergeHeaders(...headers) {
3569
- return headers.reduce((acc, header) => {
3570
- const headersInstance = toHeadersInstance(header);
3571
- if (!headersInstance) return acc;
3572
- for (const [key, value] of headersInstance.entries()) if (key === "set-cookie") splitSetCookieString(value).forEach((cookie) => acc.append("set-cookie", cookie));
3573
- else acc.set(key, value);
3574
- return acc;
3575
- }, new Headers());
3576
- }
3577
- function dehydrateSsrMatchId(id) {
3578
- return id.replaceAll("/", "\0");
3579
- }
3580
- var tsrScript_default = "self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]}";
3581
- const SCOPE_ID = "tsr";
3582
- const TSR_PREFIX = GLOBAL_TSR + ".router=";
3583
- const P_PREFIX = GLOBAL_TSR + ".p(()=>";
3584
- const P_SUFFIX = ")";
3585
- function dehydrateMatch(match) {
3586
- const dehydratedMatch = {
3587
- i: dehydrateSsrMatchId(match.id),
3588
- u: match.updatedAt,
3589
- s: match.status
3590
- };
3591
- for (const [key, shorthand] of [
3592
- ["__beforeLoadContext", "b"],
3593
- ["loaderData", "l"],
3594
- ["error", "e"],
3595
- ["ssr", "ssr"]
3596
- ]) if (match[key] !== void 0) dehydratedMatch[shorthand] = match[key];
3597
- if (match.globalNotFound) dehydratedMatch.g = true;
3598
- return dehydratedMatch;
3599
- }
3600
- const INITIAL_SCRIPTS = [dn(SCOPE_ID), tsrScript_default];
3601
- var ScriptBuffer = class {
3602
- constructor(router) {
3603
- this._scriptBarrierLifted = false;
3604
- this._cleanedUp = false;
3605
- this._pendingMicrotask = false;
3606
- this.router = router;
3607
- this._queue = INITIAL_SCRIPTS.slice();
3608
- }
3609
- enqueue(script) {
3610
- if (this._cleanedUp) return;
3611
- this._queue.push(script);
3612
- if (this._scriptBarrierLifted && !this._pendingMicrotask) {
3613
- this._pendingMicrotask = true;
3614
- queueMicrotask(() => {
3615
- this._pendingMicrotask = false;
3616
- this.injectBufferedScripts();
3617
- });
3618
- }
3619
- }
3620
- liftBarrier() {
3621
- if (this._scriptBarrierLifted || this._cleanedUp) return;
3622
- this._scriptBarrierLifted = true;
3623
- if (this._queue.length > 0 && !this._pendingMicrotask) {
3624
- this._pendingMicrotask = true;
3625
- queueMicrotask(() => {
3626
- this._pendingMicrotask = false;
3627
- this.injectBufferedScripts();
3628
- });
3629
- }
3630
- }
3631
- /**
3632
- * Flushes any pending scripts synchronously.
3633
- * Call this before emitting onSerializationFinished to ensure all scripts are injected.
3634
- *
3635
- * IMPORTANT: Only injects if the barrier has been lifted. Before the barrier is lifted,
3636
- * scripts should remain in the queue so takeBufferedScripts() can retrieve them
3637
- */
3638
- flush() {
3639
- if (!this._scriptBarrierLifted) return;
3640
- if (this._cleanedUp) return;
3641
- this._pendingMicrotask = false;
3642
- const scriptsToInject = this.takeAll();
3643
- if (scriptsToInject && this.router?.serverSsr) this.router.serverSsr.injectScript(scriptsToInject);
3644
- }
3645
- takeAll() {
3646
- const bufferedScripts = this._queue;
3647
- this._queue = [];
3648
- if (bufferedScripts.length === 0) return;
3649
- if (bufferedScripts.length === 1) return bufferedScripts[0] + ";document.currentScript.remove()";
3650
- return bufferedScripts.join(";") + ";document.currentScript.remove()";
3651
- }
3652
- injectBufferedScripts() {
3653
- if (this._cleanedUp) return;
3654
- if (this._queue.length === 0) return;
3655
- const scriptsToInject = this.takeAll();
3656
- if (scriptsToInject && this.router?.serverSsr) this.router.serverSsr.injectScript(scriptsToInject);
3657
- }
3658
- cleanup() {
3659
- this._cleanedUp = true;
3660
- this._queue = [];
3661
- this.router = void 0;
3662
- }
3663
- };
3664
- const MANIFEST_CACHE_SIZE = 100;
3665
- const manifestCaches = /* @__PURE__ */ new WeakMap();
3666
- const inlineCssCaches = /* @__PURE__ */ new WeakMap();
3667
- function getManifestCache(manifest) {
3668
- const cache = manifestCaches.get(manifest);
3669
- if (cache) return cache;
3670
- const newCache = createLRUCache(MANIFEST_CACHE_SIZE);
3671
- manifestCaches.set(manifest, newCache);
3672
- return newCache;
3673
- }
3674
- function getInlineCssCache(manifest) {
3675
- const cache = inlineCssCaches.get(manifest);
3676
- if (cache) return cache;
3677
- const newCache = createLRUCache(MANIFEST_CACHE_SIZE);
3678
- inlineCssCaches.set(manifest, newCache);
3679
- return newCache;
3680
- }
3681
- function getInlineCssHrefsForMatches(manifest, matches) {
3682
- const styles = manifest?.inlineCss?.styles;
3683
- if (!styles) return [];
3684
- const seen = /* @__PURE__ */ new Set();
3685
- const hrefs = [];
3686
- for (const match of matches) {
3687
- const assets = manifest?.routes[match.routeId]?.assets ?? [];
3688
- for (const asset of assets) {
3689
- const href = getStylesheetHref(asset);
3690
- if (!href || seen.has(href) || styles[href] === void 0) continue;
3691
- seen.add(href);
3692
- hrefs.push(href);
3693
- }
3694
- }
3695
- return hrefs;
3696
- }
3697
- function getInlineCssForHrefs(manifest, hrefs) {
3698
- const styles = manifest.inlineCss?.styles;
3699
- if (!styles || hrefs.length === 0) return void 0;
3700
- const cacheKey = hrefs.join("\0");
3701
- {
3702
- const cached = getInlineCssCache(manifest).get(cacheKey);
3703
- if (cached !== void 0) return cached;
3704
- }
3705
- const css = hrefs.map((href) => styles[href]).join("");
3706
- getInlineCssCache(manifest).set(cacheKey, css);
3707
- return css;
3708
- }
3709
- function getInlineCssAssetForMatches(manifest, matches) {
3710
- if (!manifest?.inlineCss) return void 0;
3711
- const css = getInlineCssForHrefs(manifest, getInlineCssHrefsForMatches(manifest, matches));
3712
- return css === void 0 ? void 0 : createInlineCssStyleAsset(css);
3713
- }
3714
- function stripInlinedStylesheetAssets(manifest, routes, matches) {
3715
- if (!manifest.inlineCss) return routes;
3716
- const nextRoutes = {};
3717
- for (const [routeId, route] of Object.entries(routes)) {
3718
- const assets = route.assets?.filter((asset) => !isInlinableStylesheet(manifest, asset));
3719
- const nextRoute = { ...route };
3720
- if (assets) if (assets.length > 0) nextRoute.assets = assets;
3721
- else delete nextRoute.assets;
3722
- nextRoutes[routeId] = nextRoute;
3723
- }
3724
- if (getInlineCssAssetForMatches(manifest, matches)) {
3725
- const rootRoute = nextRoutes["__root__"] ?? {};
3726
- nextRoutes[rootRouteId] = {
3727
- ...rootRoute,
3728
- assets: [createInlineCssPlaceholderAsset(), ...rootRoute.assets ?? []]
3729
- };
3730
- }
3731
- return nextRoutes;
3732
- }
3733
- function attachRouterServerSsrUtils({ router, manifest, getRequestAssets, includeUnmatchedRouteAssets = true }) {
3734
- router.ssr = { get manifest() {
3735
- const requestAssets = getRequestAssets?.();
3736
- const inlineCssAsset = getInlineCssAssetForMatches(manifest, router.stores.matches.get());
3737
- if (!requestAssets?.length && !inlineCssAsset) return manifest;
3738
- return {
3739
- ...manifest,
3740
- routes: {
3741
- ...manifest?.routes,
3742
- [rootRouteId]: {
3743
- ...manifest?.routes?.[rootRouteId],
3744
- assets: [
3745
- ...requestAssets ?? [],
3746
- ...inlineCssAsset ? [inlineCssAsset] : [],
3747
- ...manifest?.routes?.["__root__"]?.assets ?? []
3748
- ]
3749
- }
3750
- }
3751
- };
3752
- } };
3753
- let _dehydrated = false;
3754
- let _serializationFinished = false;
3755
- const renderFinishedListeners = [];
3756
- const serializationFinishedListeners = [];
3757
- const scriptBuffer = new ScriptBuffer(router);
3758
- let injectedHtmlBuffer = "";
3759
- router.serverSsr = {
3760
- injectHtml: (html) => {
3761
- if (!html) return;
3762
- injectedHtmlBuffer += html;
3763
- router.emit({ type: "onInjectedHtml" });
3764
- },
3765
- injectScript: (script) => {
3766
- if (!script) return;
3767
- const html = `<script${router.options.ssr?.nonce ? ` nonce='${router.options.ssr.nonce}'` : ""}>${script}<\/script>`;
3768
- router.serverSsr.injectHtml(html);
3769
- },
3770
- dehydrate: async (opts) => {
3771
- if (_dehydrated) {
3772
- invariant();
3773
- }
3774
- let matchesToDehydrate = router.stores.matches.get();
3775
- if (router.isShell()) matchesToDehydrate = matchesToDehydrate.slice(0, 1);
3776
- const matches = matchesToDehydrate.map(dehydrateMatch);
3777
- let manifestToDehydrate = void 0;
3778
- if (manifest) {
3779
- const currentRouteIdsList = matchesToDehydrate.map((m) => m.routeId);
3780
- const manifestCacheKey = `${currentRouteIdsList.join("\0")}\0includeUnmatchedRouteAssets=${includeUnmatchedRouteAssets}`;
3781
- let filteredRoutes;
3782
- filteredRoutes = getManifestCache(manifest).get(manifestCacheKey);
3783
- if (!filteredRoutes) {
3784
- const currentRouteIds = new Set(currentRouteIdsList);
3785
- const nextFilteredRoutes = {};
3786
- for (const routeId in manifest.routes) {
3787
- const routeManifest = manifest.routes[routeId];
3788
- if (currentRouteIds.has(routeId)) nextFilteredRoutes[routeId] = routeManifest;
3789
- else if (includeUnmatchedRouteAssets && routeManifest.assets && routeManifest.assets.length > 0) nextFilteredRoutes[routeId] = { assets: routeManifest.assets };
3790
- }
3791
- filteredRoutes = stripInlinedStylesheetAssets(manifest, nextFilteredRoutes, matchesToDehydrate);
3792
- getManifestCache(manifest).set(manifestCacheKey, filteredRoutes);
3793
- }
3794
- manifestToDehydrate = { routes: { ...filteredRoutes } };
3795
- if (opts?.requestAssets?.length) {
3796
- const existingRoot = manifestToDehydrate.routes[rootRouteId];
3797
- manifestToDehydrate.routes[rootRouteId] = {
3798
- ...existingRoot,
3799
- assets: [...opts.requestAssets, ...existingRoot?.assets ?? []]
3800
- };
3801
- }
3802
- }
3803
- const dehydratedRouter = {
3804
- manifest: manifestToDehydrate,
3805
- matches
3806
- };
3807
- const lastMatchId = matchesToDehydrate[matchesToDehydrate.length - 1]?.id;
3808
- if (lastMatchId) dehydratedRouter.lastMatchId = dehydrateSsrMatchId(lastMatchId);
3809
- const dehydratedData = await router.options.dehydrate?.();
3810
- if (dehydratedData) dehydratedRouter.dehydratedData = dehydratedData;
3811
- _dehydrated = true;
3812
- const trackPlugins = { didRun: false };
3813
- const serializationAdapters = router.options.serializationAdapters;
3814
- const plugins = serializationAdapters ? serializationAdapters.map((t) => /* @__PURE__ */ makeSsrSerovalPlugin(t, trackPlugins)).concat(defaultSerovalPlugins) : defaultSerovalPlugins;
3815
- const signalSerializationComplete = () => {
3816
- _serializationFinished = true;
3817
- try {
3818
- serializationFinishedListeners.forEach((l) => l());
3819
- router.emit({ type: "onSerializationFinished" });
3820
- } catch (err) {
3821
- console.error("Serialization listener error:", err);
3822
- } finally {
3823
- serializationFinishedListeners.length = 0;
3824
- renderFinishedListeners.length = 0;
3825
- }
3826
- };
3827
- Sn(dehydratedRouter, {
3828
- refs: /* @__PURE__ */ new Map(),
3829
- plugins,
3830
- onSerialize: (data, initial) => {
3831
- let serialized = initial ? TSR_PREFIX + data : data;
3832
- if (trackPlugins.didRun) serialized = P_PREFIX + serialized + P_SUFFIX;
3833
- scriptBuffer.enqueue(serialized);
3834
- },
3835
- onError: (err) => {
3836
- console.error("Serialization error:", err);
3837
- if (err && err.stack) console.error(err.stack);
3838
- signalSerializationComplete();
3839
- },
3840
- scopeId: SCOPE_ID,
3841
- onDone: () => {
3842
- scriptBuffer.enqueue(GLOBAL_TSR + ".e()");
3843
- scriptBuffer.flush();
3844
- signalSerializationComplete();
3845
- }
3846
- });
3847
- },
3848
- isDehydrated() {
3849
- return _dehydrated;
3850
- },
3851
- isSerializationFinished() {
3852
- return _serializationFinished;
3853
- },
3854
- onRenderFinished: (listener) => renderFinishedListeners.push(listener),
3855
- onSerializationFinished: (listener) => serializationFinishedListeners.push(listener),
3856
- setRenderFinished: () => {
3857
- try {
3858
- renderFinishedListeners.forEach((l) => l());
3859
- } catch (err) {
3860
- console.error("Error in render finished listener:", err);
3861
- } finally {
3862
- renderFinishedListeners.length = 0;
3863
- }
3864
- scriptBuffer.liftBarrier();
3865
- },
3866
- takeBufferedScripts() {
3867
- const scripts = scriptBuffer.takeAll();
3868
- return {
3869
- tag: "script",
3870
- attrs: {
3871
- nonce: router.options.ssr?.nonce,
3872
- className: "$tsr",
3873
- id: TSR_SCRIPT_BARRIER_ID
3874
- },
3875
- children: scripts
3876
- };
3877
- },
3878
- liftScriptBarrier() {
3879
- scriptBuffer.liftBarrier();
3880
- },
3881
- takeBufferedHtml() {
3882
- if (!injectedHtmlBuffer) return;
3883
- const buffered = injectedHtmlBuffer;
3884
- injectedHtmlBuffer = "";
3885
- return buffered;
3886
- },
3887
- cleanup() {
3888
- if (!router.serverSsr) return;
3889
- renderFinishedListeners.length = 0;
3890
- serializationFinishedListeners.length = 0;
3891
- injectedHtmlBuffer = "";
3892
- scriptBuffer.cleanup();
3893
- router.serverSsr = void 0;
3894
- }
3895
- };
3896
- }
3897
- function getOrigin(request) {
3898
- try {
3899
- return new URL(request.url).origin;
3900
- } catch {
3901
- }
3902
- return "http://localhost";
3903
- }
3904
- function getNormalizedURL(url, base) {
3905
- if (typeof url === "string") url = url.replace("\\", "%5C");
3906
- const rawUrl = new URL(url, base);
3907
- const { path: decodedPathname, handledProtocolRelativeURL } = decodePath(rawUrl.pathname);
3908
- const searchParams = new URLSearchParams(rawUrl.search);
3909
- const normalizedHref = decodedPathname + (searchParams.size > 0 ? "?" : "") + searchParams.toString() + rawUrl.hash;
3910
- return {
3911
- url: new URL(normalizedHref, rawUrl.origin),
3912
- handledProtocolRelativeURL
3913
- };
3914
- }
3915
3254
  function defineHandlerCallback(handler) {
3916
3255
  return handler;
3917
3256
  }
@@ -4226,63 +3565,30 @@ function transformStreamWithRouter(router, appStream, opts) {
4226
3565
  });
4227
3566
  return stream;
4228
3567
  }
4229
- var scroll_restoration_inline_default = 'function(t){let s;try{s=JSON.parse(sessionStorage.getItem(t.storageKey)||"{}")}catch(e){console.error(e);return}const c=t.key||window.history.state?.__TSR_key,r=c?s[c]:void 0;if(t.shouldScrollRestoration&&r&&typeof r=="object"&&Object.keys(r).length>0){for(const e in r){const o=r[e];if(!o||typeof o!="object")continue;const l=o.scrollX,i=o.scrollY;if(!(!Number.isFinite(l)||!Number.isFinite(i))){if(e==="window")window.scrollTo({top:i,left:l,behavior:t.behavior});else if(e){let n;try{n=document.querySelector(e)}catch{continue}n&&(n.scrollLeft=l,n.scrollTop=i)}}}return}const a=window.location.hash.split("#",2)[1];if(a){const e=window.history.state?.__hashScrollIntoViewOptions??!0;if(e){const o=document.getElementById(a);o&&o.scrollIntoView(e)}return}window.scrollTo({top:0,left:0,behavior:t.behavior})}';
4230
- const defaultInlineScrollRestorationScript = `(${scroll_restoration_inline_default})(${escapeHtml(JSON.stringify({
4231
- storageKey,
4232
- shouldScrollRestoration: true
4233
- }))})`;
4234
- function getScrollRestorationScript(options) {
4235
- if (options.storageKey === "tsr-scroll-restoration-v1_3" && options.shouldScrollRestoration === true && options.key === void 0 && options.behavior === void 0) return defaultInlineScrollRestorationScript;
4236
- return `(${scroll_restoration_inline_default})(${escapeHtml(JSON.stringify(options))})`;
4237
- }
4238
- function getScrollRestorationScriptForRouter(router) {
4239
- if (typeof router.options.scrollRestoration === "function" && !router.options.scrollRestoration({ location: router.latestLocation })) return null;
4240
- const getKey = router.options.getScrollRestorationKey;
4241
- if (!getKey) return defaultInlineScrollRestorationScript;
4242
- const location = router.latestLocation;
4243
- const userKey = getKey(location);
4244
- if (userKey === defaultGetScrollRestorationKey(location)) return defaultInlineScrollRestorationScript;
4245
- return getScrollRestorationScript({
4246
- storageKey,
4247
- shouldScrollRestoration: true,
4248
- key: userKey
4249
- });
4250
- }
4251
3568
  export {
4252
- createSerializationAdapter as A,
4253
3569
  BaseRootRoute as B,
4254
- createRawStreamRPCPlugin as C,
4255
- isResolvedRedirect as D,
4256
- getStylesheetHref as E,
4257
- mergeHeaders as F,
4258
- executeRewriteInput as G,
4259
- defaultSerovalPlugins as H,
4260
- makeSerovalPlugin as I,
4261
3570
  RouterCore as R,
4262
- isDangerousProtocol as a,
4263
- BaseRoute as b,
4264
- isModuleNotFoundError as c,
3571
+ BaseRoute as a,
3572
+ createNonReactiveReadonlyStore as b,
3573
+ createNonReactiveMutableStore as c,
4265
3574
  deepEqual as d,
4266
- exactPathTest as e,
4267
- functionalUpdate as f,
4268
- isNotFound as g,
4269
- hasKeys as h,
4270
- invariant as i,
3575
+ defineHandlerCallback as e,
3576
+ escapeHtml as f,
3577
+ exactPathTest as g,
3578
+ functionalUpdate as h,
3579
+ getAssetCrossOrigin as i,
4271
3580
  getScrollRestorationScriptForRouter as j,
4272
- rootRouteId as k,
4273
- isServer as l,
4274
- isRedirect as m,
4275
- createNonReactiveReadonlyStore as n,
4276
- createNonReactiveMutableStore as o,
4277
- escapeHtml as p,
4278
- isInlinableStylesheet as q,
4279
- removeTrailingSlash as r,
4280
- getAssetCrossOrigin as s,
3581
+ hasKeys as k,
3582
+ invariant as l,
3583
+ isDangerousProtocol as m,
3584
+ isInlinableStylesheet as n,
3585
+ isModuleNotFoundError as o,
3586
+ isNotFound as p,
3587
+ isRedirect as q,
3588
+ isServer as r,
3589
+ removeTrailingSlash as s,
4281
3590
  resolveManifestAssetLink as t,
4282
- transformReadableStreamWithRouter as u,
3591
+ rootRouteId as u,
4283
3592
  transformPipeableStreamWithRouter as v,
4284
- getNormalizedURL as w,
4285
- getOrigin as x,
4286
- attachRouterServerSsrUtils as y,
4287
- defineHandlerCallback as z
3593
+ transformReadableStreamWithRouter as w
4288
3594
  };