hermium 0.1.9 → 0.2.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 (209) hide show
  1. package/README.md +56 -0
  2. package/bin/hermium.mjs +185 -164
  3. package/dist/api.mjs +3513 -0
  4. package/dist/public/assets/css/index-Dfs9RUU9.css +1 -0
  5. package/dist/public/assets/css/styles-B8p6jk5Z.css +1 -0
  6. package/dist/public/assets/js/ChatInputBlock-Bw7AL70H.js +1 -0
  7. package/dist/public/assets/js/MarkdownMessage-8d7Y6VL-.js +1 -0
  8. package/dist/public/assets/js/base-ui-BvQbAt_1.js +1 -0
  9. package/dist/public/assets/js/chat._sessionId-BG6lVraH.js +1 -0
  10. package/dist/public/assets/js/chat.index-D2zdMPTT.js +1 -0
  11. package/dist/public/assets/js/index-C0AK45FU.js +60 -0
  12. package/dist/public/assets/js/index-Cx5En4FK.js +1 -0
  13. package/dist/public/assets/js/memory-CeSRdTkW.js +3 -0
  14. package/dist/public/assets/js/router-8uDKazL-.js +1 -0
  15. package/dist/public/assets/js/settings-Bc3Y5zXO.js +1 -0
  16. package/dist/public/assets/js/skills-DZv7sA_5.js +1 -0
  17. package/dist/public/assets/js/theme-CPkdkpaj.js +1 -0
  18. package/dist/public/assets/js/usage-DXQsT9_b.js +1 -0
  19. package/dist/public/assets/woff2/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  20. package/dist/public/assets/woff2/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  21. package/dist/public/assets/woff2/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  22. package/dist/public/assets/woff2/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  23. package/dist/public/assets/woff2/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  24. package/dist/public/favicon.ico +0 -0
  25. package/dist/public/logo.png +0 -0
  26. package/package.json +1 -1
  27. package/dist/public/assets/IconAlertCircle-BHkmI3j7.js +0 -1
  28. package/dist/public/assets/IconAlertTriangle-wCJudlVg.js +0 -1
  29. package/dist/public/assets/IconCheck-CFuEh_p7.js +0 -1
  30. package/dist/public/assets/IconLoader2-BIx3OuF9.js +0 -1
  31. package/dist/public/assets/IconRefresh-Dgm93w3T.js +0 -1
  32. package/dist/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
  33. package/dist/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
  34. package/dist/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
  35. package/dist/public/assets/index-Bbz3abmO.js +0 -14
  36. package/dist/public/assets/index-CWUaRwcE.js +0 -1
  37. package/dist/public/assets/index-CinLq3cd.js +0 -1
  38. package/dist/public/assets/index-CrQs9n6q.js +0 -29
  39. package/dist/public/assets/index-CtacpN3I.js +0 -1
  40. package/dist/public/assets/index-DY7aE-9s.js +0 -2
  41. package/dist/public/assets/index-DkYGodJj.js +0 -94
  42. package/dist/public/assets/index-DvDLadUx.js +0 -1
  43. package/dist/public/assets/index-U6RcWedt.js +0 -1
  44. package/dist/public/assets/index-_6iFZ0fh.js +0 -1
  45. package/dist/public/assets/index-enFS26SU.js +0 -1
  46. package/dist/public/assets/input-eNcwlDHp.js +0 -1
  47. package/dist/public/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  48. package/dist/public/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  49. package/dist/public/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  50. package/dist/public/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  51. package/dist/public/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  52. package/dist/public/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  53. package/dist/public/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  54. package/dist/public/assets/queries-iHRgZzw2.js +0 -1
  55. package/dist/public/assets/styles-KcflDlA_.css +0 -1
  56. package/dist/public/assets/switch-B1DcZLwL.js +0 -1
  57. package/dist/public/assets/syntax-highlighter-DWPF-A_h.js +0 -6
  58. package/dist/public/assets/textarea-Di_syYTS.js +0 -1
  59. package/dist/public/favicon.png +0 -0
  60. package/dist/public/nous-logo.png +0 -0
  61. package/dist/server/index.mjs +0 -244
  62. package/dist/web-server/__23tanstack-start-plugin-adapters-Cwee5PKy.mjs +0 -6
  63. package/dist/web-server/_chunks/ssr-renderer.mjs +0 -22
  64. package/dist/web-server/_libs/babel__runtime.mjs +0 -237
  65. package/dist/web-server/_libs/bail.mjs +0 -8
  66. package/dist/web-server/_libs/base-ui__react.mjs +0 -9554
  67. package/dist/web-server/_libs/base-ui__utils.mjs +0 -1101
  68. package/dist/web-server/_libs/ccount.mjs +0 -16
  69. package/dist/web-server/_libs/character-entities-legacy.mjs +0 -111
  70. package/dist/web-server/_libs/character-entities.mjs +0 -2130
  71. package/dist/web-server/_libs/character-reference-invalid.mjs +0 -33
  72. package/dist/web-server/_libs/class-variance-authority.mjs +0 -44
  73. package/dist/web-server/_libs/clsx.mjs +0 -16
  74. package/dist/web-server/_libs/comma-separated-tokens.mjs +0 -31
  75. package/dist/web-server/_libs/cookie-es.mjs +0 -44
  76. package/dist/web-server/_libs/croner.mjs +0 -1
  77. package/dist/web-server/_libs/crossws.mjs +0 -1
  78. package/dist/web-server/_libs/decode-named-character-reference+[...].mjs +0 -8
  79. package/dist/web-server/_libs/devlop.mjs +0 -8
  80. package/dist/web-server/_libs/escape-string-regexp.mjs +0 -9
  81. package/dist/web-server/_libs/estree-util-is-identifier-name.mjs +0 -11
  82. package/dist/web-server/_libs/extend.mjs +0 -97
  83. package/dist/web-server/_libs/fault.mjs +0 -1
  84. package/dist/web-server/_libs/floating-ui__core.mjs +0 -663
  85. package/dist/web-server/_libs/floating-ui__dom.mjs +0 -624
  86. package/dist/web-server/_libs/floating-ui__react-dom.mjs +0 -279
  87. package/dist/web-server/_libs/floating-ui__utils.mjs +0 -322
  88. package/dist/web-server/_libs/format.mjs +0 -1
  89. package/dist/web-server/_libs/h3.mjs +0 -408
  90. package/dist/web-server/_libs/hast-util-parse-selector.mjs +0 -39
  91. package/dist/web-server/_libs/hast-util-to-jsx-runtime.mjs +0 -388
  92. package/dist/web-server/_libs/hast-util-whitespace.mjs +0 -10
  93. package/dist/web-server/_libs/hastscript.mjs +0 -200
  94. package/dist/web-server/_libs/highlight.js.mjs +0 -1
  95. package/dist/web-server/_libs/hookable.mjs +0 -1
  96. package/dist/web-server/_libs/html-url-attributes.mjs +0 -26
  97. package/dist/web-server/_libs/inline-style-parser.mjs +0 -142
  98. package/dist/web-server/_libs/is-alphabetical.mjs +0 -7
  99. package/dist/web-server/_libs/is-alphanumerical.mjs +0 -8
  100. package/dist/web-server/_libs/is-decimal.mjs +0 -7
  101. package/dist/web-server/_libs/is-hexadecimal.mjs +0 -7
  102. package/dist/web-server/_libs/is-plain-obj.mjs +0 -10
  103. package/dist/web-server/_libs/isbot.mjs +0 -21
  104. package/dist/web-server/_libs/longest-streak.mjs +0 -25
  105. package/dist/web-server/_libs/lowlight.mjs +0 -1
  106. package/dist/web-server/_libs/markdown-table.mjs +0 -142
  107. package/dist/web-server/_libs/mdast-util-find-and-replace.mjs +0 -109
  108. package/dist/web-server/_libs/mdast-util-from-markdown.mjs +0 -717
  109. package/dist/web-server/_libs/mdast-util-gfm-autolink-literal+[...].mjs +0 -156
  110. package/dist/web-server/_libs/mdast-util-gfm-footnote.mjs +0 -117
  111. package/dist/web-server/_libs/mdast-util-gfm-strikethrough.mjs +0 -54
  112. package/dist/web-server/_libs/mdast-util-gfm-table.mjs +0 -157
  113. package/dist/web-server/_libs/mdast-util-gfm-task-list-item.mjs +0 -77
  114. package/dist/web-server/_libs/mdast-util-gfm.mjs +0 -29
  115. package/dist/web-server/_libs/mdast-util-phrasing.mjs +0 -30
  116. package/dist/web-server/_libs/mdast-util-to-hast.mjs +0 -710
  117. package/dist/web-server/_libs/mdast-util-to-markdown.mjs +0 -798
  118. package/dist/web-server/_libs/mdast-util-to-string.mjs +0 -38
  119. package/dist/web-server/_libs/micromark-core-commonmark.mjs +0 -2259
  120. package/dist/web-server/_libs/micromark-extension-gfm-autolink-literal+[...].mjs +0 -344
  121. package/dist/web-server/_libs/micromark-extension-gfm-footnote+[...].mjs +0 -279
  122. package/dist/web-server/_libs/micromark-extension-gfm-strikethrough+[...].mjs +0 -98
  123. package/dist/web-server/_libs/micromark-extension-gfm-table.mjs +0 -491
  124. package/dist/web-server/_libs/micromark-extension-gfm-tagfilter+[...].mjs +0 -1
  125. package/dist/web-server/_libs/micromark-extension-gfm-task-list-item+[...].mjs +0 -77
  126. package/dist/web-server/_libs/micromark-extension-gfm.mjs +0 -18
  127. package/dist/web-server/_libs/micromark-factory-destination.mjs +0 -94
  128. package/dist/web-server/_libs/micromark-factory-label.mjs +0 -63
  129. package/dist/web-server/_libs/micromark-factory-space.mjs +0 -24
  130. package/dist/web-server/_libs/micromark-factory-title.mjs +0 -65
  131. package/dist/web-server/_libs/micromark-factory-whitespace.mjs +0 -22
  132. package/dist/web-server/_libs/micromark-util-character.mjs +0 -44
  133. package/dist/web-server/_libs/micromark-util-chunked.mjs +0 -36
  134. package/dist/web-server/_libs/micromark-util-classify-character+[...].mjs +0 -12
  135. package/dist/web-server/_libs/micromark-util-combine-extensions+[...].mjs +0 -41
  136. package/dist/web-server/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +0 -19
  137. package/dist/web-server/_libs/micromark-util-decode-string.mjs +0 -21
  138. package/dist/web-server/_libs/micromark-util-encode.mjs +0 -1
  139. package/dist/web-server/_libs/micromark-util-html-tag-name.mjs +0 -69
  140. package/dist/web-server/_libs/micromark-util-normalize-identifier+[...].mjs +0 -6
  141. package/dist/web-server/_libs/micromark-util-resolve-all.mjs +0 -15
  142. package/dist/web-server/_libs/micromark-util-sanitize-uri.mjs +0 -41
  143. package/dist/web-server/_libs/micromark-util-subtokenize.mjs +0 -346
  144. package/dist/web-server/_libs/micromark.mjs +0 -906
  145. package/dist/web-server/_libs/ocache.mjs +0 -1
  146. package/dist/web-server/_libs/ohash.mjs +0 -1
  147. package/dist/web-server/_libs/parse-entities.mjs +0 -245
  148. package/dist/web-server/_libs/property-information.mjs +0 -1210
  149. package/dist/web-server/_libs/react-dom.mjs +0 -10779
  150. package/dist/web-server/_libs/react-markdown.mjs +0 -147
  151. package/dist/web-server/_libs/react-syntax-highlighter.mjs +0 -941
  152. package/dist/web-server/_libs/react.mjs +0 -513
  153. package/dist/web-server/_libs/refractor.mjs +0 -2425
  154. package/dist/web-server/_libs/remark-gfm.mjs +0 -20
  155. package/dist/web-server/_libs/remark-parse.mjs +0 -19
  156. package/dist/web-server/_libs/remark-rehype.mjs +0 -21
  157. package/dist/web-server/_libs/reselect.mjs +0 -1
  158. package/dist/web-server/_libs/rou3.mjs +0 -8
  159. package/dist/web-server/_libs/seroval-plugins.mjs +0 -58
  160. package/dist/web-server/_libs/seroval.mjs +0 -1775
  161. package/dist/web-server/_libs/space-separated-tokens.mjs +0 -11
  162. package/dist/web-server/_libs/srvx.mjs +0 -781
  163. package/dist/web-server/_libs/style-to-js.mjs +0 -72
  164. package/dist/web-server/_libs/style-to-object.mjs +0 -38
  165. package/dist/web-server/_libs/tabler__icons-react.mjs +0 -230
  166. package/dist/web-server/_libs/tanstack__history.mjs +0 -204
  167. package/dist/web-server/_libs/tanstack__query-core.mjs +0 -2552
  168. package/dist/web-server/_libs/tanstack__react-query.mjs +0 -190
  169. package/dist/web-server/_libs/tanstack__react-router.mjs +0 -1120
  170. package/dist/web-server/_libs/tanstack__react-store.mjs +0 -2
  171. package/dist/web-server/_libs/tanstack__router-core.mjs +0 -4288
  172. package/dist/web-server/_libs/tanstack__store.mjs +0 -1
  173. package/dist/web-server/_libs/trim-lines.mjs +0 -41
  174. package/dist/web-server/_libs/trough.mjs +0 -85
  175. package/dist/web-server/_libs/ufo.mjs +0 -54
  176. package/dist/web-server/_libs/unctx.mjs +0 -1
  177. package/dist/web-server/_libs/ungap__structured-clone.mjs +0 -224
  178. package/dist/web-server/_libs/unified.mjs +0 -661
  179. package/dist/web-server/_libs/unist-util-is.mjs +0 -100
  180. package/dist/web-server/_libs/unist-util-position.mjs +0 -27
  181. package/dist/web-server/_libs/unist-util-stringify-position.mjs +0 -27
  182. package/dist/web-server/_libs/unist-util-visit-parents.mjs +0 -83
  183. package/dist/web-server/_libs/unist-util-visit.mjs +0 -24
  184. package/dist/web-server/_libs/unstorage.mjs +0 -1
  185. package/dist/web-server/_libs/use-sync-external-store.mjs +0 -139
  186. package/dist/web-server/_libs/vfile-message.mjs +0 -138
  187. package/dist/web-server/_libs/vfile.mjs +0 -467
  188. package/dist/web-server/_libs/zod.mjs +0 -3915
  189. package/dist/web-server/_libs/zustand.mjs +0 -343
  190. package/dist/web-server/_libs/zwitch.mjs +0 -1
  191. package/dist/web-server/_ssr/index-0n2Z3BPQ.mjs +0 -369
  192. package/dist/web-server/_ssr/index-6itDALOw.mjs +0 -339
  193. package/dist/web-server/_ssr/index-BIRTrOmp.mjs +0 -449
  194. package/dist/web-server/_ssr/index-BPzfADac.mjs +0 -66
  195. package/dist/web-server/_ssr/index-BQE3bF14.mjs +0 -1870
  196. package/dist/web-server/_ssr/index-C5HpvlUP.mjs +0 -190
  197. package/dist/web-server/_ssr/index-C_ZxnypN.mjs +0 -213
  198. package/dist/web-server/_ssr/index-Ca8JFH8f.mjs +0 -612
  199. package/dist/web-server/_ssr/index-DNVESZiA.mjs +0 -513
  200. package/dist/web-server/_ssr/index.mjs +0 -1558
  201. package/dist/web-server/_ssr/input-CqXjTRQg.mjs +0 -20
  202. package/dist/web-server/_ssr/queries-3H_19mUt.mjs +0 -16
  203. package/dist/web-server/_ssr/router-sbsNus0Y.mjs +0 -2093
  204. package/dist/web-server/_ssr/start-HYkvq4Ni.mjs +0 -4
  205. package/dist/web-server/_ssr/switch-usf2F1UM.mjs +0 -33
  206. package/dist/web-server/_ssr/syntax-highlighter-5vezNTce.mjs +0 -62
  207. package/dist/web-server/_ssr/textarea-DfRheWY0.mjs +0 -18
  208. package/dist/web-server/_tanstack-start-manifest_v-DqW-pKEH.mjs +0 -4
  209. package/dist/web-server/index.mjs +0 -597
@@ -1,1558 +0,0 @@
1
- import { AsyncLocalStorage } from "node:async_hooks";
2
- import { N as NullProtoObj } from "../_libs/rou3.mjs";
3
- import { F as FastURL, N as NodeResponse } from "../_libs/srvx.mjs";
4
- import { t as resolveManifestAssetLink, k as rootRouteId, w as getNormalizedURL, x as getOrigin, y as attachRouterServerSsrUtils, z as defineHandlerCallback, A as createSerializationAdapter, C as createRawStreamRPCPlugin, i as invariant, g as isNotFound, m as isRedirect, D as isResolvedRedirect, E as getStylesheetHref, F as mergeHeaders, G as executeRewriteInput, H as defaultSerovalPlugins, I as makeSerovalPlugin } from "../_libs/tanstack__router-core.mjs";
5
- import { i as iu, P as Pu, s as su } from "../_libs/seroval.mjs";
6
- import { c as createMemoryHistory } from "../_libs/tanstack__history.mjs";
7
- import { j as jsxRuntimeExports } from "../_libs/react.mjs";
8
- import { r as renderRouterToStream, R as RouterProvider } from "../_libs/tanstack__react-router.mjs";
9
- import "node:http";
10
- import "node:stream";
11
- import "node:stream/promises";
12
- import "node:https";
13
- import "node:http2";
14
- import "../_libs/cookie-es.mjs";
15
- import "../_libs/seroval-plugins.mjs";
16
- import "node:stream/web";
17
- import "../_libs/react-dom.mjs";
18
- import "util";
19
- import "crypto";
20
- import "async_hooks";
21
- import "stream";
22
- import "../_libs/isbot.mjs";
23
- function StartServer(props) {
24
- return /* @__PURE__ */ jsxRuntimeExports.jsx(RouterProvider, { router: props.router });
25
- }
26
- var defaultStreamHandler = defineHandlerCallback(({ request, router, responseHeaders }) => renderRouterToStream({
27
- request,
28
- router,
29
- responseHeaders,
30
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(StartServer, { router })
31
- }));
32
- function decodePathname(pathname) {
33
- return decodeURI(pathname.includes("%25") ? pathname.replace(/%25/g, "%2525") : pathname);
34
- }
35
- const kEventNS = "h3.internal.event.";
36
- const kEventRes = /* @__PURE__ */ Symbol.for(`${kEventNS}res`);
37
- const kEventResHeaders = /* @__PURE__ */ Symbol.for(`${kEventNS}res.headers`);
38
- const kEventResErrHeaders = /* @__PURE__ */ Symbol.for(`${kEventNS}res.err.headers`);
39
- var H3Event = class {
40
- app;
41
- req;
42
- url;
43
- context;
44
- static __is_event__ = true;
45
- constructor(req, context, app) {
46
- this.context = context || req.context || new NullProtoObj();
47
- this.req = req;
48
- this.app = app;
49
- const _url = req._url;
50
- const url = _url && _url instanceof URL ? _url : new FastURL(req.url);
51
- if (url.pathname.includes("%")) url.pathname = decodePathname(url.pathname);
52
- this.url = url;
53
- }
54
- get res() {
55
- return this[kEventRes] ||= new H3EventResponse();
56
- }
57
- get runtime() {
58
- return this.req.runtime;
59
- }
60
- waitUntil(promise) {
61
- this.req.waitUntil?.(promise);
62
- }
63
- toString() {
64
- return `[${this.req.method}] ${this.req.url}`;
65
- }
66
- toJSON() {
67
- return this.toString();
68
- }
69
- get node() {
70
- return this.req.runtime?.node;
71
- }
72
- get headers() {
73
- return this.req.headers;
74
- }
75
- get path() {
76
- return this.url.pathname + this.url.search;
77
- }
78
- get method() {
79
- return this.req.method;
80
- }
81
- };
82
- var H3EventResponse = class {
83
- status;
84
- statusText;
85
- get headers() {
86
- return this[kEventResHeaders] ||= new Headers();
87
- }
88
- get errHeaders() {
89
- return this[kEventResErrHeaders] ||= new Headers();
90
- }
91
- };
92
- const DISALLOWED_STATUS_CHARS = /[^\u0009\u0020-\u007E]/g;
93
- function sanitizeStatusMessage(statusMessage = "") {
94
- return statusMessage.replace(DISALLOWED_STATUS_CHARS, "");
95
- }
96
- function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
97
- if (!statusCode) return defaultStatusCode;
98
- if (typeof statusCode === "string") statusCode = +statusCode;
99
- if (statusCode < 100 || statusCode > 599) return defaultStatusCode;
100
- return statusCode;
101
- }
102
- var HTTPError = class HTTPError2 extends Error {
103
- get name() {
104
- return "HTTPError";
105
- }
106
- status;
107
- statusText;
108
- headers;
109
- cause;
110
- data;
111
- body;
112
- unhandled;
113
- static isError(input) {
114
- return input instanceof Error && input?.name === "HTTPError";
115
- }
116
- static status(status, statusText, details) {
117
- return new HTTPError2({
118
- ...details,
119
- statusText,
120
- status
121
- });
122
- }
123
- constructor(arg1, arg2) {
124
- let messageInput;
125
- let details;
126
- if (typeof arg1 === "string") {
127
- messageInput = arg1;
128
- details = arg2;
129
- } else details = arg1;
130
- const status = sanitizeStatusCode(details?.status || details?.statusCode || details?.cause?.status || details?.cause?.statusCode, 500);
131
- const statusText = sanitizeStatusMessage(details?.statusText || details?.statusMessage || details?.cause?.statusText || details?.cause?.statusMessage);
132
- const message = messageInput || details?.message || details?.cause?.message || details?.statusText || details?.statusMessage || [
133
- "HTTPError",
134
- status,
135
- statusText
136
- ].filter(Boolean).join(" ");
137
- super(message, { cause: details });
138
- this.cause = details;
139
- this.status = status;
140
- this.statusText = statusText || void 0;
141
- const rawHeaders = details?.headers || details?.cause?.headers;
142
- this.headers = rawHeaders ? new Headers(rawHeaders) : void 0;
143
- this.unhandled = details?.unhandled ?? details?.cause?.unhandled ?? void 0;
144
- this.data = details?.data;
145
- this.body = details?.body;
146
- }
147
- get statusCode() {
148
- return this.status;
149
- }
150
- get statusMessage() {
151
- return this.statusText;
152
- }
153
- toJSON() {
154
- const unhandled = this.unhandled;
155
- return {
156
- status: this.status,
157
- statusText: this.statusText,
158
- unhandled,
159
- message: unhandled ? "HTTPError" : this.message,
160
- data: unhandled ? void 0 : this.data,
161
- ...unhandled ? void 0 : this.body
162
- };
163
- }
164
- };
165
- function isJSONSerializable(value, _type) {
166
- if (value === null || value === void 0) return true;
167
- if (_type !== "object") return _type === "boolean" || _type === "number" || _type === "string";
168
- if (typeof value.toJSON === "function") return true;
169
- if (Array.isArray(value)) return true;
170
- if (typeof value.pipe === "function" || typeof value.pipeTo === "function") return false;
171
- if (value instanceof NullProtoObj) return true;
172
- const proto = Object.getPrototypeOf(value);
173
- return proto === Object.prototype || proto === null;
174
- }
175
- const kNotFound = /* @__PURE__ */ Symbol.for("h3.notFound");
176
- const kHandled = /* @__PURE__ */ Symbol.for("h3.handled");
177
- function toResponse(val, event, config = {}) {
178
- if (typeof val?.then === "function") return (val.catch?.((error) => error) || Promise.resolve(val)).then((resolvedVal) => toResponse(resolvedVal, event, config));
179
- const response = prepareResponse(val, event, config);
180
- if (typeof response?.then === "function") return toResponse(response, event, config);
181
- const { onResponse } = config;
182
- return onResponse ? Promise.resolve(onResponse(response, event)).then(() => response) : response;
183
- }
184
- var HTTPResponse = class {
185
- #headers;
186
- #init;
187
- body;
188
- constructor(body, init) {
189
- this.body = body;
190
- this.#init = init;
191
- }
192
- get status() {
193
- return this.#init?.status || 200;
194
- }
195
- get statusText() {
196
- return this.#init?.statusText || "OK";
197
- }
198
- get headers() {
199
- return this.#headers ||= new Headers(this.#init?.headers);
200
- }
201
- };
202
- function prepareResponse(val, event, config, nested) {
203
- if (val === kHandled) return new NodeResponse(null);
204
- if (val === kNotFound) val = new HTTPError({
205
- status: 404,
206
- message: `Cannot find any route matching [${event.req.method}] ${event.url}`
207
- });
208
- if (val && val instanceof Error) {
209
- const isHTTPError = HTTPError.isError(val);
210
- const error = isHTTPError ? val : new HTTPError(val);
211
- if (!isHTTPError) {
212
- error.unhandled = true;
213
- if (val?.stack) error.stack = val.stack;
214
- }
215
- if (error.unhandled && !config.silent) console.error(error);
216
- const { onError } = config;
217
- const errHeaders = event[kEventRes]?.[kEventResErrHeaders];
218
- return onError && !nested ? Promise.resolve(onError(error, event)).catch((error2) => error2).then((newVal) => prepareResponse(newVal ?? val, event, config, true)) : errorResponse(error, config.debug, errHeaders);
219
- }
220
- const preparedRes = event[kEventRes];
221
- const preparedHeaders = preparedRes?.[kEventResHeaders];
222
- event[kEventRes] = void 0;
223
- if (!(val instanceof Response)) {
224
- const res = prepareResponseBody(val, event, config);
225
- const status = res.status || preparedRes?.status;
226
- return new NodeResponse(nullBody(event.req.method, status) ? null : res.body, {
227
- status,
228
- statusText: res.statusText || preparedRes?.statusText,
229
- headers: res.headers && preparedHeaders ? mergeHeaders$1(res.headers, preparedHeaders) : res.headers || preparedHeaders
230
- });
231
- }
232
- if (!preparedHeaders || nested || !val.ok) return val;
233
- try {
234
- mergeHeaders$1(val.headers, preparedHeaders, val.headers);
235
- return val;
236
- } catch {
237
- return new NodeResponse(nullBody(event.req.method, val.status) ? null : val.body, {
238
- status: val.status,
239
- statusText: val.statusText,
240
- headers: mergeHeaders$1(val.headers, preparedHeaders)
241
- });
242
- }
243
- }
244
- function mergeHeaders$1(base, overrides, target = new Headers(base)) {
245
- for (const [name, value] of overrides) if (name === "set-cookie") target.append(name, value);
246
- else target.set(name, value);
247
- return target;
248
- }
249
- const frozen = (name) => (...args) => {
250
- throw new Error(`Headers are frozen (${name} ${args.join(", ")})`);
251
- };
252
- var FrozenHeaders = class extends Headers {
253
- set = frozen("set");
254
- append = frozen("append");
255
- delete = frozen("delete");
256
- };
257
- const emptyHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-length": "0" });
258
- const jsonHeaders = /* @__PURE__ */ new FrozenHeaders({ "content-type": "application/json;charset=UTF-8" });
259
- function prepareResponseBody(val, event, config) {
260
- if (val === null || val === void 0) return {
261
- body: "",
262
- headers: emptyHeaders
263
- };
264
- const valType = typeof val;
265
- if (valType === "string") return { body: val };
266
- if (val instanceof Uint8Array) {
267
- event.res.headers.set("content-length", val.byteLength.toString());
268
- return { body: val };
269
- }
270
- if (val instanceof HTTPResponse || val?.constructor?.name === "HTTPResponse") return val;
271
- if (isJSONSerializable(val, valType)) return {
272
- body: JSON.stringify(val, void 0, config.debug ? 2 : void 0),
273
- headers: jsonHeaders
274
- };
275
- if (valType === "bigint") return {
276
- body: val.toString(),
277
- headers: jsonHeaders
278
- };
279
- if (val instanceof Blob) {
280
- const headers = new Headers({
281
- "content-type": val.type,
282
- "content-length": val.size.toString()
283
- });
284
- let filename = val.name;
285
- if (filename) {
286
- filename = encodeURIComponent(filename);
287
- headers.set("content-disposition", `filename="${filename}"; filename*=UTF-8''${filename}`);
288
- }
289
- return {
290
- body: val.stream(),
291
- headers
292
- };
293
- }
294
- if (valType === "symbol") return { body: val.toString() };
295
- if (valType === "function") return { body: `${val.name}()` };
296
- return { body: val };
297
- }
298
- function nullBody(method, status) {
299
- return method === "HEAD" || status === 100 || status === 101 || status === 102 || status === 204 || status === 205 || status === 304;
300
- }
301
- function errorResponse(error, debug, errHeaders) {
302
- let headers = error.headers ? mergeHeaders$1(jsonHeaders, error.headers) : new Headers(jsonHeaders);
303
- if (errHeaders) headers = mergeHeaders$1(headers, errHeaders);
304
- return new NodeResponse(JSON.stringify({
305
- ...error.toJSON(),
306
- stack: debug && error.stack ? error.stack.split("\n").map((l) => l.trim()) : void 0
307
- }, void 0, debug ? 2 : void 0), {
308
- status: error.status,
309
- statusText: error.statusText,
310
- headers
311
- });
312
- }
313
- var GLOBAL_EVENT_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:event-storage");
314
- var globalObj$1 = globalThis;
315
- if (!globalObj$1[GLOBAL_EVENT_STORAGE_KEY]) globalObj$1[GLOBAL_EVENT_STORAGE_KEY] = new AsyncLocalStorage();
316
- var eventStorage = globalObj$1[GLOBAL_EVENT_STORAGE_KEY];
317
- function isPromiseLike(value) {
318
- return typeof value.then === "function";
319
- }
320
- function getSetCookieValues(headers) {
321
- const headersWithSetCookie = headers;
322
- if (typeof headersWithSetCookie.getSetCookie === "function") return headersWithSetCookie.getSetCookie();
323
- const value = headers.get("set-cookie");
324
- return value ? [value] : [];
325
- }
326
- function mergeEventResponseHeaders(response, event) {
327
- if (response.ok) return;
328
- const eventSetCookies = getSetCookieValues(event.res.headers);
329
- if (eventSetCookies.length === 0) return;
330
- const responseSetCookies = getSetCookieValues(response.headers);
331
- response.headers.delete("set-cookie");
332
- for (const cookie of responseSetCookies) response.headers.append("set-cookie", cookie);
333
- for (const cookie of eventSetCookies) response.headers.append("set-cookie", cookie);
334
- }
335
- function attachResponseHeaders(value, event) {
336
- if (isPromiseLike(value)) return value.then((resolved) => {
337
- if (resolved instanceof Response) mergeEventResponseHeaders(resolved, event);
338
- return resolved;
339
- });
340
- if (value instanceof Response) mergeEventResponseHeaders(value, event);
341
- return value;
342
- }
343
- function requestHandler(handler) {
344
- return (request, requestOpts) => {
345
- let h3Event;
346
- try {
347
- h3Event = new H3Event(request);
348
- } catch (error) {
349
- if (error instanceof URIError) return new Response(null, {
350
- status: 400,
351
- statusText: "Bad Request"
352
- });
353
- throw error;
354
- }
355
- return toResponse(attachResponseHeaders(eventStorage.run({ h3Event }, () => handler(request, requestOpts)), h3Event), h3Event);
356
- };
357
- }
358
- function getH3Event() {
359
- const event = eventStorage.getStore();
360
- if (!event) throw new Error(`No StartEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`);
361
- return event.h3Event;
362
- }
363
- function getResponse() {
364
- return getH3Event().res;
365
- }
366
- var HEADERS = { TSS_SHELL: "X-TSS_SHELL" };
367
- async function getStartManifest(matchedRoutes) {
368
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-DqW-pKEH.mjs");
369
- const startManifest = tsrStartManifest();
370
- const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
371
- rootRoute.assets = rootRoute.assets || [];
372
- let injectedHeadScripts;
373
- return {
374
- manifest: {
375
- inlineCss: startManifest.inlineCss,
376
- routes: Object.fromEntries(Object.entries(startManifest.routes).flatMap(([k, v]) => {
377
- const result = {};
378
- let hasData = false;
379
- if (v.preloads && v.preloads.length > 0) {
380
- result["preloads"] = v.preloads;
381
- hasData = true;
382
- }
383
- if (v.assets && v.assets.length > 0) {
384
- result["assets"] = v.assets;
385
- hasData = true;
386
- }
387
- if (!hasData) return [];
388
- return [[k, result]];
389
- }))
390
- },
391
- clientEntry: startManifest.clientEntry,
392
- injectedHeadScripts
393
- };
394
- }
395
- const manifest = {};
396
- async function getServerFnById(id, access) {
397
- const serverFnInfo = manifest[id];
398
- if (!serverFnInfo) {
399
- throw new Error("Server function info not found for " + id);
400
- }
401
- const fnModule = serverFnInfo.module ?? await serverFnInfo.importer();
402
- if (!fnModule) {
403
- throw new Error("Server function module not resolved for " + id);
404
- }
405
- const action = fnModule[serverFnInfo.functionName];
406
- if (!action) {
407
- throw new Error("Server function module export not resolved for serverFn ID: " + id);
408
- }
409
- return action;
410
- }
411
- var TSS_FORMDATA_CONTEXT = "__TSS_CONTEXT";
412
- var TSS_SERVER_FUNCTION = /* @__PURE__ */ Symbol.for("TSS_SERVER_FUNCTION");
413
- var X_TSS_SERIALIZED = "x-tss-serialized";
414
- var X_TSS_RAW_RESPONSE = "x-tss-raw";
415
- var TSS_CONTENT_TYPE_FRAMED = "application/x-tss-framed";
416
- var FrameType = {
417
- JSON: 0,
418
- CHUNK: 1,
419
- END: 2,
420
- ERROR: 3
421
- };
422
- var FRAME_HEADER_SIZE = 9;
423
- var TSS_CONTENT_TYPE_FRAMED_VERSIONED = `${TSS_CONTENT_TYPE_FRAMED}; v=1`;
424
- function isSafeKey(key) {
425
- return key !== "__proto__" && key !== "constructor" && key !== "prototype";
426
- }
427
- function safeObjectMerge(target, source) {
428
- const result = /* @__PURE__ */ Object.create(null);
429
- if (target) {
430
- for (const key of Object.keys(target)) if (isSafeKey(key)) result[key] = target[key];
431
- }
432
- if (source && typeof source === "object") {
433
- for (const key of Object.keys(source)) if (isSafeKey(key)) result[key] = source[key];
434
- }
435
- return result;
436
- }
437
- function createNullProtoObject(source) {
438
- if (!source) return /* @__PURE__ */ Object.create(null);
439
- const obj = /* @__PURE__ */ Object.create(null);
440
- for (const key of Object.keys(source)) if (isSafeKey(key)) obj[key] = source[key];
441
- return obj;
442
- }
443
- var GLOBAL_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:start-storage-context");
444
- var globalObj = globalThis;
445
- if (!globalObj[GLOBAL_STORAGE_KEY]) globalObj[GLOBAL_STORAGE_KEY] = new AsyncLocalStorage();
446
- var startStorage = globalObj[GLOBAL_STORAGE_KEY];
447
- async function runWithStartContext(context, fn) {
448
- return startStorage.run(context, fn);
449
- }
450
- function getStartContext(opts) {
451
- const context = startStorage.getStore();
452
- if (!context && opts?.throwIfNotFound !== false) throw new Error(`No Start context found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`);
453
- return context;
454
- }
455
- var getStartOptions = () => getStartContext().startOptions;
456
- function flattenMiddlewares(middlewares, maxDepth = 100) {
457
- const seen = /* @__PURE__ */ new Set();
458
- const flattened = [];
459
- const recurse = (middleware, depth) => {
460
- if (depth > maxDepth) throw new Error(`Middleware nesting depth exceeded maximum of ${maxDepth}. Check for circular references.`);
461
- middleware.forEach((m) => {
462
- if (m.options.middleware) recurse(m.options.middleware, depth + 1);
463
- if (!seen.has(m)) {
464
- seen.add(m);
465
- flattened.push(m);
466
- }
467
- });
468
- };
469
- recurse(middlewares, 0);
470
- return flattened;
471
- }
472
- function getDefaultSerovalPlugins() {
473
- return [...getStartOptions()?.serializationAdapters?.map(makeSerovalPlugin) ?? [], ...defaultSerovalPlugins];
474
- }
475
- var textEncoder = new TextEncoder();
476
- var EMPTY_PAYLOAD = new Uint8Array(0);
477
- function encodeFrame(type, streamId, payload) {
478
- const frame = new Uint8Array(FRAME_HEADER_SIZE + payload.length);
479
- frame[0] = type;
480
- frame[1] = streamId >>> 24 & 255;
481
- frame[2] = streamId >>> 16 & 255;
482
- frame[3] = streamId >>> 8 & 255;
483
- frame[4] = streamId & 255;
484
- frame[5] = payload.length >>> 24 & 255;
485
- frame[6] = payload.length >>> 16 & 255;
486
- frame[7] = payload.length >>> 8 & 255;
487
- frame[8] = payload.length & 255;
488
- frame.set(payload, FRAME_HEADER_SIZE);
489
- return frame;
490
- }
491
- function encodeJSONFrame(json) {
492
- return encodeFrame(FrameType.JSON, 0, textEncoder.encode(json));
493
- }
494
- function encodeChunkFrame(streamId, chunk) {
495
- return encodeFrame(FrameType.CHUNK, streamId, chunk);
496
- }
497
- function encodeEndFrame(streamId) {
498
- return encodeFrame(FrameType.END, streamId, EMPTY_PAYLOAD);
499
- }
500
- function encodeErrorFrame(streamId, error) {
501
- const message = error instanceof Error ? error.message : String(error ?? "Unknown error");
502
- return encodeFrame(FrameType.ERROR, streamId, textEncoder.encode(message));
503
- }
504
- function createMultiplexedStream(jsonStream, rawStreams, lateStreamSource) {
505
- let controller;
506
- let cancelled = false;
507
- const readers = [];
508
- const enqueue = (frame) => {
509
- if (cancelled) return false;
510
- try {
511
- controller.enqueue(frame);
512
- return true;
513
- } catch {
514
- return false;
515
- }
516
- };
517
- const errorOutput = (error) => {
518
- if (cancelled) return;
519
- cancelled = true;
520
- try {
521
- controller.error(error);
522
- } catch {
523
- }
524
- for (const reader of readers) reader.cancel().catch(() => {
525
- });
526
- };
527
- async function pumpRawStream(streamId, stream) {
528
- const reader = stream.getReader();
529
- readers.push(reader);
530
- try {
531
- while (!cancelled) {
532
- const { done, value } = await reader.read();
533
- if (done) {
534
- enqueue(encodeEndFrame(streamId));
535
- return;
536
- }
537
- if (!enqueue(encodeChunkFrame(streamId, value))) return;
538
- }
539
- } catch (error) {
540
- enqueue(encodeErrorFrame(streamId, error));
541
- } finally {
542
- reader.releaseLock();
543
- }
544
- }
545
- async function pumpJSON() {
546
- const reader = jsonStream.getReader();
547
- readers.push(reader);
548
- try {
549
- while (!cancelled) {
550
- const { done, value } = await reader.read();
551
- if (done) return;
552
- if (!enqueue(encodeJSONFrame(value))) return;
553
- }
554
- } catch (error) {
555
- errorOutput(error);
556
- throw error;
557
- } finally {
558
- reader.releaseLock();
559
- }
560
- }
561
- async function pumpLateStreams() {
562
- if (!lateStreamSource) return [];
563
- const lateStreamPumps = [];
564
- const reader = lateStreamSource.getReader();
565
- readers.push(reader);
566
- try {
567
- while (!cancelled) {
568
- const { done, value } = await reader.read();
569
- if (done) break;
570
- lateStreamPumps.push(pumpRawStream(value.id, value.stream));
571
- }
572
- } finally {
573
- reader.releaseLock();
574
- }
575
- return lateStreamPumps;
576
- }
577
- return new ReadableStream({
578
- async start(ctrl) {
579
- controller = ctrl;
580
- const pumps = [pumpJSON()];
581
- for (const [streamId, stream] of rawStreams) pumps.push(pumpRawStream(streamId, stream));
582
- if (lateStreamSource) pumps.push(pumpLateStreams());
583
- try {
584
- const latePumps = (await Promise.all(pumps)).find(Array.isArray);
585
- if (latePumps && latePumps.length > 0) await Promise.all(latePumps);
586
- if (!cancelled) try {
587
- controller.close();
588
- } catch {
589
- }
590
- } catch {
591
- }
592
- },
593
- cancel() {
594
- cancelled = true;
595
- for (const reader of readers) reader.cancel().catch(() => {
596
- });
597
- readers.length = 0;
598
- }
599
- });
600
- }
601
- var serovalPlugins = void 0;
602
- var FORM_DATA_CONTENT_TYPES = ["multipart/form-data", "application/x-www-form-urlencoded"];
603
- var MAX_PAYLOAD_SIZE = 1e6;
604
- var handleServerAction = async ({ request, context, serverFnId }) => {
605
- const methodUpper = request.method.toUpperCase();
606
- const url = new URL(request.url);
607
- const action = await getServerFnById(serverFnId);
608
- if (action.method && methodUpper !== action.method) return new Response(`expected ${action.method} method. Got ${methodUpper}`, {
609
- status: 405,
610
- headers: { Allow: action.method }
611
- });
612
- const isServerFn = request.headers.get("x-tsr-serverFn") === "true";
613
- if (!serovalPlugins) serovalPlugins = getDefaultSerovalPlugins();
614
- const contentType = request.headers.get("Content-Type");
615
- function parsePayload(payload) {
616
- return Pu(payload, { plugins: serovalPlugins });
617
- }
618
- return await (async () => {
619
- try {
620
- let serializeResult = function(res2) {
621
- let nonStreamingBody = void 0;
622
- const alsResponse = getResponse();
623
- if (res2 !== void 0) {
624
- const rawStreams = /* @__PURE__ */ new Map();
625
- let initialPhase = true;
626
- let lateStreamWriter;
627
- let lateStreamReadable = void 0;
628
- const pendingLateStreams = [];
629
- const plugins = [createRawStreamRPCPlugin((id, stream) => {
630
- if (initialPhase) {
631
- rawStreams.set(id, stream);
632
- return;
633
- }
634
- if (lateStreamWriter) {
635
- lateStreamWriter.write({
636
- id,
637
- stream
638
- }).catch(() => {
639
- });
640
- return;
641
- }
642
- pendingLateStreams.push({
643
- id,
644
- stream
645
- });
646
- }), ...serovalPlugins || []];
647
- let done = false;
648
- const callbacks = {
649
- onParse: (value) => {
650
- nonStreamingBody = value;
651
- },
652
- onDone: () => {
653
- done = true;
654
- },
655
- onError: (error) => {
656
- throw error;
657
- }
658
- };
659
- iu(res2, {
660
- refs: /* @__PURE__ */ new Map(),
661
- plugins,
662
- onParse(value) {
663
- callbacks.onParse(value);
664
- },
665
- onDone() {
666
- callbacks.onDone();
667
- },
668
- onError: (error) => {
669
- callbacks.onError(error);
670
- }
671
- });
672
- initialPhase = false;
673
- if (done && rawStreams.size === 0) return new Response(nonStreamingBody ? JSON.stringify(nonStreamingBody) : void 0, {
674
- status: alsResponse.status,
675
- statusText: alsResponse.statusText,
676
- headers: {
677
- "Content-Type": "application/json",
678
- [X_TSS_SERIALIZED]: "true"
679
- }
680
- });
681
- const { readable, writable } = new TransformStream();
682
- lateStreamReadable = readable;
683
- lateStreamWriter = writable.getWriter();
684
- for (const registration of pendingLateStreams) lateStreamWriter.write(registration).catch(() => {
685
- });
686
- pendingLateStreams.length = 0;
687
- const multiplexedStream = createMultiplexedStream(new ReadableStream({
688
- start(controller) {
689
- callbacks.onParse = (value) => {
690
- controller.enqueue(JSON.stringify(value) + "\n");
691
- };
692
- callbacks.onDone = () => {
693
- try {
694
- controller.close();
695
- } catch {
696
- }
697
- lateStreamWriter?.close().catch(() => {
698
- }).finally(() => {
699
- lateStreamWriter = void 0;
700
- });
701
- };
702
- callbacks.onError = (error) => {
703
- controller.error(error);
704
- lateStreamWriter?.abort(error).catch(() => {
705
- }).finally(() => {
706
- lateStreamWriter = void 0;
707
- });
708
- };
709
- if (nonStreamingBody !== void 0) callbacks.onParse(nonStreamingBody);
710
- if (done) callbacks.onDone();
711
- },
712
- cancel() {
713
- lateStreamWriter?.abort().catch(() => {
714
- });
715
- lateStreamWriter = void 0;
716
- }
717
- }), rawStreams, lateStreamReadable);
718
- return new Response(multiplexedStream, {
719
- status: alsResponse.status,
720
- statusText: alsResponse.statusText,
721
- headers: {
722
- "Content-Type": TSS_CONTENT_TYPE_FRAMED_VERSIONED,
723
- [X_TSS_SERIALIZED]: "true"
724
- }
725
- });
726
- }
727
- return new Response(void 0, {
728
- status: alsResponse.status,
729
- statusText: alsResponse.statusText
730
- });
731
- };
732
- let res = await (async () => {
733
- if (FORM_DATA_CONTENT_TYPES.some((type) => contentType && contentType.includes(type))) {
734
- if (methodUpper === "GET") {
735
- if (false) ;
736
- invariant();
737
- }
738
- const formData = await request.formData();
739
- const serializedContext = formData.get(TSS_FORMDATA_CONTEXT);
740
- formData.delete(TSS_FORMDATA_CONTEXT);
741
- const params = {
742
- context,
743
- data: formData,
744
- method: methodUpper
745
- };
746
- if (typeof serializedContext === "string") try {
747
- const deserializedContext = Pu(JSON.parse(serializedContext), { plugins: serovalPlugins });
748
- if (typeof deserializedContext === "object" && deserializedContext) params.context = safeObjectMerge(deserializedContext, context);
749
- } catch (e) {
750
- if (false) ;
751
- }
752
- return await action(params);
753
- }
754
- if (methodUpper === "GET") {
755
- const payloadParam = url.searchParams.get("payload");
756
- if (payloadParam && payloadParam.length > MAX_PAYLOAD_SIZE) throw new Error("Payload too large");
757
- const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
758
- payload2.context = safeObjectMerge(payload2.context, context);
759
- payload2.method = methodUpper;
760
- return await action(payload2);
761
- }
762
- let jsonPayload;
763
- if (contentType?.includes("application/json")) jsonPayload = await request.json();
764
- const payload = jsonPayload ? parsePayload(jsonPayload) : {};
765
- payload.context = safeObjectMerge(payload.context, context);
766
- payload.method = methodUpper;
767
- return await action(payload);
768
- })();
769
- const unwrapped = res.result || res.error;
770
- if (isNotFound(res)) res = isNotFoundResponse(res);
771
- if (!isServerFn) return unwrapped;
772
- if (unwrapped instanceof Response) {
773
- if (isRedirect(unwrapped)) return unwrapped;
774
- unwrapped.headers.set(X_TSS_RAW_RESPONSE, "true");
775
- return unwrapped;
776
- }
777
- return serializeResult(res);
778
- } catch (error) {
779
- if (error instanceof Response) return error;
780
- if (isNotFound(error)) return isNotFoundResponse(error);
781
- console.info();
782
- console.info("Server Fn Error!");
783
- console.info();
784
- console.error(error);
785
- console.info();
786
- const serializedError = JSON.stringify(await Promise.resolve(su(error, {
787
- refs: /* @__PURE__ */ new Map(),
788
- plugins: serovalPlugins
789
- })));
790
- const response = getResponse();
791
- return new Response(serializedError, {
792
- status: response.status ?? 500,
793
- statusText: response.statusText,
794
- headers: {
795
- "Content-Type": "application/json",
796
- [X_TSS_SERIALIZED]: "true"
797
- }
798
- });
799
- }
800
- })();
801
- };
802
- function isNotFoundResponse(error) {
803
- const { headers, ...rest } = error;
804
- return new Response(JSON.stringify(rest), {
805
- status: 404,
806
- headers: {
807
- "Content-Type": "application/json",
808
- ...headers || {}
809
- }
810
- });
811
- }
812
- function normalizeTransformAssetResult(result) {
813
- if (typeof result === "string") return { href: result };
814
- return result;
815
- }
816
- function resolveTransformAssetsCrossOrigin(config, kind) {
817
- if (!config) return void 0;
818
- if (typeof config === "string") return config;
819
- return config[kind];
820
- }
821
- function isObjectShorthand(transform) {
822
- return "prefix" in transform;
823
- }
824
- function resolveTransformAssetsConfig(transform) {
825
- if (typeof transform === "string") {
826
- const prefix = transform;
827
- return {
828
- type: "transform",
829
- transformFn: ({ url }) => ({ href: `${prefix}${url}` }),
830
- cache: true
831
- };
832
- }
833
- if (typeof transform === "function") return {
834
- type: "transform",
835
- transformFn: transform,
836
- cache: true
837
- };
838
- if (isObjectShorthand(transform)) {
839
- const { prefix, crossOrigin } = transform;
840
- return {
841
- type: "transform",
842
- transformFn: ({ url, kind }) => {
843
- const href = `${prefix}${url}`;
844
- if (kind === "clientEntry") return { href };
845
- const co = resolveTransformAssetsCrossOrigin(crossOrigin, kind);
846
- return co ? {
847
- href,
848
- crossOrigin: co
849
- } : { href };
850
- },
851
- cache: true
852
- };
853
- }
854
- if ("createTransform" in transform && transform.createTransform) return {
855
- type: "createTransform",
856
- createTransform: transform.createTransform,
857
- cache: transform.cache !== false
858
- };
859
- return {
860
- type: "transform",
861
- transformFn: typeof transform.transform === "string" ? (({ url }) => ({ href: `${transform.transform}${url}` })) : transform.transform,
862
- cache: transform.cache !== false
863
- };
864
- }
865
- function adaptTransformAssetUrlsToTransformAssets(transformFn) {
866
- return async ({ url, kind }) => ({ href: await transformFn({
867
- url,
868
- type: kind
869
- }) });
870
- }
871
- function adaptTransformAssetUrlsConfigToTransformAssets(transform) {
872
- if (typeof transform === "string") return transform;
873
- if (typeof transform === "function") return adaptTransformAssetUrlsToTransformAssets(transform);
874
- if ("createTransform" in transform && transform.createTransform) return {
875
- createTransform: async (ctx) => adaptTransformAssetUrlsToTransformAssets(await transform.createTransform(ctx)),
876
- cache: transform.cache,
877
- warmup: transform.warmup
878
- };
879
- return {
880
- transform: typeof transform.transform === "string" ? transform.transform : adaptTransformAssetUrlsToTransformAssets(transform.transform),
881
- cache: transform.cache,
882
- warmup: transform.warmup
883
- };
884
- }
885
- function buildClientEntryScriptTag(clientEntry, injectedHeadScripts) {
886
- let script = `import(${JSON.stringify(clientEntry)})`;
887
- if (injectedHeadScripts) script = `${injectedHeadScripts};${script}`;
888
- return {
889
- tag: "script",
890
- attrs: {
891
- type: "module",
892
- async: true
893
- },
894
- children: script
895
- };
896
- }
897
- function assignManifestAssetLink(link, next) {
898
- if (typeof link === "string") return next.crossOrigin ? next : next.href;
899
- return next.crossOrigin ? next : { href: next.href };
900
- }
901
- async function transformManifestAssets(source, transformFn, _opts) {
902
- const manifest2 = structuredClone(source.manifest);
903
- for (const route of Object.values(manifest2.routes)) {
904
- if (route.preloads) route.preloads = await Promise.all(route.preloads.map(async (link) => {
905
- const result = normalizeTransformAssetResult(await transformFn({
906
- url: resolveManifestAssetLink(link).href,
907
- kind: "modulepreload"
908
- }));
909
- return assignManifestAssetLink(link, {
910
- href: result.href,
911
- crossOrigin: result.crossOrigin
912
- });
913
- }));
914
- if (route.assets && !source.manifest.inlineCss) {
915
- for (const asset of route.assets) if (asset.tag === "link" && asset.attrs?.href) {
916
- const rel = asset.attrs.rel;
917
- if (!(typeof rel === "string" ? rel.split(/\s+/) : []).includes("stylesheet")) continue;
918
- const result = normalizeTransformAssetResult(await transformFn({
919
- url: asset.attrs.href,
920
- kind: "stylesheet"
921
- }));
922
- asset.attrs.href = result.href;
923
- if (result.crossOrigin) asset.attrs.crossOrigin = result.crossOrigin;
924
- else delete asset.attrs.crossOrigin;
925
- }
926
- }
927
- }
928
- const transformedClientEntry = normalizeTransformAssetResult(await transformFn({
929
- url: source.clientEntry,
930
- kind: "clientEntry"
931
- }));
932
- const rootRoute = manifest2.routes[rootRouteId] = manifest2.routes[rootRouteId] || {};
933
- rootRoute.assets = rootRoute.assets || [];
934
- rootRoute.assets.push(buildClientEntryScriptTag(transformedClientEntry.href, source.injectedHeadScripts));
935
- return manifest2;
936
- }
937
- function buildManifestWithClientEntry(source) {
938
- const scriptTag = buildClientEntryScriptTag(source.clientEntry, source.injectedHeadScripts);
939
- const baseRootRoute = source.manifest.routes[rootRouteId];
940
- const routes = {
941
- ...source.manifest.routes,
942
- [rootRouteId]: {
943
- ...baseRootRoute,
944
- assets: [...baseRootRoute?.assets || [], scriptTag]
945
- }
946
- };
947
- return {
948
- inlineCss: source.manifest.inlineCss,
949
- routes
950
- };
951
- }
952
- var LINK_PARAM_TOKEN_RE = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
953
- var PRELOAD_AS_VALUES = /* @__PURE__ */ new Set([
954
- "fetch",
955
- "font",
956
- "image",
957
- "script",
958
- "style",
959
- "track"
960
- ]);
961
- function buildLinkParam(name, value) {
962
- if (value === void 0) return name;
963
- if (LINK_PARAM_TOKEN_RE.test(value)) return `${name}=${value}`;
964
- return `${name}=${JSON.stringify(value)}`;
965
- }
966
- function serializeEarlyHint(hint) {
967
- const parts = [`<${hint.href}>`, buildLinkParam("rel", hint.rel)];
968
- if (hint.as) parts.push(buildLinkParam("as", hint.as));
969
- if (hint.crossOrigin !== void 0) parts.push(buildLinkParam("crossorigin", hint.crossOrigin || void 0));
970
- if (hint.type) parts.push(buildLinkParam("type", hint.type));
971
- if (hint.integrity) parts.push(buildLinkParam("integrity", hint.integrity));
972
- if (hint.referrerPolicy) parts.push(buildLinkParam("referrerpolicy", hint.referrerPolicy));
973
- if (hint.fetchPriority) parts.push(buildLinkParam("fetchpriority", hint.fetchPriority));
974
- return parts.join("; ");
975
- }
976
- function getStringAttr(attrs, name, fallbackName) {
977
- const value = attrs?.[name] ?? (fallbackName ? attrs?.[fallbackName] : void 0);
978
- return typeof value === "string" ? value : void 0;
979
- }
980
- function getPreloadAs(attrs) {
981
- const as = getStringAttr(attrs, "as");
982
- return as && PRELOAD_AS_VALUES.has(as) ? as : void 0;
983
- }
984
- function addEarlyHintFetchAttrs(hint, attrs) {
985
- const crossOrigin = getStringAttr(attrs, "crossOrigin", "crossorigin");
986
- const type = getStringAttr(attrs, "type");
987
- const integrity = getStringAttr(attrs, "integrity");
988
- const referrerPolicy = getStringAttr(attrs, "referrerPolicy", "referrerpolicy");
989
- const fetchPriority = getStringAttr(attrs, "fetchPriority", "fetchpriority");
990
- if (crossOrigin !== void 0) hint.crossOrigin = crossOrigin;
991
- if (type) hint.type = type;
992
- if (integrity) hint.integrity = integrity;
993
- if (referrerPolicy) hint.referrerPolicy = referrerPolicy;
994
- if (fetchPriority) hint.fetchPriority = fetchPriority;
995
- }
996
- function linkAttrsToEarlyHint(attrs) {
997
- const href = getStringAttr(attrs, "href");
998
- const rel = getStringAttr(attrs, "rel");
999
- if (!href || !rel) return void 0;
1000
- const relTokens = rel.split(/\s+/);
1001
- let hintRel;
1002
- let hintAs;
1003
- if (relTokens.includes("modulepreload")) {
1004
- hintRel = "modulepreload";
1005
- hintAs = "script";
1006
- } else if (relTokens.includes("stylesheet")) {
1007
- hintRel = "preload";
1008
- hintAs = "style";
1009
- } else if (relTokens.includes("preload")) {
1010
- hintAs = getPreloadAs(attrs);
1011
- if (!hintAs) return void 0;
1012
- hintRel = "preload";
1013
- } else if (relTokens.includes("preconnect")) {
1014
- hintRel = "preconnect";
1015
- hintAs = void 0;
1016
- } else if (relTokens.includes("dns-prefetch")) {
1017
- hintRel = "dns-prefetch";
1018
- hintAs = void 0;
1019
- }
1020
- if (!hintRel) return void 0;
1021
- const hint = {
1022
- href,
1023
- rel: hintRel
1024
- };
1025
- if (hintAs) hint.as = hintAs;
1026
- addEarlyHintFetchAttrs(hint, attrs);
1027
- return hint;
1028
- }
1029
- function collectStaticHintsFromManifest(manifest2, matchedRoutes) {
1030
- const hints = [];
1031
- for (const route of matchedRoutes) {
1032
- const routeManifest = manifest2.routes[route.id];
1033
- if (!routeManifest) continue;
1034
- for (const link of routeManifest.preloads ?? []) {
1035
- const { href, crossOrigin } = resolveManifestAssetLink(link);
1036
- const hint = {
1037
- href,
1038
- rel: "modulepreload",
1039
- as: "script"
1040
- };
1041
- if (crossOrigin !== void 0) hint.crossOrigin = crossOrigin;
1042
- hints.push(hint);
1043
- }
1044
- for (const asset of routeManifest.assets ?? []) {
1045
- if (asset.tag !== "link") continue;
1046
- const stylesheetHref = getStylesheetHref(asset);
1047
- if (stylesheetHref) {
1048
- if (manifest2.inlineCss?.styles[stylesheetHref] !== void 0) continue;
1049
- const hint2 = {
1050
- href: stylesheetHref,
1051
- rel: "preload",
1052
- as: "style"
1053
- };
1054
- addEarlyHintFetchAttrs(hint2, asset.attrs);
1055
- hints.push(hint2);
1056
- continue;
1057
- }
1058
- const hint = linkAttrsToEarlyHint(asset.attrs);
1059
- if (hint) hints.push(hint);
1060
- }
1061
- }
1062
- return hints;
1063
- }
1064
- function collectDynamicHintsFromMatches(matches) {
1065
- const hints = [];
1066
- for (const match of matches) {
1067
- const links = match.links;
1068
- if (!Array.isArray(links)) continue;
1069
- for (const link of links) {
1070
- const hint = linkAttrsToEarlyHint(link);
1071
- if (hint) hints.push(hint);
1072
- }
1073
- }
1074
- return hints;
1075
- }
1076
- function createEarlyHintsEvent(opts) {
1077
- const nextHints = [];
1078
- const nextLinks = [];
1079
- for (const hint of opts.hints) {
1080
- const link = serializeEarlyHint(hint);
1081
- if (opts.sentLinks.has(link)) continue;
1082
- opts.sentLinks.add(link);
1083
- opts.sentHints.push(hint);
1084
- nextHints.push(hint);
1085
- nextLinks.push(link);
1086
- }
1087
- if (!nextHints.length && opts.phase !== "dynamic") return void 0;
1088
- return {
1089
- phase: opts.phase,
1090
- hints: nextHints,
1091
- links: nextLinks,
1092
- allHints: opts.sentHints.slice(),
1093
- allLinks: Array.from(opts.sentLinks)
1094
- };
1095
- }
1096
- function createResponseLinkHeaderEntries(opts) {
1097
- for (const hint of opts.hints) {
1098
- const link = serializeEarlyHint(hint);
1099
- if (opts.sentLinks.has(link)) continue;
1100
- opts.sentLinks.add(link);
1101
- opts.entries.push({
1102
- phase: opts.phase,
1103
- hint,
1104
- link
1105
- });
1106
- }
1107
- }
1108
- function getResponseLinkHeaderEntries(opts) {
1109
- if (!opts.filter) return opts.entries.map((entry) => entry.link);
1110
- try {
1111
- const links = [];
1112
- for (const entry of opts.entries) if (opts.filter(entry)) links.push(entry.link);
1113
- return links;
1114
- } catch (err) {
1115
- console.error("Error filtering response Link headers:", err);
1116
- return [];
1117
- }
1118
- }
1119
- var ServerFunctionSerializationAdapter = createSerializationAdapter({
1120
- key: "$TSS/serverfn",
1121
- test: (v) => {
1122
- if (typeof v !== "function") return false;
1123
- if (!(TSS_SERVER_FUNCTION in v)) return false;
1124
- return !!v[TSS_SERVER_FUNCTION];
1125
- },
1126
- toSerializable: ({ serverFnMeta }) => ({ functionId: serverFnMeta.id }),
1127
- fromSerializable: ({ functionId }) => {
1128
- const fn = async (opts, signal) => {
1129
- return (await (await getServerFnById(functionId))(opts ?? {}, signal)).result;
1130
- };
1131
- return fn;
1132
- }
1133
- });
1134
- function getStartResponseHeaders(opts) {
1135
- return mergeHeaders({ "Content-Type": "text/html; charset=utf-8" }, ...opts.router.stores.matches.get().map((match) => {
1136
- return match.headers;
1137
- }));
1138
- }
1139
- function notifyEarlyHints(phase, event, onEarlyHints) {
1140
- try {
1141
- const result = onEarlyHints(event);
1142
- if (result) Promise.resolve(result).catch((err) => {
1143
- console.error(`Error sending ${phase} early hints:`, err);
1144
- });
1145
- } catch (err) {
1146
- console.error(`Error sending ${phase} early hints:`, err);
1147
- }
1148
- }
1149
- function getResponseLinkHeaderFilter(responseLinkHeader) {
1150
- if (typeof responseLinkHeader !== "object") return;
1151
- return responseLinkHeader.filter;
1152
- }
1153
- function appendResponseLinkHeaders(opts) {
1154
- if (!opts.filter) {
1155
- for (const entry of opts.entries) opts.responseHeaders.append("Link", entry.link);
1156
- return;
1157
- }
1158
- const links = getResponseLinkHeaderEntries(opts);
1159
- for (const link of links) opts.responseHeaders.append("Link", link);
1160
- }
1161
- function collectResponseLinkHeaderEntries(opts) {
1162
- for (let index = 0; index < opts.event.hints.length; index++) opts.entries.push({
1163
- phase: opts.phase,
1164
- hint: opts.event.hints[index],
1165
- link: opts.event.links[index]
1166
- });
1167
- }
1168
- function handleCollectedEarlyHints(opts) {
1169
- const event = opts.onEarlyHints ? createEarlyHintsEvent({
1170
- phase: opts.phase,
1171
- hints: opts.hints,
1172
- sentLinks: opts.sentLinks,
1173
- sentHints: opts.sentHints
1174
- }) : void 0;
1175
- if (event) notifyEarlyHints(opts.phase, event, opts.onEarlyHints);
1176
- if (!opts.responseLinkHeaderEntries) return;
1177
- if (event) {
1178
- collectResponseLinkHeaderEntries({
1179
- phase: opts.phase,
1180
- event,
1181
- entries: opts.responseLinkHeaderEntries
1182
- });
1183
- return;
1184
- }
1185
- createResponseLinkHeaderEntries({
1186
- phase: opts.phase,
1187
- hints: opts.hints,
1188
- sentLinks: opts.sentLinks,
1189
- entries: opts.responseLinkHeaderEntries
1190
- });
1191
- }
1192
- var entriesPromise;
1193
- var baseManifestPromise;
1194
- var cachedFinalManifestPromise;
1195
- async function loadEntries() {
1196
- const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
1197
- import("./router-sbsNus0Y.mjs").then((n) => n.q),
1198
- import("./start-HYkvq4Ni.mjs"),
1199
- import("../__23tanstack-start-plugin-adapters-Cwee5PKy.mjs")
1200
- ]);
1201
- return {
1202
- routerEntry,
1203
- startEntry,
1204
- pluginAdapters
1205
- };
1206
- }
1207
- function getEntries() {
1208
- if (!entriesPromise) entriesPromise = loadEntries();
1209
- return entriesPromise;
1210
- }
1211
- function getBaseManifest(matchedRoutes) {
1212
- if (!baseManifestPromise) baseManifestPromise = getStartManifest();
1213
- return baseManifestPromise;
1214
- }
1215
- async function resolveManifest(matchedRoutes, transformFn, cache) {
1216
- const base = await getBaseManifest();
1217
- const computeFinalManifest = async () => {
1218
- return transformFn ? await transformManifestAssets(base, transformFn) : buildManifestWithClientEntry(base);
1219
- };
1220
- if (!transformFn || cache) {
1221
- if (!cachedFinalManifestPromise) cachedFinalManifestPromise = computeFinalManifest();
1222
- return cachedFinalManifestPromise;
1223
- }
1224
- return computeFinalManifest();
1225
- }
1226
- var ROUTER_BASEPATH = "/";
1227
- var SERVER_FN_BASE = "/_serverFn/";
1228
- var IS_PRERENDERING = process.env.TSS_PRERENDERING === "true";
1229
- var IS_SHELL_ENV = process.env.TSS_SHELL === "true";
1230
- var ERR_NO_RESPONSE = "Internal Server Error";
1231
- var ERR_NO_DEFER = "Internal Server Error";
1232
- function throwRouteHandlerError() {
1233
- throw new Error(ERR_NO_RESPONSE);
1234
- }
1235
- function throwIfMayNotDefer() {
1236
- throw new Error(ERR_NO_DEFER);
1237
- }
1238
- function isSpecialResponse(value) {
1239
- return value instanceof Response || isRedirect(value);
1240
- }
1241
- function handleCtxResult(result) {
1242
- if (isSpecialResponse(result)) return { response: result };
1243
- return result;
1244
- }
1245
- function executeMiddleware(middlewares, ctx) {
1246
- let index = -1;
1247
- const next = async (nextCtx) => {
1248
- if (nextCtx) {
1249
- if (nextCtx.context) ctx.context = safeObjectMerge(ctx.context, nextCtx.context);
1250
- for (const key of Object.keys(nextCtx)) if (key !== "context") ctx[key] = nextCtx[key];
1251
- }
1252
- index++;
1253
- const middleware = middlewares[index];
1254
- if (!middleware) return ctx;
1255
- let result;
1256
- try {
1257
- result = await middleware({
1258
- ...ctx,
1259
- next
1260
- });
1261
- } catch (err) {
1262
- if (isSpecialResponse(err)) {
1263
- ctx.response = err;
1264
- return ctx;
1265
- }
1266
- throw err;
1267
- }
1268
- const normalized = handleCtxResult(result);
1269
- if (normalized) {
1270
- if (normalized.response !== void 0) ctx.response = normalized.response;
1271
- if (normalized.context) ctx.context = safeObjectMerge(ctx.context, normalized.context);
1272
- }
1273
- return ctx;
1274
- };
1275
- return next();
1276
- }
1277
- function handlerToMiddleware(handler, mayDefer = false) {
1278
- if (mayDefer) return handler;
1279
- return async (ctx) => {
1280
- const response = await handler({
1281
- ...ctx,
1282
- next: throwIfMayNotDefer
1283
- });
1284
- if (!response) throwRouteHandlerError();
1285
- return response;
1286
- };
1287
- }
1288
- function createStartHandler(cbOrOptions) {
1289
- const cb = typeof cbOrOptions === "function" ? cbOrOptions : cbOrOptions.handler;
1290
- const transformAssetsOption = typeof cbOrOptions === "function" ? void 0 : cbOrOptions.transformAssets;
1291
- const transformAssetUrlsOption = typeof cbOrOptions === "function" ? void 0 : cbOrOptions.transformAssetUrls;
1292
- const transformOption = transformAssetsOption !== void 0 ? resolveTransformAssetsConfig(transformAssetsOption) : transformAssetUrlsOption !== void 0 ? resolveTransformAssetsConfig(adaptTransformAssetUrlsConfigToTransformAssets(transformAssetUrlsOption)) : void 0;
1293
- const warmupTransformManifest = !!transformAssetsOption && typeof transformAssetsOption === "object" && "warmup" in transformAssetsOption && transformAssetsOption.warmup === true || !!transformAssetUrlsOption && typeof transformAssetUrlsOption === "object" && transformAssetUrlsOption.warmup === true;
1294
- const resolvedTransformConfig = transformOption;
1295
- const cache = resolvedTransformConfig ? resolvedTransformConfig.cache : true;
1296
- const shouldCacheCreateTransform = cache && true;
1297
- let cachedCreateTransformPromise;
1298
- const getTransformFn = async (opts) => {
1299
- if (!resolvedTransformConfig) return void 0;
1300
- if (resolvedTransformConfig.type === "createTransform") {
1301
- if (shouldCacheCreateTransform) {
1302
- if (!cachedCreateTransformPromise) cachedCreateTransformPromise = Promise.resolve(resolvedTransformConfig.createTransform(opts)).catch((error) => {
1303
- cachedCreateTransformPromise = void 0;
1304
- throw error;
1305
- });
1306
- return cachedCreateTransformPromise;
1307
- }
1308
- return resolvedTransformConfig.createTransform(opts);
1309
- }
1310
- return resolvedTransformConfig.transformFn;
1311
- };
1312
- if (warmupTransformManifest && cache && true && !cachedFinalManifestPromise) {
1313
- const warmupPromise = (async () => {
1314
- const base = await getBaseManifest();
1315
- const transformFn = await getTransformFn({ warmup: true });
1316
- return transformFn ? await transformManifestAssets(base, transformFn) : buildManifestWithClientEntry(base);
1317
- })();
1318
- cachedFinalManifestPromise = warmupPromise;
1319
- warmupPromise.catch(() => {
1320
- if (cachedFinalManifestPromise === warmupPromise) cachedFinalManifestPromise = void 0;
1321
- cachedCreateTransformPromise = void 0;
1322
- });
1323
- }
1324
- const startRequestResolver = async (request, requestOpts) => {
1325
- let router = null;
1326
- let cbWillCleanup = false;
1327
- try {
1328
- const { url, handledProtocolRelativeURL } = getNormalizedURL(request.url);
1329
- const href = url.pathname + url.search + url.hash;
1330
- const origin = getOrigin(request);
1331
- if (handledProtocolRelativeURL) return Response.redirect(url, 308);
1332
- const entries = await getEntries();
1333
- const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
1334
- const { hasPluginAdapters, pluginSerializationAdapters } = entries.pluginAdapters;
1335
- const serializationAdapters = [
1336
- ...startOptions.serializationAdapters || [],
1337
- ...hasPluginAdapters ? pluginSerializationAdapters : [],
1338
- ServerFunctionSerializationAdapter
1339
- ];
1340
- const requestStartOptions = {
1341
- ...startOptions,
1342
- serializationAdapters
1343
- };
1344
- const flattenedRequestMiddlewares = startOptions.requestMiddleware ? flattenMiddlewares(startOptions.requestMiddleware) : [];
1345
- const executedRequestMiddlewares = new Set(flattenedRequestMiddlewares);
1346
- const getRouter = async () => {
1347
- if (router) return router;
1348
- router = await entries.routerEntry.getRouter();
1349
- let isShell = IS_SHELL_ENV;
1350
- if (IS_PRERENDERING && !isShell) isShell = request.headers.get(HEADERS.TSS_SHELL) === "true";
1351
- const history = createMemoryHistory({ initialEntries: [href] });
1352
- router.update({
1353
- history,
1354
- isShell,
1355
- isPrerendering: IS_PRERENDERING,
1356
- origin: router.options.origin ?? origin,
1357
- defaultSsr: requestStartOptions.defaultSsr,
1358
- serializationAdapters: [...requestStartOptions.serializationAdapters, ...router.options.serializationAdapters || []],
1359
- basepath: ROUTER_BASEPATH
1360
- });
1361
- return router;
1362
- };
1363
- if (SERVER_FN_BASE && url.pathname.startsWith(SERVER_FN_BASE)) {
1364
- const serverFnId = url.pathname.slice(SERVER_FN_BASE.length).split("/")[0];
1365
- if (!serverFnId) throw new Error("Invalid server action param for serverFnId");
1366
- const serverFnHandler = async ({ context }) => {
1367
- return runWithStartContext({
1368
- getRouter,
1369
- startOptions: requestStartOptions,
1370
- contextAfterGlobalMiddlewares: context,
1371
- request,
1372
- executedRequestMiddlewares,
1373
- handlerType: "serverFn"
1374
- }, () => handleServerAction({
1375
- request,
1376
- context: requestOpts?.context,
1377
- serverFnId
1378
- }));
1379
- };
1380
- return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), serverFnHandler], {
1381
- request,
1382
- pathname: url.pathname,
1383
- context: createNullProtoObject(requestOpts?.context)
1384
- })).response, request, getRouter);
1385
- }
1386
- const executeRouter = async (serverContext, matchedRoutes) => {
1387
- const acceptParts = (request.headers.get("Accept") || "*/*").split(",");
1388
- if (!["*/*", "text/html"].some((mimeType) => acceptParts.some((part) => part.trim().startsWith(mimeType)))) return Response.json({ error: "Only HTML requests are supported here" }, { status: 500 });
1389
- const manifest2 = await resolveManifest(matchedRoutes, await getTransformFn({
1390
- warmup: false,
1391
- request
1392
- }), cache);
1393
- const onEarlyHints = requestOpts?.onEarlyHints;
1394
- const responseLinkHeader = requestOpts?.responseLinkHeader;
1395
- const shouldCollectEarlyHints = !!onEarlyHints || !!responseLinkHeader;
1396
- const sentEarlyHintLinks = shouldCollectEarlyHints ? /* @__PURE__ */ new Set() : void 0;
1397
- const sentEarlyHints = onEarlyHints ? new Array() : void 0;
1398
- const responseLinkHeaderEntries = shouldCollectEarlyHints && responseLinkHeader ? new Array() : void 0;
1399
- const responseLinkHeaderFilter = shouldCollectEarlyHints ? getResponseLinkHeaderFilter(responseLinkHeader) : void 0;
1400
- if (shouldCollectEarlyHints && sentEarlyHintLinks && matchedRoutes?.length) handleCollectedEarlyHints({
1401
- phase: "static",
1402
- hints: collectStaticHintsFromManifest(manifest2, matchedRoutes),
1403
- sentLinks: sentEarlyHintLinks,
1404
- sentHints: sentEarlyHints,
1405
- onEarlyHints,
1406
- responseLinkHeaderEntries
1407
- });
1408
- const routerInstance = await getRouter();
1409
- attachRouterServerSsrUtils({
1410
- router: routerInstance,
1411
- manifest: manifest2,
1412
- getRequestAssets: () => getStartContext({ throwIfNotFound: false })?.requestAssets,
1413
- includeUnmatchedRouteAssets: false
1414
- });
1415
- routerInstance.update({ additionalContext: { serverContext } });
1416
- await routerInstance.load();
1417
- if (routerInstance.state.redirect) return routerInstance.state.redirect;
1418
- if (shouldCollectEarlyHints && sentEarlyHintLinks) handleCollectedEarlyHints({
1419
- phase: "dynamic",
1420
- hints: collectDynamicHintsFromMatches(routerInstance.stores.matches.get()),
1421
- sentLinks: sentEarlyHintLinks,
1422
- sentHints: sentEarlyHints,
1423
- onEarlyHints,
1424
- responseLinkHeaderEntries
1425
- });
1426
- const ctx = getStartContext({ throwIfNotFound: false });
1427
- await routerInstance.serverSsr.dehydrate({ requestAssets: ctx?.requestAssets });
1428
- const responseHeaders = getStartResponseHeaders({ router: routerInstance });
1429
- if (responseLinkHeaderEntries?.length) appendResponseLinkHeaders({
1430
- responseHeaders,
1431
- entries: responseLinkHeaderEntries,
1432
- filter: responseLinkHeaderFilter
1433
- });
1434
- cbWillCleanup = true;
1435
- return cb({
1436
- request,
1437
- router: routerInstance,
1438
- responseHeaders
1439
- });
1440
- };
1441
- const requestHandlerMiddleware = async ({ context }) => {
1442
- return runWithStartContext({
1443
- getRouter,
1444
- startOptions: requestStartOptions,
1445
- contextAfterGlobalMiddlewares: context,
1446
- request,
1447
- executedRequestMiddlewares,
1448
- handlerType: "router"
1449
- }, async () => {
1450
- try {
1451
- return await handleServerRoutes({
1452
- getRouter,
1453
- request,
1454
- url,
1455
- executeRouter,
1456
- context,
1457
- executedRequestMiddlewares
1458
- });
1459
- } catch (err) {
1460
- if (err instanceof Response) return err;
1461
- throw err;
1462
- }
1463
- });
1464
- };
1465
- return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), requestHandlerMiddleware], {
1466
- request,
1467
- pathname: url.pathname,
1468
- context: createNullProtoObject(requestOpts?.context)
1469
- })).response, request, getRouter);
1470
- } finally {
1471
- if (router && !cbWillCleanup) router.serverSsr?.cleanup();
1472
- router = null;
1473
- }
1474
- };
1475
- return requestHandler(startRequestResolver);
1476
- }
1477
- async function handleRedirectResponse(response, request, getRouter) {
1478
- if (!isRedirect(response)) return response;
1479
- if (isResolvedRedirect(response)) {
1480
- if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
1481
- ...response.options,
1482
- isSerializedRedirect: true
1483
- }, { headers: response.headers });
1484
- return response;
1485
- }
1486
- const opts = response.options;
1487
- if (opts.to && typeof opts.to === "string" && !opts.to.startsWith("/")) throw new Error(`Server side redirects must use absolute paths via the 'href' or 'to' options. The redirect() method's "to" property accepts an internal path only. Use the "href" property to provide an external URL. Received: ${JSON.stringify(opts)}`);
1488
- if ([
1489
- "params",
1490
- "search",
1491
- "hash"
1492
- ].some((d) => typeof opts[d] === "function")) throw new Error(`Server side redirects must use static search, params, and hash values and do not support functional values. Received functional values for: ${Object.keys(opts).filter((d) => typeof opts[d] === "function").map((d) => `"${d}"`).join(", ")}`);
1493
- const redirect = (await getRouter()).resolveRedirect(response);
1494
- if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
1495
- ...response.options,
1496
- isSerializedRedirect: true
1497
- }, { headers: response.headers });
1498
- return redirect;
1499
- }
1500
- async function handleServerRoutes({ getRouter, request, url, executeRouter, context, executedRequestMiddlewares }) {
1501
- const router = await getRouter();
1502
- const pathname = executeRewriteInput(router.rewrite, url).pathname;
1503
- const { matchedRoutes, foundRoute, routeParams } = router.getMatchedRoutes(pathname);
1504
- const isExactMatch = foundRoute && routeParams["**"] === void 0;
1505
- const routeMiddlewares = [];
1506
- for (const route of matchedRoutes) {
1507
- const serverMiddleware = route.options.server?.middleware;
1508
- if (serverMiddleware) {
1509
- const flattened = flattenMiddlewares(serverMiddleware);
1510
- for (const m of flattened) if (!executedRequestMiddlewares.has(m)) routeMiddlewares.push(m.options.server);
1511
- }
1512
- }
1513
- const server2 = foundRoute?.options.server;
1514
- let isHeadFallback = false;
1515
- if (server2?.handlers && isExactMatch) {
1516
- const handlers = typeof server2.handlers === "function" ? server2.handlers({ createHandlers: (d) => d }) : server2.handlers;
1517
- const requestMethod = request.method.toUpperCase();
1518
- const handler = requestMethod === "HEAD" ? handlers["HEAD"] ?? handlers["GET"] ?? handlers["ANY"] : handlers[requestMethod] ?? handlers["ANY"];
1519
- isHeadFallback = requestMethod === "HEAD" && handler !== void 0 && !handlers["HEAD"];
1520
- if (handler) {
1521
- const mayDefer = !!foundRoute.options.component;
1522
- if (typeof handler === "function") routeMiddlewares.push(handlerToMiddleware(handler, mayDefer));
1523
- else {
1524
- if (handler.middleware?.length) {
1525
- const handlerMiddlewares = flattenMiddlewares(handler.middleware);
1526
- for (const m of handlerMiddlewares) routeMiddlewares.push(m.options.server);
1527
- }
1528
- if (handler.handler) routeMiddlewares.push(handlerToMiddleware(handler.handler, mayDefer));
1529
- }
1530
- }
1531
- }
1532
- routeMiddlewares.push((ctx2) => executeRouter(ctx2.context, matchedRoutes));
1533
- const ctx = await executeMiddleware(routeMiddlewares, {
1534
- request,
1535
- context,
1536
- params: routeParams,
1537
- pathname
1538
- });
1539
- if (isHeadFallback) {
1540
- if (!ctx.response) throwRouteHandlerError();
1541
- const resolved = await handleRedirectResponse(ctx.response, request, getRouter);
1542
- return new Response(null, resolved);
1543
- }
1544
- return ctx.response;
1545
- }
1546
- const fetch$1 = createStartHandler(defaultStreamHandler);
1547
- function createServerEntry(entry) {
1548
- return {
1549
- async fetch(...args) {
1550
- return await entry.fetch(...args);
1551
- }
1552
- };
1553
- }
1554
- const server = createServerEntry({ fetch: fetch$1 });
1555
- export {
1556
- createServerEntry,
1557
- server as default
1558
- };