@tanstack/start-server-core 1.114.5

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 (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/dist/cjs/createRequestHandler.cjs +52 -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 +56 -0
  7. package/dist/cjs/createStartHandler.cjs.map +1 -0
  8. package/dist/cjs/createStartHandler.d.cts +8 -0
  9. package/dist/cjs/h3.cjs +398 -0
  10. package/dist/cjs/h3.cjs.map +1 -0
  11. package/dist/cjs/h3.d.cts +105 -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 +10 -0
  15. package/dist/cjs/index.cjs +239 -0
  16. package/dist/cjs/index.cjs.map +1 -0
  17. package/dist/cjs/index.d.cts +6 -0
  18. package/dist/cjs/ssr-server.cjs +246 -0
  19. package/dist/cjs/ssr-server.cjs.map +1 -0
  20. package/dist/cjs/ssr-server.d.cts +29 -0
  21. package/dist/cjs/transformStreamWithRouter.cjs +183 -0
  22. package/dist/cjs/transformStreamWithRouter.cjs.map +1 -0
  23. package/dist/cjs/transformStreamWithRouter.d.cts +6 -0
  24. package/dist/cjs/tsrScript.cjs +4 -0
  25. package/dist/cjs/tsrScript.cjs.map +1 -0
  26. package/dist/cjs/tsrScript.d.cts +1 -0
  27. package/dist/esm/createRequestHandler.d.ts +8 -0
  28. package/dist/esm/createRequestHandler.js +52 -0
  29. package/dist/esm/createRequestHandler.js.map +1 -0
  30. package/dist/esm/createStartHandler.d.ts +8 -0
  31. package/dist/esm/createStartHandler.js +56 -0
  32. package/dist/esm/createStartHandler.js.map +1 -0
  33. package/dist/esm/h3.d.ts +105 -0
  34. package/dist/esm/h3.js +285 -0
  35. package/dist/esm/h3.js.map +1 -0
  36. package/dist/esm/handlerCallback.d.ts +10 -0
  37. package/dist/esm/handlerCallback.js +7 -0
  38. package/dist/esm/handlerCallback.js.map +1 -0
  39. package/dist/esm/index.d.ts +6 -0
  40. package/dist/esm/index.js +125 -0
  41. package/dist/esm/index.js.map +1 -0
  42. package/dist/esm/ssr-server.d.ts +29 -0
  43. package/dist/esm/ssr-server.js +246 -0
  44. package/dist/esm/ssr-server.js.map +1 -0
  45. package/dist/esm/transformStreamWithRouter.d.ts +6 -0
  46. package/dist/esm/transformStreamWithRouter.js +183 -0
  47. package/dist/esm/transformStreamWithRouter.js.map +1 -0
  48. package/dist/esm/tsrScript.d.ts +1 -0
  49. package/dist/esm/tsrScript.js +5 -0
  50. package/dist/esm/tsrScript.js.map +1 -0
  51. package/package.json +65 -0
  52. package/src/createRequestHandler.ts +75 -0
  53. package/src/createStartHandler.ts +82 -0
  54. package/src/h3.ts +499 -0
  55. package/src/handlerCallback.ts +22 -0
  56. package/src/index.tsx +12 -0
  57. package/src/ssr-server.ts +350 -0
  58. package/src/transformStreamWithRouter.ts +258 -0
  59. package/src/tsrScript.ts +91 -0
  60. package/src/vite-env.d.ts +4 -0
@@ -0,0 +1,82 @@
1
+ import { createMemoryHistory } from '@tanstack/history'
2
+ import { mergeHeaders } from '@tanstack/start-client-core'
3
+ import { eventHandler, getResponseHeaders, toWebRequest } from 'h3'
4
+ import { attachRouterServerSsrUtils, dehydrateRouter } from './ssr-server'
5
+ import type { HandlerCallback } from './handlerCallback'
6
+ import type { EventHandlerResponse, H3Event } from 'h3'
7
+ import type { AnyRouter, Manifest } from '@tanstack/router-core'
8
+
9
+ export type CustomizeStartHandler<
10
+ TRouter extends AnyRouter,
11
+ TResponse extends EventHandlerResponse = EventHandlerResponse,
12
+ > = (cb: HandlerCallback<TRouter, TResponse>) => ReturnType<typeof eventHandler>
13
+
14
+ export function createStartHandler<
15
+ TRouter extends AnyRouter,
16
+ TResponse extends EventHandlerResponse = EventHandlerResponse,
17
+ >({
18
+ createRouter,
19
+ getRouterManifest,
20
+ }: {
21
+ createRouter: () => TRouter
22
+ getRouterManifest?: () => Manifest | Promise<Manifest>
23
+ }): CustomizeStartHandler<TRouter, TResponse> {
24
+ return (cb) => {
25
+ return eventHandler(async (event) => {
26
+ const request = toWebRequest(event)
27
+
28
+ const url = new URL(request.url)
29
+ const href = url.href.replace(url.origin, '')
30
+
31
+ // Create a history for the router
32
+ const history = createMemoryHistory({
33
+ initialEntries: [href],
34
+ })
35
+
36
+ const router = createRouter()
37
+
38
+ attachRouterServerSsrUtils(router, await getRouterManifest?.())
39
+
40
+ // Update the router with the history and context
41
+ router.update({
42
+ history,
43
+ })
44
+
45
+ await router.load()
46
+
47
+ dehydrateRouter(router)
48
+
49
+ const responseHeaders = getStartResponseHeaders({ event, router })
50
+ const response = await cb({
51
+ request,
52
+ router,
53
+ responseHeaders,
54
+ })
55
+
56
+ return response
57
+ })
58
+ }
59
+ }
60
+
61
+ function getStartResponseHeaders(opts: { event: H3Event; router: AnyRouter }) {
62
+ let headers = mergeHeaders(
63
+ getResponseHeaders(opts.event),
64
+ (opts.event as any).___ssrRpcResponseHeaders,
65
+ {
66
+ 'Content-Type': 'text/html; charset=UTF-8',
67
+ },
68
+ ...opts.router.state.matches.map((match) => {
69
+ return match.headers
70
+ }),
71
+ )
72
+
73
+ // Handle Redirects
74
+ const { redirect } = opts.router.state
75
+
76
+ if (redirect) {
77
+ headers = mergeHeaders(headers, redirect.headers, {
78
+ Location: redirect.href,
79
+ })
80
+ }
81
+ return headers
82
+ }
package/src/h3.ts ADDED
@@ -0,0 +1,499 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks'
2
+ import {
3
+ H3Event,
4
+ appendCorsHeaders as _appendCorsHeaders,
5
+ appendCorsPreflightHeaders as _appendCorsPreflightHeaders,
6
+ appendHeader as _appendHeader,
7
+ appendHeaders as _appendHeaders,
8
+ appendResponseHeader as _appendResponseHeader,
9
+ appendResponseHeaders as _appendResponseHeaders,
10
+ assertMethod as _assertMethod,
11
+ clearResponseHeaders as _clearResponseHeaders,
12
+ clearSession as _clearSession,
13
+ defaultContentType as _defaultContentType,
14
+ deleteCookie as _deleteCookie,
15
+ fetchWithEvent as _fetchWithEvent,
16
+ getCookie as _getCookie,
17
+ getHeader as _getHeader,
18
+ getHeaders as _getHeaders,
19
+ getProxyRequestHeaders as _getProxyRequestHeaders,
20
+ getQuery as _getQuery,
21
+ getRequestFingerprint as _getRequestFingerprint,
22
+ getRequestHeader as _getRequestHeader,
23
+ getRequestHeaders as _getRequestHeaders,
24
+ getRequestHost as _getRequestHost,
25
+ getRequestIP as _getRequestIP,
26
+ getRequestProtocol as _getRequestProtocol,
27
+ getRequestURL as _getRequestURL,
28
+ getRequestWebStream as _getRequestWebStream,
29
+ getResponseHeader as _getResponseHeader,
30
+ getResponseHeaders as _getResponseHeaders,
31
+ getResponseStatus as _getResponseStatus,
32
+ getResponseStatusText as _getResponseStatusText,
33
+ getRouterParam as _getRouterParam,
34
+ getRouterParams as _getRouterParams,
35
+ getSession as _getSession,
36
+ getValidatedQuery as _getValidatedQuery,
37
+ getValidatedRouterParams as _getValidatedRouterParams,
38
+ handleCacheHeaders as _handleCacheHeaders,
39
+ handleCors as _handleCors,
40
+ isMethod as _isMethod,
41
+ isPreflightRequest as _isPreflightRequest,
42
+ parseCookies as _parseCookies,
43
+ proxyRequest as _proxyRequest,
44
+ readBody as _readBody,
45
+ readFormData as _readFormData,
46
+ readMultipartFormData as _readMultipartFormData,
47
+ readRawBody as _readRawBody,
48
+ readValidatedBody as _readValidatedBody,
49
+ removeResponseHeader as _removeResponseHeader,
50
+ sealSession as _sealSession,
51
+ send as _send,
52
+ sendError as _sendError,
53
+ sendNoContent as _sendNoContent,
54
+ sendProxy as _sendProxy,
55
+ sendRedirect as _sendRedirect,
56
+ sendStream as _sendStream,
57
+ sendWebResponse as _sendWebResponse,
58
+ setCookie as _setCookie,
59
+ setHeader as _setHeader,
60
+ setHeaders as _setHeaders,
61
+ setResponseHeader as _setResponseHeader,
62
+ setResponseHeaders as _setResponseHeaders,
63
+ setResponseStatus as _setResponseStatus,
64
+ unsealSession as _unsealSession,
65
+ updateSession as _updateSession,
66
+ useSession as _useSession,
67
+ writeEarlyHints as _writeEarlyHints,
68
+ } from 'h3'
69
+ import { getContext as getUnctxContext } from 'unctx'
70
+ import type {
71
+ Encoding,
72
+ HTTPHeaderName,
73
+ InferEventInput,
74
+ _RequestMiddleware,
75
+ _ResponseMiddleware,
76
+ } from 'h3'
77
+
78
+ function _setContext(event: H3Event, key: string, value: any) {
79
+ event.context[key] = value
80
+ }
81
+
82
+ function _getContext(event: H3Event, key: string) {
83
+ return event.context[key]
84
+ }
85
+
86
+ export function defineMiddleware(options: {
87
+ onRequest?: _RequestMiddleware | Array<_RequestMiddleware>
88
+ onBeforeResponse?: _ResponseMiddleware | Array<_ResponseMiddleware>
89
+ }) {
90
+ return options
91
+ }
92
+
93
+ function toWebRequestH3(event: H3Event) {
94
+ /**
95
+ * @type {ReadableStream | undefined}
96
+ */
97
+ let readableStream: ReadableStream | undefined
98
+
99
+ const url = getRequestURL(event)
100
+ const base = {
101
+ // @ts-ignore Undici option
102
+ duplex: 'half',
103
+ method: event.method,
104
+ headers: event.headers,
105
+ }
106
+
107
+ if ((event.node.req as any).body instanceof ArrayBuffer) {
108
+ return new Request(url, {
109
+ ...base,
110
+ body: (event.node.req as any).body,
111
+ })
112
+ }
113
+
114
+ return new Request(url, {
115
+ ...base,
116
+ get body() {
117
+ if (readableStream) {
118
+ return readableStream
119
+ }
120
+ readableStream = getRequestWebStream(event)
121
+ return readableStream
122
+ },
123
+ })
124
+ }
125
+
126
+ export function toWebRequest(event: H3Event) {
127
+ event.web ??= {
128
+ request: toWebRequestH3(event),
129
+ url: getRequestURL(event),
130
+ }
131
+ return event.web.request
132
+ }
133
+
134
+ export {
135
+ H3Error,
136
+ H3Event,
137
+ MIMES,
138
+ callNodeListener,
139
+ createApp,
140
+ createAppEventHandler,
141
+ createEvent,
142
+ createRouter,
143
+ defineEventHandler,
144
+ defineLazyEventHandler,
145
+ defineNodeListener,
146
+ defineNodeMiddleware,
147
+ defineRequestMiddleware,
148
+ defineResponseMiddleware,
149
+ dynamicEventHandler,
150
+ defineWebSocket,
151
+ eventHandler,
152
+ splitCookiesString,
153
+ fromNodeMiddleware,
154
+ fromPlainHandler,
155
+ fromWebHandler,
156
+ isError,
157
+ isEventHandler,
158
+ isWebResponse,
159
+ lazyEventHandler,
160
+ promisifyNodeListener,
161
+ serveStatic,
162
+ toEventHandler,
163
+ toNodeListener,
164
+ toPlainHandler,
165
+ toWebHandler,
166
+ isCorsOriginAllowed,
167
+ isStream,
168
+ createError,
169
+ sanitizeStatusCode,
170
+ sanitizeStatusMessage,
171
+ useBase,
172
+ type AddRouteShortcuts,
173
+ type App,
174
+ type AppOptions,
175
+ type AppUse,
176
+ type CacheConditions,
177
+ type CreateRouterOptions,
178
+ type Duplex,
179
+ type DynamicEventHandler,
180
+ type Encoding,
181
+ type EventHandler,
182
+ type EventHandlerObject,
183
+ type EventHandlerRequest,
184
+ type EventHandlerResponse,
185
+ type H3CorsOptions,
186
+ type H3EventContext,
187
+ type HTTPHeaderName,
188
+ type HTTPMethod,
189
+ type InferEventInput,
190
+ type InputLayer,
191
+ type InputStack,
192
+ type Layer,
193
+ type LazyEventHandler,
194
+ type Matcher,
195
+ type MultiPartData,
196
+ type NodeEventContext,
197
+ type NodeListener,
198
+ type NodeMiddleware,
199
+ type NodePromisifiedHandler,
200
+ type PlainHandler,
201
+ type PlainRequest,
202
+ type PlainResponse,
203
+ type ProxyOptions,
204
+ type RequestFingerprintOptions,
205
+ type RequestHeaders,
206
+ type RouteNode,
207
+ type Router,
208
+ type RouterMethod,
209
+ type RouterUse,
210
+ type ServeStaticOptions,
211
+ type Session,
212
+ type SessionConfig,
213
+ type SessionData,
214
+ type Stack,
215
+ type StaticAssetMeta,
216
+ type ValidateFunction,
217
+ type ValidateResult,
218
+ type WebEventContext,
219
+ type WebHandler,
220
+ type _RequestMiddleware,
221
+ type _ResponseMiddleware,
222
+ } from 'h3'
223
+
224
+ function getHTTPEvent() {
225
+ return getEvent()
226
+ }
227
+
228
+ export const HTTPEventSymbol = Symbol('$HTTPEvent')
229
+
230
+ export function isEvent(
231
+ obj: any,
232
+ ): obj is H3Event | { [HTTPEventSymbol]: H3Event } {
233
+ return (
234
+ typeof obj === 'object' &&
235
+ (obj instanceof H3Event ||
236
+ obj?.[HTTPEventSymbol] instanceof H3Event ||
237
+ obj?.__is_event__ === true)
238
+ )
239
+ // Implement logic to check if obj is an H3Event
240
+ }
241
+
242
+ type Tail<T> = T extends [any, ...infer U] ? U : never
243
+
244
+ type PrependOverload<
245
+ TOriginal extends (...args: Array<any>) => any,
246
+ TOverload extends (...args: Array<any>) => any,
247
+ > = TOverload & TOriginal
248
+
249
+ // add an overload to the function without the event argument
250
+ type WrapFunction<TFn extends (...args: Array<any>) => any> = PrependOverload<
251
+ TFn,
252
+ (
253
+ ...args: Parameters<TFn> extends [H3Event, ...infer TArgs]
254
+ ? TArgs
255
+ : Parameters<TFn>
256
+ ) => ReturnType<TFn>
257
+ >
258
+
259
+ function createWrapperFunction<TFn extends (...args: Array<any>) => any>(
260
+ h3Function: TFn,
261
+ ): WrapFunction<TFn> {
262
+ return function (...args: Array<any>) {
263
+ const event = args[0]
264
+ if (!isEvent(event)) {
265
+ if (!(globalThis as any).app.config.server.experimental?.asyncContext) {
266
+ throw new Error(
267
+ 'AsyncLocalStorage was not enabled. Use the `server.experimental.asyncContext: true` option in your app configuration to enable it. Or, pass the instance of HTTPEvent that you have as the first argument to the function.',
268
+ )
269
+ }
270
+ args.unshift(getHTTPEvent())
271
+ } else {
272
+ args[0] =
273
+ event instanceof H3Event || (event as any).__is_event__
274
+ ? event
275
+ : event[HTTPEventSymbol]
276
+ }
277
+
278
+ return (h3Function as any)(...args)
279
+ } as any
280
+ }
281
+
282
+ // Creating wrappers for each utility and exporting them with their original names
283
+ type WrappedReadRawBody = <TEncoding extends Encoding = 'utf8'>(
284
+ ...args: Tail<Parameters<typeof _readRawBody<TEncoding>>>
285
+ ) => ReturnType<typeof _readRawBody<TEncoding>>
286
+ export const readRawBody: PrependOverload<
287
+ typeof _readRawBody,
288
+ WrappedReadRawBody
289
+ > = createWrapperFunction(_readRawBody)
290
+ type WrappedReadBody = <T, TEventInput = InferEventInput<'body', H3Event, T>>(
291
+ ...args: Tail<Parameters<typeof _readBody<T, H3Event, TEventInput>>>
292
+ ) => ReturnType<typeof _readBody<T, H3Event, TEventInput>>
293
+ export const readBody: PrependOverload<typeof _readBody, WrappedReadBody> =
294
+ createWrapperFunction(_readBody)
295
+ type WrappedGetQuery = <
296
+ T,
297
+ TEventInput = Exclude<InferEventInput<'query', H3Event, T>, undefined>,
298
+ >(
299
+ ...args: Tail<Parameters<typeof _getQuery<T, H3Event, TEventInput>>>
300
+ ) => ReturnType<typeof _getQuery<T, H3Event, TEventInput>>
301
+ export const getQuery: PrependOverload<typeof _getQuery, WrappedGetQuery> =
302
+ createWrapperFunction(_getQuery)
303
+ export const isMethod = createWrapperFunction(_isMethod)
304
+ export const isPreflightRequest = createWrapperFunction(_isPreflightRequest)
305
+ type WrappedGetValidatedQuery = <
306
+ T,
307
+ TEventInput = InferEventInput<'query', H3Event, T>,
308
+ >(
309
+ ...args: Tail<Parameters<typeof _getValidatedQuery<T, H3Event, TEventInput>>>
310
+ ) => ReturnType<typeof _getValidatedQuery<T, H3Event, TEventInput>>
311
+ export const getValidatedQuery: PrependOverload<
312
+ typeof _getValidatedQuery,
313
+ WrappedGetValidatedQuery
314
+ > = createWrapperFunction(_getValidatedQuery)
315
+ export const getRouterParams = createWrapperFunction(_getRouterParams)
316
+ export const getRouterParam = createWrapperFunction(_getRouterParam)
317
+ type WrappedGetValidatedRouterParams = <
318
+ T,
319
+ TEventInput = InferEventInput<'routerParams', H3Event, T>,
320
+ >(
321
+ ...args: Tail<
322
+ Parameters<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>
323
+ >
324
+ ) => ReturnType<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>
325
+ export const getValidatedRouterParams: PrependOverload<
326
+ typeof _getValidatedRouterParams,
327
+ WrappedGetValidatedRouterParams
328
+ > = createWrapperFunction(_getValidatedRouterParams)
329
+ export const assertMethod = createWrapperFunction(_assertMethod)
330
+ export const getRequestHeaders = createWrapperFunction(_getRequestHeaders)
331
+ export const getRequestHeader = createWrapperFunction(_getRequestHeader)
332
+ export const getRequestURL = createWrapperFunction(_getRequestURL)
333
+ export const getRequestHost = createWrapperFunction(_getRequestHost)
334
+ export const getRequestProtocol = createWrapperFunction(_getRequestProtocol)
335
+ export const getRequestIP = createWrapperFunction(_getRequestIP)
336
+ export const send = createWrapperFunction(_send)
337
+ export const sendNoContent = createWrapperFunction(_sendNoContent)
338
+ export const setResponseStatus = createWrapperFunction(_setResponseStatus)
339
+ export const getResponseStatus = createWrapperFunction(_getResponseStatus)
340
+ export const getResponseStatusText = createWrapperFunction(
341
+ _getResponseStatusText,
342
+ )
343
+ export const getResponseHeaders = createWrapperFunction(_getResponseHeaders)
344
+ export const getResponseHeader = createWrapperFunction(_getResponseHeader)
345
+ export const setResponseHeaders = createWrapperFunction(_setResponseHeaders)
346
+ type WrappedSetResponseHeader = <T extends HTTPHeaderName>(
347
+ ...args: Tail<Parameters<typeof _setResponseHeader<T>>>
348
+ ) => ReturnType<typeof _setResponseHeader<T>>
349
+ export const setResponseHeader: PrependOverload<
350
+ typeof _setResponseHeader,
351
+ WrappedSetResponseHeader
352
+ > = createWrapperFunction(_setResponseHeader)
353
+ export const appendResponseHeaders = createWrapperFunction(
354
+ _appendResponseHeaders,
355
+ )
356
+ type WrappedAppendResponseHeader = <T extends HTTPHeaderName>(
357
+ ...args: Tail<Parameters<typeof _appendResponseHeader<T>>>
358
+ ) => ReturnType<typeof _appendResponseHeader<T>>
359
+ export const appendResponseHeader: PrependOverload<
360
+ typeof _appendResponseHeader,
361
+ WrappedAppendResponseHeader
362
+ > = createWrapperFunction(_appendResponseHeader)
363
+ export const defaultContentType = createWrapperFunction(_defaultContentType)
364
+ export const sendRedirect = createWrapperFunction(_sendRedirect)
365
+ export const sendStream = createWrapperFunction(_sendStream)
366
+ export const writeEarlyHints = createWrapperFunction(_writeEarlyHints)
367
+ export const sendError = createWrapperFunction(_sendError)
368
+ export const sendProxy = createWrapperFunction(_sendProxy)
369
+ export const proxyRequest = createWrapperFunction(_proxyRequest)
370
+ type WrappedFetchWithEvent = <
371
+ T = unknown,
372
+ TResponse = any,
373
+ TFetch extends (req: RequestInfo | URL, opts?: any) => any = typeof fetch,
374
+ >(
375
+ ...args: Tail<Parameters<typeof _fetchWithEvent<T, TResponse, TFetch>>>
376
+ ) => ReturnType<typeof _fetchWithEvent<T, TResponse, TFetch>>
377
+ export const fetchWithEvent: PrependOverload<
378
+ typeof _fetchWithEvent,
379
+ WrappedFetchWithEvent
380
+ > = createWrapperFunction(_fetchWithEvent)
381
+ export const getProxyRequestHeaders = createWrapperFunction(
382
+ _getProxyRequestHeaders,
383
+ )
384
+
385
+ export const parseCookies = createWrapperFunction(_parseCookies)
386
+ export const getCookie = createWrapperFunction(_getCookie)
387
+ export const setCookie = createWrapperFunction(_setCookie)
388
+ export const deleteCookie = createWrapperFunction(_deleteCookie)
389
+ // not exported :(
390
+ type SessionDataT = Record<string, any>
391
+ type WrappedUseSession = <T extends SessionDataT>(
392
+ ...args: Tail<Parameters<typeof _useSession<T>>>
393
+ ) => ReturnType<typeof _useSession<T>>
394
+ // we need to `as` these because the WrapFunction doesn't work for them
395
+ // because they also accept CompatEvent instead of H3Event
396
+ export const useSession = createWrapperFunction(_useSession) as PrependOverload<
397
+ typeof _useSession,
398
+ WrappedUseSession
399
+ >
400
+ type WrappedGetSession = <T extends SessionDataT>(
401
+ ...args: Tail<Parameters<typeof _getSession<T>>>
402
+ ) => ReturnType<typeof _getSession<T>>
403
+ export const getSession = createWrapperFunction(_getSession) as PrependOverload<
404
+ typeof _getSession,
405
+ WrappedGetSession
406
+ >
407
+ type WrappedUpdateSession = <T extends SessionDataT>(
408
+ ...args: Tail<Parameters<typeof _updateSession<T>>>
409
+ ) => ReturnType<typeof _updateSession<T>>
410
+ export const updateSession: PrependOverload<
411
+ typeof _updateSession,
412
+ WrappedUpdateSession
413
+ > = createWrapperFunction(_updateSession)
414
+ type WrappedSealSession = <T extends SessionDataT>(
415
+ ...args: Tail<Parameters<typeof _sealSession<T>>>
416
+ ) => ReturnType<typeof _sealSession<T>>
417
+ export const sealSession = createWrapperFunction(
418
+ _sealSession,
419
+ ) as PrependOverload<typeof _sealSession, WrappedSealSession>
420
+ export const unsealSession = createWrapperFunction(_unsealSession)
421
+ export const clearSession = createWrapperFunction(_clearSession)
422
+ export const handleCacheHeaders = createWrapperFunction(_handleCacheHeaders)
423
+ export const handleCors = createWrapperFunction(_handleCors)
424
+ export const appendCorsHeaders = createWrapperFunction(_appendCorsHeaders)
425
+ export const appendCorsPreflightHeaders = createWrapperFunction(
426
+ _appendCorsPreflightHeaders,
427
+ )
428
+ export const sendWebResponse = createWrapperFunction(_sendWebResponse)
429
+ type WrappedAppendHeader = <T extends HTTPHeaderName>(
430
+ ...args: Tail<Parameters<typeof _appendHeader<T>>>
431
+ ) => ReturnType<typeof _appendHeader<T>>
432
+ export const appendHeader: PrependOverload<
433
+ typeof _appendHeader,
434
+ WrappedAppendHeader
435
+ > = createWrapperFunction(_appendHeader)
436
+ export const appendHeaders = createWrapperFunction(_appendHeaders)
437
+ type WrappedSetHeader = <T extends HTTPHeaderName>(
438
+ ...args: Tail<Parameters<typeof _setHeader<T>>>
439
+ ) => ReturnType<typeof _setHeader<T>>
440
+ export const setHeader: PrependOverload<typeof _setHeader, WrappedSetHeader> =
441
+ createWrapperFunction(_setHeader)
442
+ export const setHeaders = createWrapperFunction(_setHeaders)
443
+ export const getHeader = createWrapperFunction(_getHeader)
444
+ export const getHeaders = createWrapperFunction(_getHeaders)
445
+ export const getRequestFingerprint = createWrapperFunction(
446
+ _getRequestFingerprint,
447
+ )
448
+ export const getRequestWebStream = createWrapperFunction(_getRequestWebStream)
449
+ export const readFormData = createWrapperFunction(_readFormData)
450
+ export const readMultipartFormData = createWrapperFunction(
451
+ _readMultipartFormData,
452
+ )
453
+ type WrappedReadValidatedBody = <
454
+ T,
455
+ TEventInput = InferEventInput<'body', H3Event, T>,
456
+ >(
457
+ ...args: Tail<Parameters<typeof _readValidatedBody<T, H3Event, TEventInput>>>
458
+ ) => ReturnType<typeof _readValidatedBody<T, H3Event, TEventInput>>
459
+ export const readValidatedBody: PrependOverload<
460
+ typeof _readValidatedBody,
461
+ WrappedReadValidatedBody
462
+ > = createWrapperFunction(_readValidatedBody)
463
+ export const removeResponseHeader = createWrapperFunction(_removeResponseHeader)
464
+ export const getContext = createWrapperFunction(_getContext)
465
+ export const setContext = createWrapperFunction(_setContext)
466
+
467
+ export const clearResponseHeaders = createWrapperFunction(_clearResponseHeaders)
468
+
469
+ export const getWebRequest = createWrapperFunction(toWebRequest)
470
+
471
+ export { createApp as createServer } from 'h3'
472
+
473
+ function getNitroAsyncContext() {
474
+ const nitroAsyncContext = getUnctxContext('nitro-app', {
475
+ asyncContext: (globalThis as any).app.config.server.experimental
476
+ ?.asyncContext
477
+ ? true
478
+ : false,
479
+ AsyncLocalStorage,
480
+ })
481
+
482
+ return nitroAsyncContext
483
+ }
484
+
485
+ export function getEvent() {
486
+ const event = (getNitroAsyncContext().use() as any).event as
487
+ | H3Event
488
+ | undefined
489
+ if (!event) {
490
+ throw new Error(
491
+ `No HTTPEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`,
492
+ )
493
+ }
494
+ return event
495
+ }
496
+
497
+ export async function handleHTTPEvent(event: H3Event) {
498
+ return await (globalThis as any).$handle(event)
499
+ }
@@ -0,0 +1,22 @@
1
+ import type { EventHandlerResponse } from 'h3'
2
+ import type { AnyRouter } from '@tanstack/router-core'
3
+
4
+ export interface HandlerCallback<
5
+ TRouter extends AnyRouter,
6
+ TResponse extends EventHandlerResponse = EventHandlerResponse,
7
+ > {
8
+ (ctx: {
9
+ request: Request
10
+ router: TRouter
11
+ responseHeaders: Headers
12
+ }): TResponse
13
+ }
14
+
15
+ export function defineHandlerCallback<
16
+ TRouter extends AnyRouter,
17
+ TResponse = EventHandlerResponse,
18
+ >(
19
+ handler: HandlerCallback<TRouter, TResponse>,
20
+ ): HandlerCallback<TRouter, TResponse> {
21
+ return handler
22
+ }
package/src/index.tsx ADDED
@@ -0,0 +1,12 @@
1
+ export {
2
+ transformReadableStreamWithRouter,
3
+ transformPipeableStreamWithRouter,
4
+ } from './transformStreamWithRouter'
5
+
6
+ export { createStartHandler } from './createStartHandler'
7
+ export { createRequestHandler } from './createRequestHandler'
8
+
9
+ export { defineHandlerCallback } from './handlerCallback'
10
+ export type { HandlerCallback } from './handlerCallback'
11
+
12
+ export * from './h3'