@tanstack/start-server-core 1.20.3-alpha.1

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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/cjs/createRequestHandler.cjs +50 -0
  4. package/dist/cjs/createRequestHandler.cjs.map +1 -0
  5. package/dist/cjs/createRequestHandler.d.cts +8 -0
  6. package/dist/cjs/createStartHandler.cjs +254 -0
  7. package/dist/cjs/createStartHandler.cjs.map +1 -0
  8. package/dist/cjs/createStartHandler.d.cts +10 -0
  9. package/dist/cjs/h3.cjs +355 -0
  10. package/dist/cjs/h3.cjs.map +1 -0
  11. package/dist/cjs/h3.d.cts +109 -0
  12. package/dist/cjs/handlerCallback.cjs +7 -0
  13. package/dist/cjs/handlerCallback.cjs.map +1 -0
  14. package/dist/cjs/handlerCallback.d.cts +9 -0
  15. package/dist/cjs/index.cjs +245 -0
  16. package/dist/cjs/index.cjs.map +1 -0
  17. package/dist/cjs/index.d.cts +12 -0
  18. package/dist/cjs/router-manifest.cjs +44 -0
  19. package/dist/cjs/router-manifest.cjs.map +1 -0
  20. package/dist/cjs/router-manifest.d.cts +17 -0
  21. package/dist/cjs/server-functions-handler.cjs +154 -0
  22. package/dist/cjs/server-functions-handler.cjs.map +1 -0
  23. package/dist/cjs/server-functions-handler.d.cts +4 -0
  24. package/dist/cjs/serverRoute.cjs +100 -0
  25. package/dist/cjs/serverRoute.cjs.map +1 -0
  26. package/dist/cjs/serverRoute.d.cts +115 -0
  27. package/dist/cjs/ssr-server.cjs +246 -0
  28. package/dist/cjs/ssr-server.cjs.map +1 -0
  29. package/dist/cjs/ssr-server.d.cts +29 -0
  30. package/dist/cjs/transformStreamWithRouter.cjs +183 -0
  31. package/dist/cjs/transformStreamWithRouter.cjs.map +1 -0
  32. package/dist/cjs/transformStreamWithRouter.d.cts +6 -0
  33. package/dist/cjs/tsrScript.cjs +4 -0
  34. package/dist/cjs/tsrScript.cjs.map +1 -0
  35. package/dist/cjs/tsrScript.d.cts +1 -0
  36. package/dist/cjs/undici.cjs +14 -0
  37. package/dist/cjs/undici.cjs.map +1 -0
  38. package/dist/cjs/undici.d.cts +43 -0
  39. package/dist/esm/createRequestHandler.d.ts +8 -0
  40. package/dist/esm/createRequestHandler.js +50 -0
  41. package/dist/esm/createRequestHandler.js.map +1 -0
  42. package/dist/esm/createStartHandler.d.ts +10 -0
  43. package/dist/esm/createStartHandler.js +232 -0
  44. package/dist/esm/createStartHandler.js.map +1 -0
  45. package/dist/esm/h3.d.ts +109 -0
  46. package/dist/esm/h3.js +248 -0
  47. package/dist/esm/h3.js.map +1 -0
  48. package/dist/esm/handlerCallback.d.ts +9 -0
  49. package/dist/esm/handlerCallback.js +7 -0
  50. package/dist/esm/handlerCallback.js.map +1 -0
  51. package/dist/esm/index.d.ts +12 -0
  52. package/dist/esm/index.js +137 -0
  53. package/dist/esm/index.js.map +1 -0
  54. package/dist/esm/router-manifest.d.ts +17 -0
  55. package/dist/esm/router-manifest.js +44 -0
  56. package/dist/esm/router-manifest.js.map +1 -0
  57. package/dist/esm/server-functions-handler.d.ts +4 -0
  58. package/dist/esm/server-functions-handler.js +154 -0
  59. package/dist/esm/server-functions-handler.js.map +1 -0
  60. package/dist/esm/serverRoute.d.ts +115 -0
  61. package/dist/esm/serverRoute.js +100 -0
  62. package/dist/esm/serverRoute.js.map +1 -0
  63. package/dist/esm/ssr-server.d.ts +29 -0
  64. package/dist/esm/ssr-server.js +246 -0
  65. package/dist/esm/ssr-server.js.map +1 -0
  66. package/dist/esm/transformStreamWithRouter.d.ts +6 -0
  67. package/dist/esm/transformStreamWithRouter.js +183 -0
  68. package/dist/esm/transformStreamWithRouter.js.map +1 -0
  69. package/dist/esm/tsrScript.d.ts +1 -0
  70. package/dist/esm/tsrScript.js +5 -0
  71. package/dist/esm/tsrScript.js.map +1 -0
  72. package/dist/esm/undici.d.ts +43 -0
  73. package/dist/esm/undici.js +14 -0
  74. package/dist/esm/undici.js.map +1 -0
  75. package/package.json +68 -0
  76. package/src/createRequestHandler.ts +73 -0
  77. package/src/createStartHandler.ts +348 -0
  78. package/src/h3.ts +492 -0
  79. package/src/handlerCallback.ts +15 -0
  80. package/src/index.tsx +24 -0
  81. package/src/router-manifest.ts +79 -0
  82. package/src/server-functions-handler.ts +273 -0
  83. package/src/serverRoute.ts +661 -0
  84. package/src/ssr-server.ts +350 -0
  85. package/src/tanstack-start.d.ts +5 -0
  86. package/src/transformStreamWithRouter.ts +258 -0
  87. package/src/tsrScript.ts +91 -0
  88. package/src/undici.ts +60 -0
  89. package/src/vite-env.d.ts +4 -0
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const transformStreamWithRouter = require("./transformStreamWithRouter.cjs");
4
+ const createStartHandler = require("./createStartHandler.cjs");
5
+ const createRequestHandler = require("./createRequestHandler.cjs");
6
+ const handlerCallback = require("./handlerCallback.cjs");
7
+ const ssrServer = require("./ssr-server.cjs");
8
+ const serverFunctionsHandler = require("./server-functions-handler.cjs");
9
+ const h3 = require("./h3.cjs");
10
+ const serverRoute = require("./serverRoute.cjs");
11
+ const undici = require("./undici.cjs");
12
+ const h3$1 = require("h3");
13
+ exports.transformPipeableStreamWithRouter = transformStreamWithRouter.transformPipeableStreamWithRouter;
14
+ exports.transformReadableStreamWithRouter = transformStreamWithRouter.transformReadableStreamWithRouter;
15
+ exports.createStartHandler = createStartHandler.createStartHandler;
16
+ exports.getStartResponseHeaders = createStartHandler.getStartResponseHeaders;
17
+ exports.createRequestHandler = createRequestHandler.createRequestHandler;
18
+ exports.defineHandlerCallback = handlerCallback.defineHandlerCallback;
19
+ exports.attachRouterServerSsrUtils = ssrServer.attachRouterServerSsrUtils;
20
+ exports.dehydrateRouter = ssrServer.dehydrateRouter;
21
+ exports.handleServerAction = serverFunctionsHandler.handleServerAction;
22
+ exports.HTTPEventSymbol = h3.HTTPEventSymbol;
23
+ exports.appendCorsHeaders = h3.appendCorsHeaders;
24
+ exports.appendCorsPreflightHeaders = h3.appendCorsPreflightHeaders;
25
+ exports.appendHeader = h3.appendHeader;
26
+ exports.appendHeaders = h3.appendHeaders;
27
+ exports.appendResponseHeader = h3.appendResponseHeader;
28
+ exports.appendResponseHeaders = h3.appendResponseHeaders;
29
+ exports.assertMethod = h3.assertMethod;
30
+ exports.clearResponseHeaders = h3.clearResponseHeaders;
31
+ exports.clearSession = h3.clearSession;
32
+ exports.defaultContentType = h3.defaultContentType;
33
+ exports.defineEventHandler = h3.defineEventHandler;
34
+ exports.defineMiddleware = h3.defineMiddleware;
35
+ exports.deleteCookie = h3.deleteCookie;
36
+ exports.eventHandler = h3.eventHandler;
37
+ exports.fetchWithEvent = h3.fetchWithEvent;
38
+ exports.getContext = h3.getContext;
39
+ exports.getCookie = h3.getCookie;
40
+ exports.getEvent = h3.getEvent;
41
+ exports.getHeader = h3.getHeader;
42
+ exports.getHeaders = h3.getHeaders;
43
+ exports.getProxyRequestHeaders = h3.getProxyRequestHeaders;
44
+ exports.getQuery = h3.getQuery;
45
+ exports.getRequestFingerprint = h3.getRequestFingerprint;
46
+ exports.getRequestHeader = h3.getRequestHeader;
47
+ exports.getRequestHeaders = h3.getRequestHeaders;
48
+ exports.getRequestHost = h3.getRequestHost;
49
+ exports.getRequestIP = h3.getRequestIP;
50
+ exports.getRequestProtocol = h3.getRequestProtocol;
51
+ exports.getRequestURL = h3.getRequestURL;
52
+ exports.getRequestWebStream = h3.getRequestWebStream;
53
+ exports.getResponseHeader = h3.getResponseHeader;
54
+ exports.getResponseHeaders = h3.getResponseHeaders;
55
+ exports.getResponseStatus = h3.getResponseStatus;
56
+ exports.getResponseStatusText = h3.getResponseStatusText;
57
+ exports.getRouterParam = h3.getRouterParam;
58
+ exports.getRouterParams = h3.getRouterParams;
59
+ exports.getSession = h3.getSession;
60
+ exports.getValidatedQuery = h3.getValidatedQuery;
61
+ exports.getValidatedRouterParams = h3.getValidatedRouterParams;
62
+ exports.getWebRequest = h3.getWebRequest;
63
+ exports.handleCacheHeaders = h3.handleCacheHeaders;
64
+ exports.handleCors = h3.handleCors;
65
+ exports.isEvent = h3.isEvent;
66
+ exports.isMethod = h3.isMethod;
67
+ exports.isPreflightRequest = h3.isPreflightRequest;
68
+ exports.parseCookies = h3.parseCookies;
69
+ exports.proxyRequest = h3.proxyRequest;
70
+ exports.readBody = h3.readBody;
71
+ exports.readFormData = h3.readFormData;
72
+ exports.readMultipartFormData = h3.readMultipartFormData;
73
+ exports.readRawBody = h3.readRawBody;
74
+ exports.readValidatedBody = h3.readValidatedBody;
75
+ exports.removeResponseHeader = h3.removeResponseHeader;
76
+ exports.requestHandler = h3.requestHandler;
77
+ exports.runWithEvent = h3.runWithEvent;
78
+ exports.sealSession = h3.sealSession;
79
+ exports.send = h3.send;
80
+ exports.sendError = h3.sendError;
81
+ exports.sendNoContent = h3.sendNoContent;
82
+ exports.sendProxy = h3.sendProxy;
83
+ exports.sendRedirect = h3.sendRedirect;
84
+ exports.sendStream = h3.sendStream;
85
+ exports.sendWebResponse = h3.sendWebResponse;
86
+ exports.setContext = h3.setContext;
87
+ exports.setCookie = h3.setCookie;
88
+ exports.setHeader = h3.setHeader;
89
+ exports.setHeaders = h3.setHeaders;
90
+ exports.setResponseHeader = h3.setResponseHeader;
91
+ exports.setResponseHeaders = h3.setResponseHeaders;
92
+ exports.setResponseStatus = h3.setResponseStatus;
93
+ exports.unsealSession = h3.unsealSession;
94
+ exports.updateSession = h3.updateSession;
95
+ exports.useSession = h3.useSession;
96
+ exports.writeEarlyHints = h3.writeEarlyHints;
97
+ exports.createServerFileRoute = serverRoute.createServerFileRoute;
98
+ exports.createServerRoute = serverRoute.createServerRoute;
99
+ exports.__getAbsoluteUrl = undici.__getAbsoluteUrl;
100
+ exports.__setGlobalOrigin = undici.__setGlobalOrigin;
101
+ Object.defineProperty(exports, "H3Error", {
102
+ enumerable: true,
103
+ get: () => h3$1.H3Error
104
+ });
105
+ Object.defineProperty(exports, "H3Event", {
106
+ enumerable: true,
107
+ get: () => h3$1.H3Event
108
+ });
109
+ Object.defineProperty(exports, "MIMES", {
110
+ enumerable: true,
111
+ get: () => h3$1.MIMES
112
+ });
113
+ Object.defineProperty(exports, "callNodeListener", {
114
+ enumerable: true,
115
+ get: () => h3$1.callNodeListener
116
+ });
117
+ Object.defineProperty(exports, "createApp", {
118
+ enumerable: true,
119
+ get: () => h3$1.createApp
120
+ });
121
+ Object.defineProperty(exports, "createAppEventHandler", {
122
+ enumerable: true,
123
+ get: () => h3$1.createAppEventHandler
124
+ });
125
+ Object.defineProperty(exports, "createError", {
126
+ enumerable: true,
127
+ get: () => h3$1.createError
128
+ });
129
+ Object.defineProperty(exports, "createEvent", {
130
+ enumerable: true,
131
+ get: () => h3$1.createEvent
132
+ });
133
+ Object.defineProperty(exports, "createRouter", {
134
+ enumerable: true,
135
+ get: () => h3$1.createRouter
136
+ });
137
+ Object.defineProperty(exports, "defineLazyEventHandler", {
138
+ enumerable: true,
139
+ get: () => h3$1.defineLazyEventHandler
140
+ });
141
+ Object.defineProperty(exports, "defineNodeListener", {
142
+ enumerable: true,
143
+ get: () => h3$1.defineNodeListener
144
+ });
145
+ Object.defineProperty(exports, "defineNodeMiddleware", {
146
+ enumerable: true,
147
+ get: () => h3$1.defineNodeMiddleware
148
+ });
149
+ Object.defineProperty(exports, "defineRequestMiddleware", {
150
+ enumerable: true,
151
+ get: () => h3$1.defineRequestMiddleware
152
+ });
153
+ Object.defineProperty(exports, "defineResponseMiddleware", {
154
+ enumerable: true,
155
+ get: () => h3$1.defineResponseMiddleware
156
+ });
157
+ Object.defineProperty(exports, "defineWebSocket", {
158
+ enumerable: true,
159
+ get: () => h3$1.defineWebSocket
160
+ });
161
+ Object.defineProperty(exports, "dynamicEventHandler", {
162
+ enumerable: true,
163
+ get: () => h3$1.dynamicEventHandler
164
+ });
165
+ Object.defineProperty(exports, "fromNodeMiddleware", {
166
+ enumerable: true,
167
+ get: () => h3$1.fromNodeMiddleware
168
+ });
169
+ Object.defineProperty(exports, "fromPlainHandler", {
170
+ enumerable: true,
171
+ get: () => h3$1.fromPlainHandler
172
+ });
173
+ Object.defineProperty(exports, "fromWebHandler", {
174
+ enumerable: true,
175
+ get: () => h3$1.fromWebHandler
176
+ });
177
+ Object.defineProperty(exports, "isCorsOriginAllowed", {
178
+ enumerable: true,
179
+ get: () => h3$1.isCorsOriginAllowed
180
+ });
181
+ Object.defineProperty(exports, "isError", {
182
+ enumerable: true,
183
+ get: () => h3$1.isError
184
+ });
185
+ Object.defineProperty(exports, "isEventHandler", {
186
+ enumerable: true,
187
+ get: () => h3$1.isEventHandler
188
+ });
189
+ Object.defineProperty(exports, "isStream", {
190
+ enumerable: true,
191
+ get: () => h3$1.isStream
192
+ });
193
+ Object.defineProperty(exports, "isWebResponse", {
194
+ enumerable: true,
195
+ get: () => h3$1.isWebResponse
196
+ });
197
+ Object.defineProperty(exports, "lazyEventHandler", {
198
+ enumerable: true,
199
+ get: () => h3$1.lazyEventHandler
200
+ });
201
+ Object.defineProperty(exports, "promisifyNodeListener", {
202
+ enumerable: true,
203
+ get: () => h3$1.promisifyNodeListener
204
+ });
205
+ Object.defineProperty(exports, "sanitizeStatusCode", {
206
+ enumerable: true,
207
+ get: () => h3$1.sanitizeStatusCode
208
+ });
209
+ Object.defineProperty(exports, "sanitizeStatusMessage", {
210
+ enumerable: true,
211
+ get: () => h3$1.sanitizeStatusMessage
212
+ });
213
+ Object.defineProperty(exports, "serveStatic", {
214
+ enumerable: true,
215
+ get: () => h3$1.serveStatic
216
+ });
217
+ Object.defineProperty(exports, "splitCookiesString", {
218
+ enumerable: true,
219
+ get: () => h3$1.splitCookiesString
220
+ });
221
+ Object.defineProperty(exports, "toEventHandler", {
222
+ enumerable: true,
223
+ get: () => h3$1.toEventHandler
224
+ });
225
+ Object.defineProperty(exports, "toNodeListener", {
226
+ enumerable: true,
227
+ get: () => h3$1.toNodeListener
228
+ });
229
+ Object.defineProperty(exports, "toPlainHandler", {
230
+ enumerable: true,
231
+ get: () => h3$1.toPlainHandler
232
+ });
233
+ Object.defineProperty(exports, "toWebHandler", {
234
+ enumerable: true,
235
+ get: () => h3$1.toWebHandler
236
+ });
237
+ Object.defineProperty(exports, "toWebRequest", {
238
+ enumerable: true,
239
+ get: () => h3$1.toWebRequest
240
+ });
241
+ Object.defineProperty(exports, "useBase", {
242
+ enumerable: true,
243
+ get: () => h3$1.useBase
244
+ });
245
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,12 @@
1
+ export { transformReadableStreamWithRouter, transformPipeableStreamWithRouter, } from './transformStreamWithRouter.cjs';
2
+ export { getStartResponseHeaders, createStartHandler, } from './createStartHandler.cjs';
3
+ export type { CustomizeStartHandler } from './createStartHandler.cjs';
4
+ export { createRequestHandler } from './createRequestHandler.cjs';
5
+ export { defineHandlerCallback } from './handlerCallback.cjs';
6
+ export type { HandlerCallback } from './handlerCallback.cjs';
7
+ export { attachRouterServerSsrUtils, dehydrateRouter } from './ssr-server.cjs';
8
+ export { handleServerAction } from './server-functions-handler.cjs';
9
+ export * from './h3.cjs';
10
+ export { createServerRoute, createServerFileRoute } from './serverRoute.cjs';
11
+ export type { CreateServerFileRoute } from './serverRoute.cjs';
12
+ export { __getAbsoluteUrl, __setGlobalOrigin } from './undici.cjs';
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const tanstack_startManifest = require("tanstack:start-manifest");
4
+ const routerCore = require("@tanstack/router-core");
5
+ function getStartManifest() {
6
+ const startManifest = tanstack_startManifest.tsrStartManifest();
7
+ const rootRoute = startManifest.routes[routerCore.rootRouteId] = startManifest.routes[routerCore.rootRouteId] || {};
8
+ rootRoute.assets = rootRoute.assets || [];
9
+ if (process.env.NODE_ENV === "development" && !process.env.TSS_CLIENT_ENTRY) {
10
+ throw new Error(
11
+ "tanstack/start-server-core: TSS_CLIENT_ENTRY must be defined in your environment for getStartManifest()"
12
+ );
13
+ }
14
+ if (process.env.NODE_ENV === "development") {
15
+ const script = `${globalThis.TSS_INJECTED_HEAD_SCRIPTS ? globalThis.TSS_INJECTED_HEAD_SCRIPTS + "; " : ""}import(${JSON.stringify(process.env.TSS_CLIENT_ENTRY)})`;
16
+ rootRoute.assets.push({
17
+ tag: "script",
18
+ attrs: {
19
+ type: "module",
20
+ suppressHydrationWarning: true,
21
+ async: true
22
+ },
23
+ children: script
24
+ });
25
+ }
26
+ const manifest = {
27
+ ...startManifest,
28
+ routes: Object.fromEntries(
29
+ Object.entries(startManifest.routes).map(([k, v]) => {
30
+ const { preloads, assets } = v;
31
+ return [
32
+ k,
33
+ {
34
+ preloads,
35
+ assets
36
+ }
37
+ ];
38
+ })
39
+ )
40
+ };
41
+ return manifest;
42
+ }
43
+ exports.getStartManifest = getStartManifest;
44
+ //# sourceMappingURL=router-manifest.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-manifest.cjs","sources":["../../src/router-manifest.ts"],"sourcesContent":["import { tsrStartManifest } from 'tanstack:start-manifest'\nimport { rootRouteId } from '@tanstack/router-core'\n\ndeclare global {\n // eslint-disable-next-line no-var\n var TSS_INJECTED_HEAD_SCRIPTS: string | undefined\n}\n\n/**\n * @description Returns the router manifest that should be sent to the client.\n * This includes only the assets and preloads for the current route and any\n * special assets that are needed for the client. It does not include relationships\n * between routes or any other data that is not needed for the client.\n */\nexport function getStartManifest() {\n const startManifest = tsrStartManifest()\n\n const rootRoute = (startManifest.routes[rootRouteId] =\n startManifest.routes[rootRouteId] || {})\n\n rootRoute.assets = rootRoute.assets || []\n\n // Get the entry for the client\n // const ClientManifest = getManifest('client')\n\n // const importPath =\n // ClientManifest.inputs[ClientManifest.handler]?.output.path\n // if (!importPath) {\n // invariant(importPath, 'Could not find client entry in manifest')\n // }\n\n if (process.env.NODE_ENV === 'development' && !process.env.TSS_CLIENT_ENTRY) {\n throw new Error(\n 'tanstack/start-server-core: TSS_CLIENT_ENTRY must be defined in your environment for getStartManifest()',\n )\n }\n\n if (process.env.NODE_ENV === 'development') {\n // Always fake that HMR is ready\n // const CLIENT_BASE = sanitizeBase(process.env.TSS_CLIENT_BASE || '')\n\n // if (!CLIENT_BASE) {\n // throw new Error(\n // 'tanstack/start-router-manifest: TSS_CLIENT_BASE must be defined in your environment for getFullRouterManifest()',\n // )\n // }\n\n const script = `${globalThis.TSS_INJECTED_HEAD_SCRIPTS ? globalThis.TSS_INJECTED_HEAD_SCRIPTS + '; ' : ''}import(${JSON.stringify(process.env.TSS_CLIENT_ENTRY)})`\n\n rootRoute.assets.push({\n tag: 'script',\n attrs: {\n type: 'module',\n suppressHydrationWarning: true,\n async: true,\n },\n children: script,\n })\n }\n\n const manifest = {\n ...startManifest,\n routes: Object.fromEntries(\n Object.entries(startManifest.routes).map(([k, v]) => {\n const { preloads, assets } = v\n return [\n k,\n {\n preloads,\n assets,\n },\n ]\n }),\n ),\n }\n\n // Strip out anything that isn't needed for the client\n return manifest\n}\n"],"names":["tsrStartManifest","rootRouteId"],"mappings":";;;;AAcO,SAAS,mBAAmB;AACjC,QAAM,gBAAgBA,uBAAAA,iBAAiB;AAEjC,QAAA,YAAa,cAAc,OAAOC,WAAAA,WAAW,IACjD,cAAc,OAAOA,WAAW,WAAA,KAAK,CAAC;AAE9B,YAAA,SAAS,UAAU,UAAU,CAAC;AAWxC,MAAI,QAAQ,IAAI,aAAa,iBAAiB,CAAC,QAAQ,IAAI,kBAAkB;AAC3E,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGE,MAAA,QAAQ,IAAI,aAAa,eAAe;AAU1C,UAAM,SAAS,GAAG,WAAW,4BAA4B,WAAW,4BAA4B,OAAO,EAAE,UAAU,KAAK,UAAU,QAAQ,IAAI,gBAAgB,CAAC;AAE/J,cAAU,OAAO,KAAK;AAAA,MACpB,KAAK;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,0BAA0B;AAAA,QAC1B,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,IAAA,CACX;AAAA,EAAA;AAGH,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,QAAQ,OAAO;AAAA,MACb,OAAO,QAAQ,cAAc,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AAC7C,cAAA,EAAE,UAAU,OAAA,IAAW;AACtB,eAAA;AAAA,UACL;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,UAAA;AAAA,QAEJ;AAAA,MACD,CAAA;AAAA,IAAA;AAAA,EAEL;AAGO,SAAA;AACT;;"}
@@ -0,0 +1,17 @@
1
+ declare global {
2
+ var TSS_INJECTED_HEAD_SCRIPTS: string | undefined;
3
+ }
4
+ /**
5
+ * @description Returns the router manifest that should be sent to the client.
6
+ * This includes only the assets and preloads for the current route and any
7
+ * special assets that are needed for the client. It does not include relationships
8
+ * between routes or any other data that is not needed for the client.
9
+ */
10
+ export declare function getStartManifest(): {
11
+ routes: {
12
+ [k: string]: {
13
+ preloads: string[] | undefined;
14
+ assets: import('@tanstack/router-core').RouterManagedTag[] | undefined;
15
+ };
16
+ };
17
+ };
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const routerCore = require("@tanstack/router-core");
4
+ const invariant = require("tiny-invariant");
5
+ const startClientCore = require("@tanstack/start-client-core");
6
+ const _serverFnManifest = require("tanstack:server-fn-manifest");
7
+ const h3 = require("./h3.cjs");
8
+ const serverFnManifest = _serverFnManifest;
9
+ function sanitizeBase(base) {
10
+ if (!base) {
11
+ throw new Error(
12
+ "🚨 process.env.TSS_SERVER_FN_BASE is required in start/server-handler/index"
13
+ );
14
+ }
15
+ return base.replace(/^\/|\/$/g, "");
16
+ }
17
+ const handleServerAction = async ({ request }) => {
18
+ const controller = new AbortController();
19
+ const signal = controller.signal;
20
+ const abort = () => controller.abort();
21
+ request.signal.addEventListener("abort", abort);
22
+ const method = request.method;
23
+ const url = new URL(request.url, "http://localhost:3000");
24
+ const regex = new RegExp(
25
+ `${sanitizeBase(process.env.TSS_SERVER_FN_BASE)}/([^/?#]+)`
26
+ );
27
+ const match = url.pathname.match(regex);
28
+ const serverFnId = match ? match[1] : null;
29
+ const search = Object.fromEntries(url.searchParams.entries());
30
+ const isCreateServerFn = "createServerFn" in search;
31
+ const isRaw = "raw" in search;
32
+ if (typeof serverFnId !== "string") {
33
+ throw new Error("Invalid server action param for serverFnId: " + serverFnId);
34
+ }
35
+ const serverFnInfo = serverFnManifest[serverFnId];
36
+ if (!serverFnInfo) {
37
+ console.info("serverFnManifest", serverFnManifest);
38
+ throw new Error("Server function info not found for " + serverFnId);
39
+ }
40
+ let fnModule;
41
+ if (process.env.NODE_ENV === "development") {
42
+ const serverEnv = globalThis.viteDevServer.environments["server"];
43
+ if (!serverEnv) {
44
+ throw new Error(`'server' vite dev environment not found`);
45
+ }
46
+ fnModule = await serverEnv.runner.import(serverFnInfo.extractedFilename);
47
+ } else {
48
+ fnModule = await serverFnInfo.importer();
49
+ }
50
+ if (!fnModule) {
51
+ console.info("serverFnInfo", serverFnInfo);
52
+ throw new Error("Server function module not resolved for " + serverFnId);
53
+ }
54
+ const action = fnModule[serverFnInfo.functionName];
55
+ if (!action) {
56
+ console.info("serverFnInfo", serverFnInfo);
57
+ console.info("fnModule", fnModule);
58
+ throw new Error(
59
+ `Server function module export not resolved for serverFn ID: ${serverFnId}`
60
+ );
61
+ }
62
+ const formDataContentTypes = [
63
+ "multipart/form-data",
64
+ "application/x-www-form-urlencoded"
65
+ ];
66
+ const response = await (async () => {
67
+ try {
68
+ let result = await (async () => {
69
+ if (request.headers.get("Content-Type") && formDataContentTypes.some(
70
+ (type) => {
71
+ var _a;
72
+ return (_a = request.headers.get("Content-Type")) == null ? void 0 : _a.includes(type);
73
+ }
74
+ )) {
75
+ invariant(
76
+ method.toLowerCase() !== "get",
77
+ "GET requests with FormData payloads are not supported"
78
+ );
79
+ return await action(await request.formData(), signal);
80
+ }
81
+ if (method.toLowerCase() === "get") {
82
+ let payload2 = search;
83
+ if (isCreateServerFn) {
84
+ payload2 = search.payload;
85
+ }
86
+ payload2 = payload2 ? startClientCore.startSerializer.parse(payload2) : payload2;
87
+ return await action(payload2, signal);
88
+ }
89
+ const jsonPayloadAsString = await request.text();
90
+ const payload = startClientCore.startSerializer.parse(jsonPayloadAsString);
91
+ if (isCreateServerFn) {
92
+ return await action(payload, signal);
93
+ }
94
+ return await action(...payload, signal);
95
+ })();
96
+ if (result.result instanceof Response) {
97
+ return result.result;
98
+ }
99
+ if (!isCreateServerFn) {
100
+ result = result.result;
101
+ if (result instanceof Response) {
102
+ return result;
103
+ }
104
+ }
105
+ if (routerCore.isNotFound(result)) {
106
+ return isNotFoundResponse(result);
107
+ }
108
+ return new Response(
109
+ result !== void 0 ? startClientCore.startSerializer.stringify(result) : void 0,
110
+ {
111
+ status: h3.getResponseStatus(h3.getEvent()),
112
+ headers: {
113
+ "Content-Type": "application/json"
114
+ }
115
+ }
116
+ );
117
+ } catch (error) {
118
+ if (error instanceof Response) {
119
+ return error;
120
+ }
121
+ if (routerCore.isNotFound(error)) {
122
+ return isNotFoundResponse(error);
123
+ }
124
+ console.info();
125
+ console.info("Server Fn Error!");
126
+ console.info();
127
+ console.error(error);
128
+ console.info();
129
+ return new Response(startClientCore.startSerializer.stringify(error), {
130
+ status: 500,
131
+ headers: {
132
+ "Content-Type": "application/json"
133
+ }
134
+ });
135
+ }
136
+ })();
137
+ request.signal.removeEventListener("abort", abort);
138
+ if (isRaw) {
139
+ return response;
140
+ }
141
+ return response;
142
+ };
143
+ function isNotFoundResponse(error) {
144
+ const { headers, ...rest } = error;
145
+ return new Response(JSON.stringify(rest), {
146
+ status: 200,
147
+ headers: {
148
+ "Content-Type": "application/json",
149
+ ...headers || {}
150
+ }
151
+ });
152
+ }
153
+ exports.handleServerAction = handleServerAction;
154
+ //# sourceMappingURL=server-functions-handler.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-functions-handler.cjs","sources":["../../src/server-functions-handler.ts"],"sourcesContent":["import { isNotFound } from '@tanstack/router-core'\nimport invariant from 'tiny-invariant'\nimport { startSerializer } from '@tanstack/start-client-core'\n// @ts-expect-error\nimport _serverFnManifest from 'tanstack:server-fn-manifest'\nimport { getEvent, getResponseStatus } from './h3'\n\n// NOTE: This is a dummy export to silence warnings about\n// only having a default export.\nexport const dummy = 2\n\nconst serverFnManifest = _serverFnManifest as Record<\n string,\n {\n functionName: string\n extractedFilename: string\n importer: () => Promise<any>\n }\n>\n\nfunction sanitizeBase(base: string | undefined) {\n if (!base) {\n throw new Error(\n '🚨 process.env.TSS_SERVER_FN_BASE is required in start/server-handler/index',\n )\n }\n\n return base.replace(/^\\/|\\/$/g, '')\n}\n\nexport const handleServerAction = async ({ request }: { request: Request }) => {\n const controller = new AbortController()\n const signal = controller.signal\n const abort = () => controller.abort()\n request.signal.addEventListener('abort', abort)\n\n const method = request.method\n const url = new URL(request.url, 'http://localhost:3000')\n // extract the serverFnId from the url as host/_server/:serverFnId\n // Define a regex to match the path and extract the :thing part\n const regex = new RegExp(\n `${sanitizeBase(process.env.TSS_SERVER_FN_BASE)}/([^/?#]+)`,\n )\n\n // Execute the regex\n const match = url.pathname.match(regex)\n const serverFnId = match ? match[1] : null\n const search = Object.fromEntries(url.searchParams.entries()) as {\n payload?: any\n createServerFn?: boolean\n }\n\n const isCreateServerFn = 'createServerFn' in search\n const isRaw = 'raw' in search\n\n if (typeof serverFnId !== 'string') {\n throw new Error('Invalid server action param for serverFnId: ' + serverFnId)\n }\n\n const serverFnInfo = serverFnManifest[serverFnId]\n\n if (!serverFnInfo) {\n console.info('serverFnManifest', serverFnManifest)\n throw new Error('Server function info not found for ' + serverFnId)\n }\n\n let fnModule: undefined | { [key: string]: any }\n\n if (process.env.NODE_ENV === 'development') {\n const serverEnv = (globalThis as any).viteDevServer.environments['server']\n if (!serverEnv) {\n throw new Error(`'server' vite dev environment not found`)\n }\n fnModule = await serverEnv.runner.import(serverFnInfo.extractedFilename)\n } else {\n fnModule = await serverFnInfo.importer()\n }\n\n if (!fnModule) {\n console.info('serverFnInfo', serverFnInfo)\n throw new Error('Server function module not resolved for ' + serverFnId)\n }\n\n const action = fnModule[serverFnInfo.functionName]\n\n if (!action) {\n console.info('serverFnInfo', serverFnInfo)\n console.info('fnModule', fnModule)\n throw new Error(\n `Server function module export not resolved for serverFn ID: ${serverFnId}`,\n )\n }\n\n // Known FormData 'Content-Type' header values\n const formDataContentTypes = [\n 'multipart/form-data',\n 'application/x-www-form-urlencoded',\n ]\n\n const response = await (async () => {\n try {\n let result = await (async () => {\n // FormData\n if (\n request.headers.get('Content-Type') &&\n formDataContentTypes.some((type) =>\n request.headers.get('Content-Type')?.includes(type),\n )\n ) {\n // We don't support GET requests with FormData payloads... that seems impossible\n invariant(\n method.toLowerCase() !== 'get',\n 'GET requests with FormData payloads are not supported',\n )\n\n return await action(await request.formData(), signal)\n }\n\n // Get requests use the query string\n if (method.toLowerCase() === 'get') {\n // By default the payload is the search params\n let payload: any = search\n\n // If this GET request was created by createServerFn,\n // then the payload will be on the payload param\n if (isCreateServerFn) {\n payload = search.payload\n }\n\n // If there's a payload, we should try to parse it\n payload = payload ? startSerializer.parse(payload) : payload\n\n // Send it through!\n return await action(payload, signal)\n }\n\n // This must be a POST request, likely JSON???\n const jsonPayloadAsString = await request.text()\n\n // We should probably try to deserialize the payload\n // as JSON, but we'll just pass it through for now.\n const payload = startSerializer.parse(jsonPayloadAsString)\n\n // If this POST request was created by createServerFn,\n // it's payload will be the only argument\n if (isCreateServerFn) {\n return await action(payload, signal)\n }\n\n // Otherwise, we'll spread the payload. Need to\n // support `use server` functions that take multiple\n // arguments.\n return await action(...(payload as any), signal)\n })()\n\n // Any time we get a Response back, we should just\n // return it immediately.\n if (result.result instanceof Response) {\n return result.result\n }\n\n // If this is a non createServerFn request, we need to\n // pull out the result from the result object\n if (!isCreateServerFn) {\n result = result.result\n\n // The result might again be a response,\n // and if it is, return it.\n if (result instanceof Response) {\n return result\n }\n }\n\n // if (!search.createServerFn) {\n // result = result.result\n // }\n\n // else if (\n // isPlainObject(result) &&\n // 'result' in result &&\n // result.result instanceof Response\n // ) {\n // return result.result\n // }\n\n // TODO: RSCs Where are we getting this package?\n // if (isValidElement(result)) {\n // const { renderToPipeableStream } = await import(\n // // @ts-expect-error\n // 'react-server-dom/server'\n // )\n\n // const pipeableStream = renderToPipeableStream(result)\n\n // setHeaders(event, {\n // 'Content-Type': 'text/x-component',\n // } as any)\n\n // sendStream(event, response)\n // event._handled = true\n\n // return new Response(null, { status: 200 })\n // }\n\n if (isNotFound(result)) {\n return isNotFoundResponse(result)\n }\n\n return new Response(\n result !== undefined ? startSerializer.stringify(result) : undefined,\n {\n status: getResponseStatus(getEvent()),\n headers: {\n 'Content-Type': 'application/json',\n },\n },\n )\n } catch (error: any) {\n if (error instanceof Response) {\n return error\n }\n // else if (\n // isPlainObject(error) &&\n // 'result' in error &&\n // error.result instanceof Response\n // ) {\n // return error.result\n // }\n\n // Currently this server-side context has no idea how to\n // build final URLs, so we need to defer that to the client.\n // The client will check for __redirect and __notFound keys,\n // and if they exist, it will handle them appropriately.\n\n if (isNotFound(error)) {\n return isNotFoundResponse(error)\n }\n\n console.info()\n console.info('Server Fn Error!')\n console.info()\n console.error(error)\n console.info()\n\n return new Response(startSerializer.stringify(error), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n }\n })()\n\n request.signal.removeEventListener('abort', abort)\n\n if (isRaw) {\n return response\n }\n\n return response\n}\n\nfunction isNotFoundResponse(error: any) {\n const { headers, ...rest } = error\n\n return new Response(JSON.stringify(rest), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...(headers || {}),\n },\n })\n}\n"],"names":["payload","startSerializer","isNotFound","getResponseStatus","getEvent"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const dummy = 2;
2
+ export declare const handleServerAction: ({ request }: {
3
+ request: Request;
4
+ }) => Promise<any>;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const routerCore = require("@tanstack/router-core");
4
+ function createServerFileRoute(__) {
5
+ return createServerRoute();
6
+ }
7
+ function createServerRoute(__, __opts) {
8
+ const options = __opts || {};
9
+ const route = {
10
+ path: "",
11
+ id: "",
12
+ fullPath: "",
13
+ to: "",
14
+ options,
15
+ parentRoute: void 0,
16
+ _types: {},
17
+ // children: undefined as TChildren,
18
+ middleware: (middlewares) => createServerRoute(void 0, {
19
+ ...options,
20
+ middleware: middlewares
21
+ }),
22
+ methods: (methodsOrGetMethods) => {
23
+ const methods = (() => {
24
+ if (typeof methodsOrGetMethods === "function") {
25
+ return methodsOrGetMethods(createMethodBuilder());
26
+ }
27
+ return methodsOrGetMethods;
28
+ })();
29
+ return createServerRoute(void 0, {
30
+ ...__opts,
31
+ methods
32
+ });
33
+ },
34
+ update: (opts) => createServerRoute(void 0, {
35
+ ...options,
36
+ ...opts
37
+ }),
38
+ init: (opts) => {
39
+ var _a;
40
+ options.originalIndex = opts.originalIndex;
41
+ const isRoot = !options.path && !options.id;
42
+ route.parentRoute = (_a = options.getParentRoute) == null ? void 0 : _a.call(options);
43
+ if (isRoot) {
44
+ route.path = routerCore.rootRouteId;
45
+ } else if (!route.parentRoute) {
46
+ throw new Error(
47
+ `Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a ServerRoute instance.`
48
+ );
49
+ }
50
+ let path = isRoot ? routerCore.rootRouteId : options.path;
51
+ if (path && path !== "/") {
52
+ path = routerCore.trimPathLeft(path);
53
+ }
54
+ const customId = options.id || path;
55
+ let id = isRoot ? routerCore.rootRouteId : routerCore.joinPaths([
56
+ route.parentRoute.id === routerCore.rootRouteId ? "" : route.parentRoute.id,
57
+ customId
58
+ ]);
59
+ if (path === routerCore.rootRouteId) {
60
+ path = "/";
61
+ }
62
+ if (id !== routerCore.rootRouteId) {
63
+ id = routerCore.joinPaths(["/", id]);
64
+ }
65
+ const fullPath = id === routerCore.rootRouteId ? "/" : routerCore.joinPaths([route.parentRoute.fullPath, path]);
66
+ route.path = path;
67
+ route.id = id;
68
+ route.fullPath = fullPath;
69
+ route.to = fullPath;
70
+ },
71
+ _addFileChildren: (children) => {
72
+ if (Array.isArray(children)) {
73
+ route.children = children;
74
+ }
75
+ if (typeof children === "object" && children !== null) {
76
+ route.children = Object.values(children);
77
+ }
78
+ return route;
79
+ },
80
+ _addFileTypes: () => route
81
+ };
82
+ return route;
83
+ }
84
+ const createMethodBuilder = (__opts) => {
85
+ return {
86
+ _options: __opts || {},
87
+ _types: {},
88
+ middleware: (middlewares) => createMethodBuilder({
89
+ ...__opts,
90
+ middlewares
91
+ }),
92
+ handler: (handler) => createMethodBuilder({
93
+ ...__opts,
94
+ handler
95
+ })
96
+ };
97
+ };
98
+ exports.createServerFileRoute = createServerFileRoute;
99
+ exports.createServerRoute = createServerRoute;
100
+ //# sourceMappingURL=serverRoute.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverRoute.cjs","sources":["../../src/serverRoute.ts"],"sourcesContent":["import { joinPaths, rootRouteId, trimPathLeft } from '@tanstack/router-core'\nimport type {\n Assign,\n Constrain,\n Expand,\n ResolveParams,\n RouteConstraints,\n TrimPathRight,\n} from '@tanstack/router-core'\nimport type {\n AnyRequestMiddleware,\n AssignAllServerContext,\n} from '@tanstack/start-client-core'\n\ntype TODO = any\n\nexport function createServerFileRoute<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TChildren,\n>(__?: never): ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren> {\n return createServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>(\n undefined,\n )\n}\n\nexport interface ServerRouteOptions<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n> {\n id: TId\n path: TPath\n pathname: TFullPath\n originalIndex: number\n getParentRoute?: () => TParentRoute\n middleware: Constrain<TMiddlewares, ReadonlyArray<AnyRequestMiddleware>>\n methods: Record<\n string,\n ServerRouteMethodHandlerFn<TParentRoute, TFullPath, TMiddlewares, any, any>\n >\n caseSensitive?: boolean\n}\n\nexport type ServerRouteManifest = {\n middleware: boolean\n methods: Record<string, { middleware: boolean }>\n}\n\nexport function createServerRoute<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TChildren,\n>(\n __?: never,\n __opts?: Partial<\n ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, undefined>\n >,\n): ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren> {\n const options = __opts || {}\n\n const route: ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren> = {\n path: '' as TPath,\n id: '' as TId,\n fullPath: '' as TFullPath,\n to: '' as TrimPathRight<TFullPath>,\n options: options as TODO,\n parentRoute: undefined as unknown as TParentRoute,\n _types: {} as TODO,\n // children: undefined as TChildren,\n middleware: (middlewares: TODO) =>\n createServerRoute(undefined, {\n ...options,\n middleware: middlewares,\n }) as TODO,\n methods: (methodsOrGetMethods: TODO) => {\n const methods = (() => {\n if (typeof methodsOrGetMethods === 'function') {\n return methodsOrGetMethods(createMethodBuilder())\n }\n\n return methodsOrGetMethods\n })()\n\n return createServerRoute(undefined, {\n ...__opts,\n methods,\n }) as TODO\n },\n update: (opts) =>\n createServerRoute(undefined, {\n ...options,\n ...opts,\n }) as TODO,\n init: (opts: { originalIndex: number }): void => {\n options.originalIndex = opts.originalIndex\n\n const isRoot = !options.path && !options.id\n\n route.parentRoute = options.getParentRoute?.() as TParentRoute\n\n if (isRoot) {\n route.path = rootRouteId as TPath\n } else if (!(route.parentRoute as any)) {\n throw new Error(\n `Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a ServerRoute instance.`,\n )\n }\n\n let path: undefined | string = isRoot ? rootRouteId : options.path\n\n // If the path is anything other than an index path, trim it up\n if (path && path !== '/') {\n path = trimPathLeft(path)\n }\n\n const customId = options.id || path\n\n // Strip the parentId prefix from the first level of children\n let id = isRoot\n ? rootRouteId\n : joinPaths([\n route.parentRoute.id === rootRouteId ? '' : route.parentRoute.id,\n customId,\n ])\n\n if (path === rootRouteId) {\n path = '/'\n }\n\n if (id !== rootRouteId) {\n id = joinPaths(['/', id])\n }\n\n const fullPath =\n id === rootRouteId ? '/' : joinPaths([route.parentRoute.fullPath, path])\n\n route.path = path as TPath\n route.id = id as TId\n route.fullPath = fullPath as TFullPath\n route.to = fullPath as TrimPathRight<TFullPath>\n },\n\n _addFileChildren: (children) => {\n if (Array.isArray(children)) {\n route.children = children as TChildren as TODO\n }\n\n if (typeof children === 'object' && children !== null) {\n route.children = Object.values(children) as TChildren as TODO\n }\n\n return route as any\n },\n\n _addFileTypes: <TFileTypes>() => route,\n }\n\n return route\n}\n\nexport type ServerRouteAddFileChildrenFn<\n in out TParentRoute extends AnyServerRouteWithTypes,\n in out TId extends RouteConstraints['TId'],\n in out TPath extends RouteConstraints['TPath'],\n in out TFullPath extends RouteConstraints['TFullPath'],\n in out TMiddlewares,\n in out TMethods,\n in out TChildren,\n> = (\n children: TChildren,\n) => ServerRouteWithTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods,\n TChildren\n>\n\nconst createMethodBuilder = <\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n>(\n __opts?: TODO,\n): ServerRouteMethodBuilder<TParentRoute, TFullPath, TMiddlewares> => {\n return {\n _options: __opts || {},\n _types: {} as TODO,\n middleware: (middlewares) =>\n createMethodBuilder({\n ...__opts,\n middlewares,\n }) as TODO,\n handler: (handler) =>\n createMethodBuilder({\n ...__opts,\n handler,\n }) as TODO,\n }\n}\n\nexport type CreateServerFileRoute<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TChildren,\n> = (\n options?: undefined,\n) => ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>\n\nexport type AnyServerRouteWithTypes = ServerRouteWithTypes<\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport interface ServerRouteWithTypes<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n TMethods,\n TChildren,\n> {\n _types: ServerRouteTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods\n >\n path: TPath\n id: TId\n fullPath: TFullPath\n to: TrimPathRight<TFullPath>\n parentRoute: TParentRoute\n children?: TChildren\n options: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, TMiddlewares>\n update: (\n opts: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, undefined>,\n ) => ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>\n init: (opts: { originalIndex: number }) => void\n _addFileChildren: ServerRouteAddFileChildrenFn<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods,\n TChildren\n >\n _addFileTypes: () => ServerRouteWithTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods,\n TChildren\n >\n}\n\nexport interface ServerRouteTypes<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n TMethods,\n> {\n id: TId\n path: TPath\n fullPath: TFullPath\n middlewares: TMiddlewares\n methods: TMethods\n parentRoute: TParentRoute\n allContext: ResolveAllServerContext<TParentRoute, TMiddlewares>\n}\n\nexport type ResolveAllServerContext<\n TParentRoute extends AnyServerRouteWithTypes,\n TMiddlewares,\n> = unknown extends TParentRoute\n ? AssignAllServerContext<TMiddlewares>\n : Assign<\n TParentRoute['_types']['allContext'],\n AssignAllServerContext<TMiddlewares>\n >\n\nexport type AnyServerRoute = AnyServerRouteWithTypes\n\nexport interface ServerRoute<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TChildren,\n> extends ServerRouteWithTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n undefined,\n undefined,\n TChildren\n >,\n ServerRouteMiddleware<TParentRoute, TId, TPath, TFullPath, TChildren>,\n ServerRouteMethods<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n undefined,\n TChildren\n > {}\n\nexport interface ServerRouteMiddleware<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TChildren,\n> {\n middleware: <const TNewMiddleware>(\n middleware: Constrain<TNewMiddleware, ReadonlyArray<AnyRequestMiddleware>>,\n ) => ServerRouteAfterMiddleware<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TNewMiddleware,\n TChildren\n >\n}\n\nexport interface ServerRouteAfterMiddleware<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n TChildren,\n> extends ServerRouteWithTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n undefined,\n TChildren\n >,\n ServerRouteMethods<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TChildren\n > {}\n\nexport interface ServerRouteMethods<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n TChildren,\n> {\n methods: <const TMethods>(\n methodsOrGetMethods: Constrain<\n TMethods,\n ServerRouteMethodsOptions<TParentRoute, TFullPath, TMiddlewares>\n >,\n ) => ServerRouteAfterMethods<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods,\n TChildren\n >\n}\n\nexport type ServerRouteMethodsOptions<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n> =\n | ServerRouteMethodsRecord<TParentRoute, TFullPath, TMiddlewares>\n | ((\n api: ServerRouteMethodBuilder<TParentRoute, TFullPath, TMiddlewares>,\n ) => ServerRouteMethodsRecord<TParentRoute, TFullPath, TMiddlewares>)\n\nexport interface ServerRouteMethodsRecord<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n> {\n GET?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n POST?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n PUT?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n PATCH?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n DELETE?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n OPTIONS?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n HEAD?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>\n}\n\nexport type ServerRouteMethodRecordValue<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n> =\n | ServerRouteMethodHandlerFn<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n undefined,\n any\n >\n | AnyRouteMethodsBuilder\n\nexport type ServerRouteVerb = (typeof ServerRouteVerbs)[number]\n\nexport const ServerRouteVerbs = [\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n] as const\n\nexport type ServerRouteMethodHandlerFn<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse,\n> = (\n ctx: ServerRouteMethodHandlerCtx<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares\n >,\n) => TResponse | Promise<TResponse>\n\nexport interface ServerRouteMethodHandlerCtx<\n in out TParentRoute extends AnyServerRouteWithTypes,\n in out TFullPath extends string,\n in out TMiddlewares,\n in out TMethodMiddlewares,\n> {\n context: Expand<\n AssignAllMethodContext<TParentRoute, TMiddlewares, TMethodMiddlewares>\n >\n request: Request\n params: ResolveParams<TFullPath>\n pathname: TFullPath\n}\n\nexport type MergeMethodMiddlewares<TMiddlewares, TMethodMiddlewares> =\n TMiddlewares extends ReadonlyArray<any>\n ? TMethodMiddlewares extends ReadonlyArray<any>\n ? readonly [...TMiddlewares, ...TMethodMiddlewares]\n : TMiddlewares\n : TMethodMiddlewares\n\nexport type AssignAllMethodContext<\n TParentRoute extends AnyServerRouteWithTypes,\n TMiddlewares,\n TMethodMiddlewares,\n> = ResolveAllServerContext<\n TParentRoute,\n MergeMethodMiddlewares<TMiddlewares, TMethodMiddlewares>\n>\n\nexport type AnyRouteMethodsBuilder = ServerRouteMethodBuilderWithTypes<\n any,\n any,\n any,\n any\n>\n\nexport interface ServerRouteMethodBuilder<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n> extends ServerRouteMethodBuilderWithTypes<\n TFullPath,\n TMiddlewares,\n undefined,\n undefined\n >,\n ServerRouteMethodBuilderMiddleware<TParentRoute, TFullPath, TMiddlewares>,\n ServerRouteMethodBuilderHandler<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n undefined\n > {}\n\nexport interface ServerRouteMethodBuilderWithTypes<\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse,\n> {\n _options: TODO\n _types: ServerRouteMethodBuilderTypes<\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse\n >\n}\n\nexport interface ServerRouteMethodBuilderTypes<\n in out TFullPath extends string,\n in out TMiddlewares,\n in out TMethodMiddlewares,\n in out TResponse,\n> {\n middlewares: TMiddlewares\n methodMiddleware: TMethodMiddlewares\n fullPath: TFullPath\n response: TResponse\n}\n\nexport interface ServerRouteMethodBuilderMiddleware<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n> {\n middleware: <const TNewMethodMiddlewares>(\n middleware: Constrain<\n TNewMethodMiddlewares,\n ReadonlyArray<AnyRequestMiddleware>\n >,\n ) => ServerRouteMethodBuilderAfterMiddleware<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TNewMethodMiddlewares\n >\n}\n\nexport interface ServerRouteMethodBuilderAfterMiddleware<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n> extends ServerRouteMethodBuilderWithTypes<\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n undefined\n >,\n ServerRouteMethodBuilderHandler<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares\n > {}\n\nexport interface ServerRouteMethodBuilderHandler<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n> {\n handler: <TResponse>(\n handler: ServerRouteMethodHandlerFn<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse\n >,\n ) => ServerRouteMethodBuilderAfterHandler<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse\n >\n}\n\nexport interface ServerRouteMethodBuilderAfterHandler<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse,\n> extends ServerRouteMethodBuilderWithTypes<\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n TResponse\n > {\n opts: ServerRouteMethod<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares\n >\n}\n\nexport interface ServerRouteMethod<\n TParentRoute extends AnyServerRouteWithTypes,\n TFullPath extends string,\n TMiddlewares,\n TMethodMiddlewares,\n> {\n middleware?: Constrain<TMiddlewares, Array<AnyRequestMiddleware>>\n handler?: ServerRouteMethodHandlerFn<\n TParentRoute,\n TFullPath,\n TMiddlewares,\n TMethodMiddlewares,\n undefined\n >\n}\n\nexport interface ServerRouteAfterMethods<\n TParentRoute extends AnyServerRouteWithTypes,\n TId extends RouteConstraints['TId'],\n TPath extends RouteConstraints['TPath'],\n TFullPath extends RouteConstraints['TFullPath'],\n TMiddlewares,\n TMethods,\n TChildren,\n> extends ServerRouteWithTypes<\n TParentRoute,\n TId,\n TPath,\n TFullPath,\n TMiddlewares,\n TMethods,\n TChildren\n > {\n options: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, TMiddlewares>\n}\n"],"names":["rootRouteId","trimPathLeft","joinPaths"],"mappings":";;;AAgBO,SAAS,sBAMd,IAAyE;AAClE,SAAA,kBAEP;AACF;AA2BgB,SAAA,kBAOd,IACA,QAG6D;AACvD,QAAA,UAAU,UAAU,CAAC;AAE3B,QAAM,QAAqE;AAAA,IACzE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,IAAI;AAAA,IACJ;AAAA,IACA,aAAa;AAAA,IACb,QAAQ,CAAC;AAAA;AAAA,IAET,YAAY,CAAC,gBACX,kBAAkB,QAAW;AAAA,MAC3B,GAAG;AAAA,MACH,YAAY;AAAA,IAAA,CACb;AAAA,IACH,SAAS,CAAC,wBAA8B;AACtC,YAAM,WAAW,MAAM;AACjB,YAAA,OAAO,wBAAwB,YAAY;AACtC,iBAAA,oBAAoB,qBAAqB;AAAA,QAAA;AAG3C,eAAA;AAAA,MAAA,GACN;AAEH,aAAO,kBAAkB,QAAW;AAAA,QAClC,GAAG;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IACH;AAAA,IACA,QAAQ,CAAC,SACP,kBAAkB,QAAW;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,CACJ;AAAA,IACH,MAAM,CAAC,SAA0C;;AAC/C,cAAQ,gBAAgB,KAAK;AAE7B,YAAM,SAAS,CAAC,QAAQ,QAAQ,CAAC,QAAQ;AAEnC,YAAA,eAAc,aAAQ,mBAAR;AAEpB,UAAI,QAAQ;AACV,cAAM,OAAOA,WAAA;AAAA,MAAA,WACJ,CAAE,MAAM,aAAqB;AACtC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MAAA;AAGE,UAAA,OAA2B,SAASA,WAAA,cAAc,QAAQ;AAG1D,UAAA,QAAQ,SAAS,KAAK;AACxB,eAAOC,wBAAa,IAAI;AAAA,MAAA;AAGpB,YAAA,WAAW,QAAQ,MAAM;AAG3B,UAAA,KAAK,SACLD,WAAA,cACAE,qBAAU;AAAA,QACR,MAAM,YAAY,OAAOF,WAAAA,cAAc,KAAK,MAAM,YAAY;AAAA,QAC9D;AAAA,MAAA,CACD;AAEL,UAAI,SAASA,WAAAA,aAAa;AACjB,eAAA;AAAA,MAAA;AAGT,UAAI,OAAOA,WAAAA,aAAa;AACtB,aAAKE,WAAU,UAAA,CAAC,KAAK,EAAE,CAAC;AAAA,MAAA;AAGpB,YAAA,WACJ,OAAOF,WAAA,cAAc,MAAME,WAAAA,UAAU,CAAC,MAAM,YAAY,UAAU,IAAI,CAAC;AAEzE,YAAM,OAAO;AACb,YAAM,KAAK;AACX,YAAM,WAAW;AACjB,YAAM,KAAK;AAAA,IACb;AAAA,IAEA,kBAAkB,CAAC,aAAa;AAC1B,UAAA,MAAM,QAAQ,QAAQ,GAAG;AAC3B,cAAM,WAAW;AAAA,MAAA;AAGnB,UAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AAC/C,cAAA,WAAW,OAAO,OAAO,QAAQ;AAAA,MAAA;AAGlC,aAAA;AAAA,IACT;AAAA,IAEA,eAAe,MAAkB;AAAA,EACnC;AAEO,SAAA;AACT;AAsBA,MAAM,sBAAsB,CAK1B,WACoE;AAC7D,SAAA;AAAA,IACL,UAAU,UAAU,CAAC;AAAA,IACrB,QAAQ,CAAC;AAAA,IACT,YAAY,CAAC,gBACX,oBAAoB;AAAA,MAClB,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAAA,IACH,SAAS,CAAC,YACR,oBAAoB;AAAA,MAClB,GAAG;AAAA,MACH;AAAA,IACD,CAAA;AAAA,EACL;AACF;;;"}