@tanstack/start-server-core 1.120.5 → 1.121.0-alpha.3

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/README.md +6 -27
  2. package/dist/cjs/createRequestHandler.cjs +1 -3
  3. package/dist/cjs/createRequestHandler.cjs.map +1 -1
  4. package/dist/cjs/createStartHandler.cjs +265 -31
  5. package/dist/cjs/createStartHandler.cjs.map +1 -1
  6. package/dist/cjs/createStartHandler.d.cts +8 -6
  7. package/dist/cjs/h3.cjs +30 -73
  8. package/dist/cjs/h3.cjs.map +1 -1
  9. package/dist/cjs/h3.d.cts +11 -7
  10. package/dist/cjs/handlerCallback.cjs.map +1 -1
  11. package/dist/cjs/handlerCallback.d.cts +3 -4
  12. package/dist/cjs/index.cjs +17 -14
  13. package/dist/cjs/index.cjs.map +1 -1
  14. package/dist/cjs/index.d.cts +6 -1
  15. package/dist/cjs/router-manifest.cjs +44 -0
  16. package/dist/cjs/router-manifest.cjs.map +1 -0
  17. package/dist/cjs/router-manifest.d.cts +17 -0
  18. package/dist/cjs/server-functions-handler.cjs +145 -0
  19. package/dist/cjs/server-functions-handler.cjs.map +1 -0
  20. package/dist/cjs/server-functions-handler.d.cts +3 -0
  21. package/dist/cjs/serverRoute.cjs +100 -0
  22. package/dist/cjs/serverRoute.cjs.map +1 -0
  23. package/dist/cjs/serverRoute.d.cts +115 -0
  24. package/dist/cjs/ssr-server.cjs +3 -2
  25. package/dist/cjs/ssr-server.cjs.map +1 -1
  26. package/dist/esm/createRequestHandler.js +1 -3
  27. package/dist/esm/createRequestHandler.js.map +1 -1
  28. package/dist/esm/createStartHandler.d.ts +8 -6
  29. package/dist/esm/createStartHandler.js +245 -33
  30. package/dist/esm/createStartHandler.js.map +1 -1
  31. package/dist/esm/h3.d.ts +11 -7
  32. package/dist/esm/h3.js +26 -63
  33. package/dist/esm/h3.js.map +1 -1
  34. package/dist/esm/handlerCallback.d.ts +3 -4
  35. package/dist/esm/handlerCallback.js.map +1 -1
  36. package/dist/esm/index.d.ts +6 -1
  37. package/dist/esm/index.js +14 -5
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/router-manifest.d.ts +17 -0
  40. package/dist/esm/router-manifest.js +44 -0
  41. package/dist/esm/router-manifest.js.map +1 -0
  42. package/dist/esm/server-functions-handler.d.ts +3 -0
  43. package/dist/esm/server-functions-handler.js +145 -0
  44. package/dist/esm/server-functions-handler.js.map +1 -0
  45. package/dist/esm/serverRoute.d.ts +115 -0
  46. package/dist/esm/serverRoute.js +100 -0
  47. package/dist/esm/serverRoute.js.map +1 -0
  48. package/dist/esm/ssr-server.js +3 -2
  49. package/dist/esm/ssr-server.js.map +1 -1
  50. package/package.json +8 -6
  51. package/src/createRequestHandler.ts +1 -3
  52. package/src/createStartHandler.ts +373 -47
  53. package/src/h3.ts +71 -78
  54. package/src/handlerCallback.ts +5 -12
  55. package/src/index.tsx +11 -1
  56. package/src/router-manifest.ts +79 -0
  57. package/src/server-functions-handler.ts +260 -0
  58. package/src/serverRoute.ts +661 -0
  59. package/src/ssr-server.ts +2 -0
  60. package/src/tanstack-start.d.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"h3.js","sources":["../../src/h3.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n H3Event,\n appendCorsHeaders as _appendCorsHeaders,\n appendCorsPreflightHeaders as _appendCorsPreflightHeaders,\n appendHeader as _appendHeader,\n appendHeaders as _appendHeaders,\n appendResponseHeader as _appendResponseHeader,\n appendResponseHeaders as _appendResponseHeaders,\n assertMethod as _assertMethod,\n clearResponseHeaders as _clearResponseHeaders,\n clearSession as _clearSession,\n defaultContentType as _defaultContentType,\n deleteCookie as _deleteCookie,\n fetchWithEvent as _fetchWithEvent,\n getCookie as _getCookie,\n getHeader as _getHeader,\n getHeaders as _getHeaders,\n getProxyRequestHeaders as _getProxyRequestHeaders,\n getQuery as _getQuery,\n getRequestFingerprint as _getRequestFingerprint,\n getRequestHeader as _getRequestHeader,\n getRequestHeaders as _getRequestHeaders,\n getRequestHost as _getRequestHost,\n getRequestIP as _getRequestIP,\n getRequestProtocol as _getRequestProtocol,\n getRequestURL as _getRequestURL,\n getRequestWebStream as _getRequestWebStream,\n getResponseHeader as _getResponseHeader,\n getResponseHeaders as _getResponseHeaders,\n getResponseStatus as _getResponseStatus,\n getResponseStatusText as _getResponseStatusText,\n getRouterParam as _getRouterParam,\n getRouterParams as _getRouterParams,\n getSession as _getSession,\n getValidatedQuery as _getValidatedQuery,\n getValidatedRouterParams as _getValidatedRouterParams,\n handleCacheHeaders as _handleCacheHeaders,\n handleCors as _handleCors,\n isMethod as _isMethod,\n isPreflightRequest as _isPreflightRequest,\n parseCookies as _parseCookies,\n proxyRequest as _proxyRequest,\n readBody as _readBody,\n readFormData as _readFormData,\n readMultipartFormData as _readMultipartFormData,\n readRawBody as _readRawBody,\n readValidatedBody as _readValidatedBody,\n removeResponseHeader as _removeResponseHeader,\n sealSession as _sealSession,\n send as _send,\n sendError as _sendError,\n sendNoContent as _sendNoContent,\n sendProxy as _sendProxy,\n sendRedirect as _sendRedirect,\n sendStream as _sendStream,\n sendWebResponse as _sendWebResponse,\n setCookie as _setCookie,\n setHeader as _setHeader,\n setHeaders as _setHeaders,\n setResponseHeader as _setResponseHeader,\n setResponseHeaders as _setResponseHeaders,\n setResponseStatus as _setResponseStatus,\n unsealSession as _unsealSession,\n updateSession as _updateSession,\n useSession as _useSession,\n writeEarlyHints as _writeEarlyHints,\n} from 'h3'\nimport { getContext as getUnctxContext } from 'unctx'\nimport type {\n Encoding,\n HTTPHeaderName,\n InferEventInput,\n _RequestMiddleware,\n _ResponseMiddleware,\n} from 'h3'\n\nfunction _setContext(event: H3Event, key: string, value: any) {\n event.context[key] = value\n}\n\nfunction _getContext(event: H3Event, key: string) {\n return event.context[key]\n}\n\nexport function defineMiddleware(options: {\n onRequest?: _RequestMiddleware | Array<_RequestMiddleware>\n onBeforeResponse?: _ResponseMiddleware | Array<_ResponseMiddleware>\n}) {\n return options\n}\n\nfunction toWebRequestH3(event: H3Event) {\n /**\n * @type {ReadableStream | undefined}\n */\n let readableStream: ReadableStream | undefined\n\n const url = getRequestURL(event)\n const base = {\n // @ts-ignore Undici option\n duplex: 'half',\n method: event.method,\n headers: event.headers,\n }\n\n if ((event.node.req as any).body instanceof ArrayBuffer) {\n return new Request(url, {\n ...base,\n body: (event.node.req as any).body,\n })\n }\n\n return new Request(url, {\n ...base,\n get body() {\n if (readableStream) {\n return readableStream\n }\n readableStream = getRequestWebStream(event)\n return readableStream\n },\n })\n}\n\nexport function toWebRequest(event: H3Event) {\n event.web ??= {\n request: toWebRequestH3(event),\n url: getRequestURL(event),\n }\n return event.web.request\n}\n\nexport {\n H3Error,\n H3Event,\n MIMES,\n callNodeListener,\n createApp,\n createAppEventHandler,\n createEvent,\n createRouter,\n defineEventHandler,\n defineLazyEventHandler,\n defineNodeListener,\n defineNodeMiddleware,\n defineRequestMiddleware,\n defineResponseMiddleware,\n dynamicEventHandler,\n defineWebSocket,\n eventHandler,\n splitCookiesString,\n fromNodeMiddleware,\n fromPlainHandler,\n fromWebHandler,\n isError,\n isEventHandler,\n isWebResponse,\n lazyEventHandler,\n promisifyNodeListener,\n serveStatic,\n toEventHandler,\n toNodeListener,\n toPlainHandler,\n toWebHandler,\n isCorsOriginAllowed,\n isStream,\n createError,\n sanitizeStatusCode,\n sanitizeStatusMessage,\n useBase,\n type AddRouteShortcuts,\n type App,\n type AppOptions,\n type AppUse,\n type CacheConditions,\n type CreateRouterOptions,\n type Duplex,\n type DynamicEventHandler,\n type Encoding,\n type EventHandler,\n type EventHandlerObject,\n type EventHandlerRequest,\n type EventHandlerResponse,\n type H3CorsOptions,\n type H3EventContext,\n type HTTPHeaderName,\n type HTTPMethod,\n type InferEventInput,\n type InputLayer,\n type InputStack,\n type Layer,\n type LazyEventHandler,\n type Matcher,\n type MultiPartData,\n type NodeEventContext,\n type NodeListener,\n type NodeMiddleware,\n type NodePromisifiedHandler,\n type PlainHandler,\n type PlainRequest,\n type PlainResponse,\n type ProxyOptions,\n type RequestFingerprintOptions,\n type RequestHeaders,\n type RouteNode,\n type Router,\n type RouterMethod,\n type RouterUse,\n type ServeStaticOptions,\n type Session,\n type SessionConfig,\n type SessionData,\n type Stack,\n type StaticAssetMeta,\n type ValidateFunction,\n type ValidateResult,\n type WebEventContext,\n type WebHandler,\n type _RequestMiddleware,\n type _ResponseMiddleware,\n} from 'h3'\n\nfunction getHTTPEvent() {\n return getEvent()\n}\n\nexport const HTTPEventSymbol = Symbol('$HTTPEvent')\n\nexport function isEvent(\n obj: any,\n): obj is H3Event | { [HTTPEventSymbol]: H3Event } {\n return (\n typeof obj === 'object' &&\n (obj instanceof H3Event ||\n obj?.[HTTPEventSymbol] instanceof H3Event ||\n obj?.__is_event__ === true)\n )\n // Implement logic to check if obj is an H3Event\n}\n\ntype Tail<T> = T extends [any, ...infer U] ? U : never\n\ntype PrependOverload<\n TOriginal extends (...args: Array<any>) => any,\n TOverload extends (...args: Array<any>) => any,\n> = TOverload & TOriginal\n\n// add an overload to the function without the event argument\ntype WrapFunction<TFn extends (...args: Array<any>) => any> = PrependOverload<\n TFn,\n (\n ...args: Parameters<TFn> extends [H3Event, ...infer TArgs]\n ? TArgs\n : Parameters<TFn>\n ) => ReturnType<TFn>\n>\n\nfunction createWrapperFunction<TFn extends (...args: Array<any>) => any>(\n h3Function: TFn,\n): WrapFunction<TFn> {\n return function (...args: Array<any>) {\n const event = args[0]\n if (!isEvent(event)) {\n if (!(globalThis as any).app.config.server.experimental?.asyncContext) {\n throw new Error(\n '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.',\n )\n }\n args.unshift(getHTTPEvent())\n } else {\n args[0] =\n event instanceof H3Event || (event as any).__is_event__\n ? event\n : event[HTTPEventSymbol]\n }\n\n return (h3Function as any)(...args)\n } as any\n}\n\n// Creating wrappers for each utility and exporting them with their original names\ntype WrappedReadRawBody = <TEncoding extends Encoding = 'utf8'>(\n ...args: Tail<Parameters<typeof _readRawBody<TEncoding>>>\n) => ReturnType<typeof _readRawBody<TEncoding>>\nexport const readRawBody: PrependOverload<\n typeof _readRawBody,\n WrappedReadRawBody\n> = createWrapperFunction(_readRawBody)\ntype WrappedReadBody = <T, TEventInput = InferEventInput<'body', H3Event, T>>(\n ...args: Tail<Parameters<typeof _readBody<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _readBody<T, H3Event, TEventInput>>\nexport const readBody: PrependOverload<typeof _readBody, WrappedReadBody> =\n createWrapperFunction(_readBody)\ntype WrappedGetQuery = <\n T,\n TEventInput = Exclude<InferEventInput<'query', H3Event, T>, undefined>,\n>(\n ...args: Tail<Parameters<typeof _getQuery<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _getQuery<T, H3Event, TEventInput>>\nexport const getQuery: PrependOverload<typeof _getQuery, WrappedGetQuery> =\n createWrapperFunction(_getQuery)\nexport const isMethod = createWrapperFunction(_isMethod)\nexport const isPreflightRequest = createWrapperFunction(_isPreflightRequest)\ntype WrappedGetValidatedQuery = <\n T,\n TEventInput = InferEventInput<'query', H3Event, T>,\n>(\n ...args: Tail<Parameters<typeof _getValidatedQuery<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _getValidatedQuery<T, H3Event, TEventInput>>\nexport const getValidatedQuery: PrependOverload<\n typeof _getValidatedQuery,\n WrappedGetValidatedQuery\n> = createWrapperFunction(_getValidatedQuery)\nexport const getRouterParams = createWrapperFunction(_getRouterParams)\nexport const getRouterParam = createWrapperFunction(_getRouterParam)\ntype WrappedGetValidatedRouterParams = <\n T,\n TEventInput = InferEventInput<'routerParams', H3Event, T>,\n>(\n ...args: Tail<\n Parameters<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>\n >\n) => ReturnType<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>\nexport const getValidatedRouterParams: PrependOverload<\n typeof _getValidatedRouterParams,\n WrappedGetValidatedRouterParams\n> = createWrapperFunction(_getValidatedRouterParams)\nexport const assertMethod = createWrapperFunction(_assertMethod)\nexport const getRequestHeaders = createWrapperFunction(_getRequestHeaders)\nexport const getRequestHeader = createWrapperFunction(_getRequestHeader)\nexport const getRequestURL = createWrapperFunction(_getRequestURL)\nexport const getRequestHost = createWrapperFunction(_getRequestHost)\nexport const getRequestProtocol = createWrapperFunction(_getRequestProtocol)\nexport const getRequestIP = createWrapperFunction(_getRequestIP)\nexport const send = createWrapperFunction(_send)\nexport const sendNoContent = createWrapperFunction(_sendNoContent)\nexport const setResponseStatus = createWrapperFunction(_setResponseStatus)\nexport const getResponseStatus = createWrapperFunction(_getResponseStatus)\nexport const getResponseStatusText = createWrapperFunction(\n _getResponseStatusText,\n)\nexport const getResponseHeaders = createWrapperFunction(_getResponseHeaders)\nexport const getResponseHeader = createWrapperFunction(_getResponseHeader)\nexport const setResponseHeaders = createWrapperFunction(_setResponseHeaders)\ntype WrappedSetResponseHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _setResponseHeader<T>>>\n) => ReturnType<typeof _setResponseHeader<T>>\nexport const setResponseHeader: PrependOverload<\n typeof _setResponseHeader,\n WrappedSetResponseHeader\n> = createWrapperFunction(_setResponseHeader)\nexport const appendResponseHeaders = createWrapperFunction(\n _appendResponseHeaders,\n)\ntype WrappedAppendResponseHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _appendResponseHeader<T>>>\n) => ReturnType<typeof _appendResponseHeader<T>>\nexport const appendResponseHeader: PrependOverload<\n typeof _appendResponseHeader,\n WrappedAppendResponseHeader\n> = createWrapperFunction(_appendResponseHeader)\nexport const defaultContentType = createWrapperFunction(_defaultContentType)\nexport const sendRedirect = createWrapperFunction(_sendRedirect)\nexport const sendStream = createWrapperFunction(_sendStream)\nexport const writeEarlyHints = createWrapperFunction(_writeEarlyHints)\nexport const sendError = createWrapperFunction(_sendError)\nexport const sendProxy = createWrapperFunction(_sendProxy)\nexport const proxyRequest = createWrapperFunction(_proxyRequest)\ntype WrappedFetchWithEvent = <\n T = unknown,\n TResponse = any,\n TFetch extends (req: RequestInfo | URL, opts?: any) => any = typeof fetch,\n>(\n ...args: Tail<Parameters<typeof _fetchWithEvent<T, TResponse, TFetch>>>\n) => ReturnType<typeof _fetchWithEvent<T, TResponse, TFetch>>\nexport const fetchWithEvent: PrependOverload<\n typeof _fetchWithEvent,\n WrappedFetchWithEvent\n> = createWrapperFunction(_fetchWithEvent)\nexport const getProxyRequestHeaders = createWrapperFunction(\n _getProxyRequestHeaders,\n)\n\nexport const parseCookies = createWrapperFunction(_parseCookies)\nexport const getCookie = createWrapperFunction(_getCookie)\nexport const setCookie = createWrapperFunction(_setCookie)\nexport const deleteCookie = createWrapperFunction(_deleteCookie)\n// not exported :(\ntype SessionDataT = Record<string, any>\ntype WrappedUseSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _useSession<T>>>\n) => ReturnType<typeof _useSession<T>>\n// we need to `as` these because the WrapFunction doesn't work for them\n// because they also accept CompatEvent instead of H3Event\nexport const useSession = createWrapperFunction(_useSession) as PrependOverload<\n typeof _useSession,\n WrappedUseSession\n>\ntype WrappedGetSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _getSession<T>>>\n) => ReturnType<typeof _getSession<T>>\nexport const getSession = createWrapperFunction(_getSession) as PrependOverload<\n typeof _getSession,\n WrappedGetSession\n>\ntype WrappedUpdateSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _updateSession<T>>>\n) => ReturnType<typeof _updateSession<T>>\nexport const updateSession: PrependOverload<\n typeof _updateSession,\n WrappedUpdateSession\n> = createWrapperFunction(_updateSession)\ntype WrappedSealSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _sealSession<T>>>\n) => ReturnType<typeof _sealSession<T>>\nexport const sealSession = createWrapperFunction(\n _sealSession,\n) as PrependOverload<typeof _sealSession, WrappedSealSession>\nexport const unsealSession = createWrapperFunction(_unsealSession)\nexport const clearSession = createWrapperFunction(_clearSession)\nexport const handleCacheHeaders = createWrapperFunction(_handleCacheHeaders)\nexport const handleCors = createWrapperFunction(_handleCors)\nexport const appendCorsHeaders = createWrapperFunction(_appendCorsHeaders)\nexport const appendCorsPreflightHeaders = createWrapperFunction(\n _appendCorsPreflightHeaders,\n)\nexport const sendWebResponse = createWrapperFunction(_sendWebResponse)\ntype WrappedAppendHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _appendHeader<T>>>\n) => ReturnType<typeof _appendHeader<T>>\nexport const appendHeader: PrependOverload<\n typeof _appendHeader,\n WrappedAppendHeader\n> = createWrapperFunction(_appendHeader)\nexport const appendHeaders = createWrapperFunction(_appendHeaders)\ntype WrappedSetHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _setHeader<T>>>\n) => ReturnType<typeof _setHeader<T>>\nexport const setHeader: PrependOverload<typeof _setHeader, WrappedSetHeader> =\n createWrapperFunction(_setHeader)\nexport const setHeaders = createWrapperFunction(_setHeaders)\nexport const getHeader = createWrapperFunction(_getHeader)\nexport const getHeaders = createWrapperFunction(_getHeaders)\nexport const getRequestFingerprint = createWrapperFunction(\n _getRequestFingerprint,\n)\nexport const getRequestWebStream = createWrapperFunction(_getRequestWebStream)\nexport const readFormData = createWrapperFunction(_readFormData)\nexport const readMultipartFormData = createWrapperFunction(\n _readMultipartFormData,\n)\ntype WrappedReadValidatedBody = <\n T,\n TEventInput = InferEventInput<'body', H3Event, T>,\n>(\n ...args: Tail<Parameters<typeof _readValidatedBody<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _readValidatedBody<T, H3Event, TEventInput>>\nexport const readValidatedBody: PrependOverload<\n typeof _readValidatedBody,\n WrappedReadValidatedBody\n> = createWrapperFunction(_readValidatedBody)\nexport const removeResponseHeader = createWrapperFunction(_removeResponseHeader)\nexport const getContext = createWrapperFunction(_getContext)\nexport const setContext = createWrapperFunction(_setContext)\n\nexport const clearResponseHeaders = createWrapperFunction(_clearResponseHeaders)\n\nexport const getWebRequest = createWrapperFunction(toWebRequest)\n\nexport { createApp as createServer } from 'h3'\n\nfunction getNitroAsyncContext() {\n const nitroAsyncContext = getUnctxContext('nitro-app', {\n asyncContext: (globalThis as any).app.config.server.experimental\n ?.asyncContext\n ? true\n : false,\n AsyncLocalStorage,\n })\n\n return nitroAsyncContext\n}\n\nexport function getEvent() {\n const event = (getNitroAsyncContext().use() as any).event as\n | H3Event\n | undefined\n if (!event) {\n throw new Error(\n `No HTTPEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`,\n )\n }\n return event\n}\n\nexport async function handleHTTPEvent(event: H3Event) {\n return await (globalThis as any).$handle(event)\n}\n"],"names":["_readRawBody","_readBody","_getQuery","_isMethod","_isPreflightRequest","_getValidatedQuery","_getRouterParams","_getRouterParam","_getValidatedRouterParams","_assertMethod","_getRequestHeaders","_getRequestHeader","_getRequestURL","_getRequestHost","_getRequestProtocol","_getRequestIP","_send","_sendNoContent","_setResponseStatus","_getResponseStatus","_getResponseStatusText","_getResponseHeaders","_getResponseHeader","_setResponseHeaders","_setResponseHeader","_appendResponseHeaders","_appendResponseHeader","_defaultContentType","_sendRedirect","_sendStream","_writeEarlyHints","_sendError","_sendProxy","_proxyRequest","_fetchWithEvent","_getProxyRequestHeaders","_parseCookies","_getCookie","_setCookie","_deleteCookie","_useSession","_getSession","_updateSession","_sealSession","_unsealSession","_clearSession","_handleCacheHeaders","_handleCors","_appendCorsHeaders","_appendCorsPreflightHeaders","_sendWebResponse","_appendHeader","_appendHeaders","_setHeader","_setHeaders","_getHeader","_getHeaders","_getRequestFingerprint","_getRequestWebStream","_readFormData","_readMultipartFormData","_readValidatedBody","_removeResponseHeader","_clearResponseHeaders","getUnctxContext"],"mappings":"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"}
1
+ {"version":3,"file":"h3.js","sources":["../../src/h3.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n H3Event,\n appendCorsHeaders as _appendCorsHeaders,\n appendCorsPreflightHeaders as _appendCorsPreflightHeaders,\n appendHeader as _appendHeader,\n appendHeaders as _appendHeaders,\n appendResponseHeader as _appendResponseHeader,\n appendResponseHeaders as _appendResponseHeaders,\n assertMethod as _assertMethod,\n clearResponseHeaders as _clearResponseHeaders,\n clearSession as _clearSession,\n defaultContentType as _defaultContentType,\n defineEventHandler as _defineEventHandler,\n deleteCookie as _deleteCookie,\n eventHandler as _eventHandler,\n fetchWithEvent as _fetchWithEvent,\n getCookie as _getCookie,\n getHeader as _getHeader,\n getHeaders as _getHeaders,\n getProxyRequestHeaders as _getProxyRequestHeaders,\n getQuery as _getQuery,\n getRequestFingerprint as _getRequestFingerprint,\n getRequestHeader as _getRequestHeader,\n getRequestHeaders as _getRequestHeaders,\n getRequestHost as _getRequestHost,\n getRequestIP as _getRequestIP,\n getRequestProtocol as _getRequestProtocol,\n getRequestURL as _getRequestURL,\n getRequestWebStream as _getRequestWebStream,\n getResponseHeader as _getResponseHeader,\n getResponseHeaders as _getResponseHeaders,\n getResponseStatus as _getResponseStatus,\n getResponseStatusText as _getResponseStatusText,\n getRouterParam as _getRouterParam,\n getRouterParams as _getRouterParams,\n getSession as _getSession,\n getValidatedQuery as _getValidatedQuery,\n getValidatedRouterParams as _getValidatedRouterParams,\n handleCacheHeaders as _handleCacheHeaders,\n handleCors as _handleCors,\n isMethod as _isMethod,\n isPreflightRequest as _isPreflightRequest,\n parseCookies as _parseCookies,\n proxyRequest as _proxyRequest,\n readBody as _readBody,\n readFormData as _readFormData,\n readMultipartFormData as _readMultipartFormData,\n readRawBody as _readRawBody,\n readValidatedBody as _readValidatedBody,\n removeResponseHeader as _removeResponseHeader,\n sealSession as _sealSession,\n send as _send,\n sendError as _sendError,\n sendNoContent as _sendNoContent,\n sendProxy as _sendProxy,\n sendRedirect as _sendRedirect,\n sendStream as _sendStream,\n sendWebResponse as _sendWebResponse,\n setCookie as _setCookie,\n setHeader as _setHeader,\n setHeaders as _setHeaders,\n setResponseHeader as _setResponseHeader,\n setResponseHeaders as _setResponseHeaders,\n setResponseStatus as _setResponseStatus,\n toWebRequest as _toWebRequest,\n unsealSession as _unsealSession,\n updateSession as _updateSession,\n useSession as _useSession,\n writeEarlyHints as _writeEarlyHints,\n} from 'h3'\n\nimport type {\n Encoding,\n EventHandler,\n HTTPHeaderName,\n InferEventInput,\n _RequestMiddleware,\n _ResponseMiddleware,\n} from 'h3'\n\nconst eventStorage = new AsyncLocalStorage()\n\nfunction _setContext(event: H3Event, key: string, value: any) {\n event.context[key] = value\n}\n\nfunction _getContext(event: H3Event, key: string) {\n return event.context[key]\n}\n\nexport function defineMiddleware(options: {\n onRequest?: _RequestMiddleware | Array<_RequestMiddleware>\n onBeforeResponse?: _ResponseMiddleware | Array<_ResponseMiddleware>\n}) {\n return options\n}\n\n// function toWebRequestH3(event: H3Event) {\n// /**\n// * @type {ReadableStream | undefined}\n// */\n// let readableStream: ReadableStream | undefined\n\n// const url = _getRequestURL(event)\n// const base = {\n// // @ts-ignore Undici option\n// duplex: 'half',\n// method: event.method,\n// headers: event.headers,\n// }\n\n// if ((event.node.req as any).body instanceof ArrayBuffer) {\n// return new Request(url, {\n// ...base,\n// body: (event.node.req as any).body,\n// })\n// }\n\n// return new Request(url, {\n// ...base,\n// get body() {\n// if (readableStream) {\n// return readableStream\n// }\n// readableStream = _getRequestWebStream(event)\n// return readableStream\n// },\n// })\n// }\n\nexport {\n H3Error,\n H3Event,\n MIMES,\n callNodeListener,\n createApp,\n createAppEventHandler,\n createEvent,\n createRouter,\n defineLazyEventHandler,\n defineNodeListener,\n defineNodeMiddleware,\n defineRequestMiddleware,\n defineResponseMiddleware,\n dynamicEventHandler,\n defineWebSocket,\n splitCookiesString,\n fromNodeMiddleware,\n fromPlainHandler,\n fromWebHandler,\n isError,\n isEventHandler,\n isWebResponse,\n lazyEventHandler,\n promisifyNodeListener,\n serveStatic,\n toEventHandler,\n toNodeListener,\n toPlainHandler,\n toWebHandler,\n toWebRequest,\n isCorsOriginAllowed,\n isStream,\n createError,\n sanitizeStatusCode,\n sanitizeStatusMessage,\n useBase,\n type AddRouteShortcuts,\n type App,\n type AppOptions,\n type AppUse,\n type CacheConditions,\n type CreateRouterOptions,\n type Duplex,\n type DynamicEventHandler,\n type Encoding,\n type EventHandler,\n type EventHandlerObject,\n type EventHandlerRequest,\n type EventHandlerResponse,\n type H3CorsOptions,\n type H3EventContext,\n type HTTPHeaderName,\n type HTTPMethod,\n type InferEventInput,\n type InputLayer,\n type InputStack,\n type Layer,\n type LazyEventHandler,\n type Matcher,\n type MultiPartData,\n type NodeEventContext,\n type NodeListener,\n type NodeMiddleware,\n type NodePromisifiedHandler,\n type PlainHandler,\n type PlainRequest,\n type PlainResponse,\n type ProxyOptions,\n type RequestFingerprintOptions,\n type RequestHeaders,\n type RouteNode,\n type Router,\n type RouterMethod,\n type RouterUse,\n type ServeStaticOptions,\n type Session,\n type SessionConfig,\n type SessionData,\n type Stack,\n type StaticAssetMeta,\n type ValidateFunction,\n type ValidateResult,\n type WebEventContext,\n type WebHandler,\n type _RequestMiddleware,\n type _ResponseMiddleware,\n} from 'h3'\n\nexport function defineEventHandler(handler: EventHandler) {\n return _defineEventHandler((event) => {\n return runWithEvent(event, () => handler(event))\n })\n}\n\nexport function eventHandler(handler: EventHandler) {\n return _eventHandler((event) => {\n return runWithEvent(event, () => handler(event))\n })\n}\n\nexport async function runWithEvent<T>(\n event: H3Event,\n fn: () => T | Promise<T>,\n): Promise<T> {\n return eventStorage.run(event, fn)\n}\n\nexport function getEvent() {\n const event = eventStorage.getStore() as H3Event | undefined\n if (!event) {\n throw new Error(\n `No HTTPEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`,\n )\n }\n return event\n}\n\nexport const HTTPEventSymbol = Symbol('$HTTPEvent')\n\nexport function isEvent(\n obj: any,\n): obj is H3Event | { [HTTPEventSymbol]: H3Event } {\n return (\n typeof obj === 'object' &&\n (obj instanceof H3Event ||\n obj?.[HTTPEventSymbol] instanceof H3Event ||\n obj?.__is_event__ === true)\n )\n // Implement logic to check if obj is an H3Event\n}\n\ntype Tail<T> = T extends [any, ...infer U] ? U : never\n\ntype PrependOverload<\n TOriginal extends (...args: Array<any>) => any,\n TOverload extends (...args: Array<any>) => any,\n> = TOverload & TOriginal\n\n// add an overload to the function without the event argument\ntype WrapFunction<TFn extends (...args: Array<any>) => any> = PrependOverload<\n TFn,\n (\n ...args: Parameters<TFn> extends [H3Event, ...infer TArgs]\n ? TArgs\n : Parameters<TFn>\n ) => ReturnType<TFn>\n>\n\nfunction createWrapperFunction<TFn extends (...args: Array<any>) => any>(\n h3Function: TFn,\n): WrapFunction<TFn> {\n return function (...args: Array<any>) {\n const event = args[0]\n if (!isEvent(event)) {\n args.unshift(getEvent())\n } else {\n args[0] =\n event instanceof H3Event || (event as any).__is_event__\n ? event\n : event[HTTPEventSymbol]\n }\n\n return (h3Function as any)(...args)\n } as any\n}\n\n// Creating wrappers for each utility and exporting them with their original names\ntype WrappedReadRawBody = <TEncoding extends Encoding = 'utf8'>(\n ...args: Tail<Parameters<typeof _readRawBody<TEncoding>>>\n) => ReturnType<typeof _readRawBody<TEncoding>>\nexport const readRawBody: PrependOverload<\n typeof _readRawBody,\n WrappedReadRawBody\n> = createWrapperFunction(_readRawBody)\ntype WrappedReadBody = <T, TEventInput = InferEventInput<'body', H3Event, T>>(\n ...args: Tail<Parameters<typeof _readBody<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _readBody<T, H3Event, TEventInput>>\nexport const readBody: PrependOverload<typeof _readBody, WrappedReadBody> =\n createWrapperFunction(_readBody)\ntype WrappedGetQuery = <\n T,\n TEventInput = Exclude<InferEventInput<'query', H3Event, T>, undefined>,\n>(\n ...args: Tail<Parameters<typeof _getQuery<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _getQuery<T, H3Event, TEventInput>>\nexport const getQuery: PrependOverload<typeof _getQuery, WrappedGetQuery> =\n createWrapperFunction(_getQuery)\nexport const isMethod = createWrapperFunction(_isMethod)\nexport const isPreflightRequest = createWrapperFunction(_isPreflightRequest)\ntype WrappedGetValidatedQuery = <\n T,\n TEventInput = InferEventInput<'query', H3Event, T>,\n>(\n ...args: Tail<Parameters<typeof _getValidatedQuery<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _getValidatedQuery<T, H3Event, TEventInput>>\nexport const getValidatedQuery: PrependOverload<\n typeof _getValidatedQuery,\n WrappedGetValidatedQuery\n> = createWrapperFunction(_getValidatedQuery)\nexport const getRouterParams = createWrapperFunction(_getRouterParams)\nexport const getRouterParam = createWrapperFunction(_getRouterParam)\ntype WrappedGetValidatedRouterParams = <\n T,\n TEventInput = InferEventInput<'routerParams', H3Event, T>,\n>(\n ...args: Tail<\n Parameters<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>\n >\n) => ReturnType<typeof _getValidatedRouterParams<T, H3Event, TEventInput>>\nexport const getValidatedRouterParams: PrependOverload<\n typeof _getValidatedRouterParams,\n WrappedGetValidatedRouterParams\n> = createWrapperFunction(_getValidatedRouterParams)\nexport const assertMethod = createWrapperFunction(_assertMethod)\nexport const getRequestHeaders = createWrapperFunction(_getRequestHeaders)\nexport const getRequestHeader = createWrapperFunction(_getRequestHeader)\nexport const getRequestURL = createWrapperFunction(_getRequestURL)\nexport const getRequestHost = createWrapperFunction(_getRequestHost)\nexport const getRequestProtocol = createWrapperFunction(_getRequestProtocol)\nexport const getRequestIP = createWrapperFunction(_getRequestIP)\nexport const send = createWrapperFunction(_send)\nexport const sendNoContent = createWrapperFunction(_sendNoContent)\nexport const setResponseStatus = createWrapperFunction(_setResponseStatus)\nexport const getResponseStatus = createWrapperFunction(_getResponseStatus)\nexport const getResponseStatusText = createWrapperFunction(\n _getResponseStatusText,\n)\nexport const getResponseHeaders = createWrapperFunction(_getResponseHeaders)\nexport const getResponseHeader = createWrapperFunction(_getResponseHeader)\nexport const setResponseHeaders = createWrapperFunction(_setResponseHeaders)\ntype WrappedSetResponseHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _setResponseHeader<T>>>\n) => ReturnType<typeof _setResponseHeader<T>>\nexport const setResponseHeader: PrependOverload<\n typeof _setResponseHeader,\n WrappedSetResponseHeader\n> = createWrapperFunction(_setResponseHeader)\nexport const appendResponseHeaders = createWrapperFunction(\n _appendResponseHeaders,\n)\ntype WrappedAppendResponseHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _appendResponseHeader<T>>>\n) => ReturnType<typeof _appendResponseHeader<T>>\nexport const appendResponseHeader: PrependOverload<\n typeof _appendResponseHeader,\n WrappedAppendResponseHeader\n> = createWrapperFunction(_appendResponseHeader)\nexport const defaultContentType = createWrapperFunction(_defaultContentType)\nexport const sendRedirect = createWrapperFunction(_sendRedirect)\nexport const sendStream = createWrapperFunction(_sendStream)\nexport const writeEarlyHints = createWrapperFunction(_writeEarlyHints)\nexport const sendError = createWrapperFunction(_sendError)\nexport const sendProxy = createWrapperFunction(_sendProxy)\nexport const proxyRequest = createWrapperFunction(_proxyRequest)\ntype WrappedFetchWithEvent = <\n T = unknown,\n TResponse = any,\n TFetch extends (req: RequestInfo | URL, opts?: any) => any = typeof fetch,\n>(\n ...args: Tail<Parameters<typeof _fetchWithEvent<T, TResponse, TFetch>>>\n) => ReturnType<typeof _fetchWithEvent<T, TResponse, TFetch>>\nexport const fetchWithEvent: PrependOverload<\n typeof _fetchWithEvent,\n WrappedFetchWithEvent\n> = createWrapperFunction(_fetchWithEvent)\nexport const getProxyRequestHeaders = createWrapperFunction(\n _getProxyRequestHeaders,\n)\n\nexport const parseCookies = createWrapperFunction(_parseCookies)\nexport const getCookie = createWrapperFunction(_getCookie)\nexport const setCookie = createWrapperFunction(_setCookie)\nexport const deleteCookie = createWrapperFunction(_deleteCookie)\n// not exported :(\ntype SessionDataT = Record<string, any>\ntype WrappedUseSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _useSession<T>>>\n) => ReturnType<typeof _useSession<T>>\n// we need to `as` these because the WrapFunction doesn't work for them\n// because they also accept CompatEvent instead of H3Event\nexport const useSession = createWrapperFunction(_useSession) as PrependOverload<\n typeof _useSession,\n WrappedUseSession\n>\ntype WrappedGetSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _getSession<T>>>\n) => ReturnType<typeof _getSession<T>>\nexport const getSession = createWrapperFunction(_getSession) as PrependOverload<\n typeof _getSession,\n WrappedGetSession\n>\ntype WrappedUpdateSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _updateSession<T>>>\n) => ReturnType<typeof _updateSession<T>>\nexport const updateSession: PrependOverload<\n typeof _updateSession,\n WrappedUpdateSession\n> = createWrapperFunction(_updateSession)\ntype WrappedSealSession = <T extends SessionDataT>(\n ...args: Tail<Parameters<typeof _sealSession<T>>>\n) => ReturnType<typeof _sealSession<T>>\nexport const sealSession = createWrapperFunction(\n _sealSession,\n) as PrependOverload<typeof _sealSession, WrappedSealSession>\nexport const unsealSession = createWrapperFunction(_unsealSession)\nexport const clearSession = createWrapperFunction(_clearSession)\nexport const handleCacheHeaders = createWrapperFunction(_handleCacheHeaders)\nexport const handleCors = createWrapperFunction(_handleCors)\nexport const appendCorsHeaders = createWrapperFunction(_appendCorsHeaders)\nexport const appendCorsPreflightHeaders = createWrapperFunction(\n _appendCorsPreflightHeaders,\n)\nexport const sendWebResponse = createWrapperFunction(_sendWebResponse)\ntype WrappedAppendHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _appendHeader<T>>>\n) => ReturnType<typeof _appendHeader<T>>\nexport const appendHeader: PrependOverload<\n typeof _appendHeader,\n WrappedAppendHeader\n> = createWrapperFunction(_appendHeader)\nexport const appendHeaders = createWrapperFunction(_appendHeaders)\ntype WrappedSetHeader = <T extends HTTPHeaderName>(\n ...args: Tail<Parameters<typeof _setHeader<T>>>\n) => ReturnType<typeof _setHeader<T>>\nexport const setHeader: PrependOverload<typeof _setHeader, WrappedSetHeader> =\n createWrapperFunction(_setHeader)\nexport const setHeaders = createWrapperFunction(_setHeaders)\nexport const getHeader = createWrapperFunction(_getHeader)\nexport const getHeaders = createWrapperFunction(_getHeaders)\nexport const getRequestFingerprint = createWrapperFunction(\n _getRequestFingerprint,\n)\nexport const getRequestWebStream = createWrapperFunction(_getRequestWebStream)\nexport const readFormData = createWrapperFunction(_readFormData)\nexport const readMultipartFormData = createWrapperFunction(\n _readMultipartFormData,\n)\ntype WrappedReadValidatedBody = <\n T,\n TEventInput = InferEventInput<'body', H3Event, T>,\n>(\n ...args: Tail<Parameters<typeof _readValidatedBody<T, H3Event, TEventInput>>>\n) => ReturnType<typeof _readValidatedBody<T, H3Event, TEventInput>>\nexport const readValidatedBody: PrependOverload<\n typeof _readValidatedBody,\n WrappedReadValidatedBody\n> = createWrapperFunction(_readValidatedBody)\nexport const removeResponseHeader = createWrapperFunction(_removeResponseHeader)\nexport const getContext = createWrapperFunction(_getContext)\nexport const setContext = createWrapperFunction(_setContext)\nexport const clearResponseHeaders = createWrapperFunction(_clearResponseHeaders)\nexport const getWebRequest = createWrapperFunction(_toWebRequest)\n\nexport type RequestHandler = (ctx: {\n request: Request\n}) => Promise<Response> | Response\n\nexport function requestHandler(handler: RequestHandler) {\n return handler\n}\n"],"names":["_defineEventHandler","_eventHandler","_readRawBody","_readBody","_getQuery","_isMethod","_isPreflightRequest","_getValidatedQuery","_getRouterParams","_getRouterParam","_getValidatedRouterParams","_assertMethod","_getRequestHeaders","_getRequestHeader","_getRequestURL","_getRequestHost","_getRequestProtocol","_getRequestIP","_send","_sendNoContent","_setResponseStatus","_getResponseStatus","_getResponseStatusText","_getResponseHeaders","_getResponseHeader","_setResponseHeaders","_setResponseHeader","_appendResponseHeaders","_appendResponseHeader","_defaultContentType","_sendRedirect","_sendStream","_writeEarlyHints","_sendError","_sendProxy","_proxyRequest","_fetchWithEvent","_getProxyRequestHeaders","_parseCookies","_getCookie","_setCookie","_deleteCookie","_useSession","_getSession","_updateSession","_sealSession","_unsealSession","_clearSession","_handleCacheHeaders","_handleCors","_appendCorsHeaders","_appendCorsPreflightHeaders","_sendWebResponse","_appendHeader","_appendHeaders","_setHeader","_setHeaders","_getHeader","_getHeaders","_getRequestFingerprint","_getRequestWebStream","_readFormData","_readMultipartFormData","_readValidatedBody","_removeResponseHeader","_clearResponseHeaders","_toWebRequest"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
- import { EventHandlerResponse } from 'h3';
2
1
  import { AnyRouter } from '@tanstack/router-core';
3
- export interface HandlerCallback<TRouter extends AnyRouter, TResponse extends EventHandlerResponse = EventHandlerResponse> {
2
+ export interface HandlerCallback<TRouter extends AnyRouter> {
4
3
  (ctx: {
5
4
  request: Request;
6
5
  router: TRouter;
7
6
  responseHeaders: Headers;
8
- }): TResponse;
7
+ }): Response | Promise<Response>;
9
8
  }
10
- export declare function defineHandlerCallback<TRouter extends AnyRouter, TResponse = EventHandlerResponse>(handler: HandlerCallback<TRouter, TResponse>): HandlerCallback<TRouter, TResponse>;
9
+ export declare function defineHandlerCallback<TRouter extends AnyRouter>(handler: HandlerCallback<TRouter>): HandlerCallback<TRouter>;
@@ -1 +1 @@
1
- {"version":3,"file":"handlerCallback.js","sources":["../../src/handlerCallback.ts"],"sourcesContent":["import type { EventHandlerResponse } from 'h3'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport interface HandlerCallback<\n TRouter extends AnyRouter,\n TResponse extends EventHandlerResponse = EventHandlerResponse,\n> {\n (ctx: {\n request: Request\n router: TRouter\n responseHeaders: Headers\n }): TResponse\n}\n\nexport function defineHandlerCallback<\n TRouter extends AnyRouter,\n TResponse = EventHandlerResponse,\n>(\n handler: HandlerCallback<TRouter, TResponse>,\n): HandlerCallback<TRouter, TResponse> {\n return handler\n}\n"],"names":[],"mappings":"AAcO,SAAS,sBAId,SACqC;AAC9B,SAAA;AACT;"}
1
+ {"version":3,"file":"handlerCallback.js","sources":["../../src/handlerCallback.ts"],"sourcesContent":["import type { AnyRouter } from '@tanstack/router-core'\n\nexport interface HandlerCallback<TRouter extends AnyRouter> {\n (ctx: {\n request: Request\n router: TRouter\n responseHeaders: Headers\n }): Response | Promise<Response>\n}\n\nexport function defineHandlerCallback<TRouter extends AnyRouter>(\n handler: HandlerCallback<TRouter>,\n): HandlerCallback<TRouter> {\n return handler\n}\n"],"names":[],"mappings":"AAUO,SAAS,sBACd,SAC0B;AACnB,SAAA;AACT;"}
@@ -1,6 +1,11 @@
1
1
  export { transformReadableStreamWithRouter, transformPipeableStreamWithRouter, } from './transformStreamWithRouter.js';
2
- export { createStartHandler } from './createStartHandler.js';
2
+ export { getStartResponseHeaders, createStartHandler, } from './createStartHandler.js';
3
+ export type { CustomizeStartHandler } from './createStartHandler.js';
3
4
  export { createRequestHandler } from './createRequestHandler.js';
4
5
  export { defineHandlerCallback } from './handlerCallback.js';
5
6
  export type { HandlerCallback } from './handlerCallback.js';
7
+ export { attachRouterServerSsrUtils, dehydrateRouter } from './ssr-server.js';
8
+ export { handleServerAction } from './server-functions-handler.js';
6
9
  export * from './h3.js';
10
+ export { createServerRoute, createServerFileRoute } from './serverRoute.js';
11
+ export type { CreateServerFileRoute } from './serverRoute.js';
package/dist/esm/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import { transformPipeableStreamWithRouter, transformReadableStreamWithRouter } from "./transformStreamWithRouter.js";
2
- import { createStartHandler } from "./createStartHandler.js";
2
+ import { createStartHandler, getStartResponseHeaders } from "./createStartHandler.js";
3
3
  import { createRequestHandler } from "./createRequestHandler.js";
4
4
  import { defineHandlerCallback } from "./handlerCallback.js";
5
- import { HTTPEventSymbol, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, clearResponseHeaders, clearSession, defaultContentType, defineMiddleware, deleteCookie, fetchWithEvent, getContext, getCookie, getEvent, getHeader, getHeaders, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, getWebRequest, handleCacheHeaders, handleCors, handleHTTPEvent, isEvent, isMethod, isPreflightRequest, parseCookies, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sealSession, send, sendError, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, setContext, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, toWebRequest, unsealSession, updateSession, useSession, writeEarlyHints } from "./h3.js";
6
- import { H3Error, H3Event, MIMES, callNodeListener, createApp, createAppEventHandler, createError, createEvent, createRouter, createApp as createApp2, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, dynamicEventHandler, eventHandler, fromNodeMiddleware, fromPlainHandler, fromWebHandler, isCorsOriginAllowed, isError, isEventHandler, isStream, isWebResponse, lazyEventHandler, promisifyNodeListener, sanitizeStatusCode, sanitizeStatusMessage, serveStatic, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, useBase } from "h3";
5
+ import { attachRouterServerSsrUtils, dehydrateRouter } from "./ssr-server.js";
6
+ import { handleServerAction } from "./server-functions-handler.js";
7
+ import { HTTPEventSymbol, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, clearResponseHeaders, clearSession, defaultContentType, defineEventHandler, defineMiddleware, deleteCookie, eventHandler, fetchWithEvent, getContext, getCookie, getEvent, getHeader, getHeaders, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, getWebRequest, handleCacheHeaders, handleCors, isEvent, isMethod, isPreflightRequest, parseCookies, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, requestHandler, runWithEvent, sealSession, send, sendError, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, setContext, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, unsealSession, updateSession, useSession, writeEarlyHints } from "./h3.js";
8
+ import { createServerFileRoute, createServerRoute } from "./serverRoute.js";
9
+ import { H3Error, H3Event, MIMES, callNodeListener, createApp, createAppEventHandler, createError, createEvent, createRouter, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, dynamicEventHandler, fromNodeMiddleware, fromPlainHandler, fromWebHandler, isCorsOriginAllowed, isError, isEventHandler, isStream, isWebResponse, lazyEventHandler, promisifyNodeListener, sanitizeStatusCode, sanitizeStatusMessage, serveStatic, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, useBase } from "h3";
7
10
  export {
8
11
  H3Error,
9
12
  H3Event,
@@ -16,6 +19,7 @@ export {
16
19
  appendResponseHeader,
17
20
  appendResponseHeaders,
18
21
  assertMethod,
22
+ attachRouterServerSsrUtils,
19
23
  callNodeListener,
20
24
  clearResponseHeaders,
21
25
  clearSession,
@@ -25,7 +29,8 @@ export {
25
29
  createEvent,
26
30
  createRequestHandler,
27
31
  createRouter,
28
- createApp2 as createServer,
32
+ createServerFileRoute,
33
+ createServerRoute,
29
34
  createStartHandler,
30
35
  defaultContentType,
31
36
  defineEventHandler,
@@ -37,6 +42,7 @@ export {
37
42
  defineRequestMiddleware,
38
43
  defineResponseMiddleware,
39
44
  defineWebSocket,
45
+ dehydrateRouter,
40
46
  deleteCookie,
41
47
  dynamicEventHandler,
42
48
  eventHandler,
@@ -66,12 +72,13 @@ export {
66
72
  getRouterParam,
67
73
  getRouterParams,
68
74
  getSession,
75
+ getStartResponseHeaders,
69
76
  getValidatedQuery,
70
77
  getValidatedRouterParams,
71
78
  getWebRequest,
72
79
  handleCacheHeaders,
73
80
  handleCors,
74
- handleHTTPEvent,
81
+ handleServerAction,
75
82
  isCorsOriginAllowed,
76
83
  isError,
77
84
  isEvent,
@@ -90,6 +97,8 @@ export {
90
97
  readRawBody,
91
98
  readValidatedBody,
92
99
  removeResponseHeader,
100
+ requestHandler,
101
+ runWithEvent,
93
102
  sanitizeStatusCode,
94
103
  sanitizeStatusMessage,
95
104
  sealSession,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -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,44 @@
1
+ import { tsrStartManifest } from "tanstack:start-manifest";
2
+ import { rootRouteId } from "@tanstack/router-core";
3
+ function getStartManifest() {
4
+ const startManifest = tsrStartManifest();
5
+ const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
6
+ rootRoute.assets = rootRoute.assets || [];
7
+ if (process.env.NODE_ENV === "development" && !process.env.TSS_CLIENT_ENTRY) {
8
+ throw new Error(
9
+ "tanstack/start-server-core: TSS_CLIENT_ENTRY must be defined in your environment for getStartManifest()"
10
+ );
11
+ }
12
+ if (process.env.NODE_ENV === "development") {
13
+ const script = `${globalThis.TSS_INJECTED_HEAD_SCRIPTS ? globalThis.TSS_INJECTED_HEAD_SCRIPTS + "; " : ""}import(${JSON.stringify(process.env.TSS_CLIENT_ENTRY)})`;
14
+ rootRoute.assets.push({
15
+ tag: "script",
16
+ attrs: {
17
+ type: "module",
18
+ suppressHydrationWarning: true,
19
+ async: true
20
+ },
21
+ children: script
22
+ });
23
+ }
24
+ const manifest = {
25
+ ...startManifest,
26
+ routes: Object.fromEntries(
27
+ Object.entries(startManifest.routes).map(([k, v]) => {
28
+ const { preloads, assets } = v;
29
+ return [
30
+ k,
31
+ {
32
+ preloads,
33
+ assets
34
+ }
35
+ ];
36
+ })
37
+ )
38
+ };
39
+ return manifest;
40
+ }
41
+ export {
42
+ getStartManifest
43
+ };
44
+ //# sourceMappingURL=router-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-manifest.js","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":[],"mappings":";;AAcO,SAAS,mBAAmB;AACjC,QAAM,gBAAgB,iBAAiB;AAEjC,QAAA,YAAa,cAAc,OAAO,WAAW,IACjD,cAAc,OAAO,WAAW,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,3 @@
1
+ export declare const handleServerAction: ({ request }: {
2
+ request: Request;
3
+ }) => Promise<any>;
@@ -0,0 +1,145 @@
1
+ import { isNotFound } from "@tanstack/router-core";
2
+ import invariant from "tiny-invariant";
3
+ import { startSerializer } from "@tanstack/start-client-core";
4
+ import _serverFnManifest from "tanstack:server-fn-manifest";
5
+ import { getResponseStatus, getEvent } from "./h3.js";
6
+ const serverFnManifest = _serverFnManifest;
7
+ function sanitizeBase(base) {
8
+ if (!base) {
9
+ throw new Error(
10
+ "🚨 process.env.TSS_SERVER_FN_BASE is required in start/server-handler/index"
11
+ );
12
+ }
13
+ return base.replace(/^\/|\/$/g, "");
14
+ }
15
+ const handleServerAction = async ({ request }) => {
16
+ const controller = new AbortController();
17
+ const signal = controller.signal;
18
+ const abort = () => controller.abort();
19
+ request.signal.addEventListener("abort", abort);
20
+ const method = request.method;
21
+ const url = new URL(request.url, "http://localhost:3000");
22
+ const regex = new RegExp(
23
+ `${sanitizeBase(process.env.TSS_SERVER_FN_BASE)}/([^/?#]+)`
24
+ );
25
+ const match = url.pathname.match(regex);
26
+ const serverFnId = match ? match[1] : null;
27
+ const search = Object.fromEntries(url.searchParams.entries());
28
+ const isCreateServerFn = "createServerFn" in search;
29
+ const isRaw = "raw" in search;
30
+ if (typeof serverFnId !== "string") {
31
+ throw new Error("Invalid server action param for serverFnId: " + serverFnId);
32
+ }
33
+ const serverFnInfo = serverFnManifest[serverFnId];
34
+ if (!serverFnInfo) {
35
+ console.info("serverFnManifest", serverFnManifest);
36
+ throw new Error("Server function info not found for " + serverFnId);
37
+ }
38
+ const fnModule = await serverFnInfo.importer();
39
+ if (!fnModule) {
40
+ console.info("serverFnInfo", serverFnInfo);
41
+ throw new Error("Server function module not resolved for " + serverFnId);
42
+ }
43
+ const action = fnModule[serverFnInfo.functionName];
44
+ if (!action) {
45
+ console.info("serverFnInfo", serverFnInfo);
46
+ console.info("fnModule", fnModule);
47
+ throw new Error(
48
+ `Server function module export not resolved for serverFn ID: ${serverFnId}`
49
+ );
50
+ }
51
+ const formDataContentTypes = [
52
+ "multipart/form-data",
53
+ "application/x-www-form-urlencoded"
54
+ ];
55
+ const response = await (async () => {
56
+ try {
57
+ let result = await (async () => {
58
+ if (request.headers.get("Content-Type") && formDataContentTypes.some(
59
+ (type) => {
60
+ var _a;
61
+ return (_a = request.headers.get("Content-Type")) == null ? void 0 : _a.includes(type);
62
+ }
63
+ )) {
64
+ invariant(
65
+ method.toLowerCase() !== "get",
66
+ "GET requests with FormData payloads are not supported"
67
+ );
68
+ return await action(await request.formData(), signal);
69
+ }
70
+ if (method.toLowerCase() === "get") {
71
+ let payload2 = search;
72
+ if (isCreateServerFn) {
73
+ payload2 = search.payload;
74
+ }
75
+ payload2 = payload2 ? startSerializer.parse(payload2) : payload2;
76
+ return await action(payload2, signal);
77
+ }
78
+ const jsonPayloadAsString = await request.text();
79
+ const payload = startSerializer.parse(jsonPayloadAsString);
80
+ if (isCreateServerFn) {
81
+ return await action(payload, signal);
82
+ }
83
+ return await action(...payload, signal);
84
+ })();
85
+ if (result.result instanceof Response) {
86
+ return result.result;
87
+ }
88
+ if (!isCreateServerFn) {
89
+ result = result.result;
90
+ if (result instanceof Response) {
91
+ return result;
92
+ }
93
+ }
94
+ if (isNotFound(result)) {
95
+ return isNotFoundResponse(result);
96
+ }
97
+ return new Response(
98
+ result !== void 0 ? startSerializer.stringify(result) : void 0,
99
+ {
100
+ status: getResponseStatus(getEvent()),
101
+ headers: {
102
+ "Content-Type": "application/json"
103
+ }
104
+ }
105
+ );
106
+ } catch (error) {
107
+ if (error instanceof Response) {
108
+ return error;
109
+ }
110
+ if (isNotFound(error)) {
111
+ return isNotFoundResponse(error);
112
+ }
113
+ console.info();
114
+ console.info("Server Fn Error!");
115
+ console.info();
116
+ console.error(error);
117
+ console.info();
118
+ return new Response(startSerializer.stringify(error), {
119
+ status: 500,
120
+ headers: {
121
+ "Content-Type": "application/json"
122
+ }
123
+ });
124
+ }
125
+ })();
126
+ request.signal.removeEventListener("abort", abort);
127
+ if (isRaw) {
128
+ return response;
129
+ }
130
+ return response;
131
+ };
132
+ function isNotFoundResponse(error) {
133
+ const { headers, ...rest } = error;
134
+ return new Response(JSON.stringify(rest), {
135
+ status: 200,
136
+ headers: {
137
+ "Content-Type": "application/json",
138
+ ...headers || {}
139
+ }
140
+ });
141
+ }
142
+ export {
143
+ handleServerAction
144
+ };
145
+ //# sourceMappingURL=server-functions-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-functions-handler.js","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\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/_serverFn/: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 const fnModule: undefined | { [key: string]: any } =\n await serverFnInfo.importer()\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"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { Assign, Constrain, Expand, ResolveParams, RouteConstraints, TrimPathRight } from '@tanstack/router-core';
2
+ import { AnyRequestMiddleware, AssignAllServerContext } from '@tanstack/start-client-core';
3
+ type TODO = any;
4
+ export declare function createServerFileRoute<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TChildren>(__?: never): ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>;
5
+ export interface ServerRouteOptions<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares> {
6
+ id: TId;
7
+ path: TPath;
8
+ pathname: TFullPath;
9
+ originalIndex: number;
10
+ getParentRoute?: () => TParentRoute;
11
+ middleware: Constrain<TMiddlewares, ReadonlyArray<AnyRequestMiddleware>>;
12
+ methods: Record<string, ServerRouteMethodHandlerFn<TParentRoute, TFullPath, TMiddlewares, any, any>>;
13
+ caseSensitive?: boolean;
14
+ }
15
+ export type ServerRouteManifest = {
16
+ middleware: boolean;
17
+ methods: Record<string, {
18
+ middleware: boolean;
19
+ }>;
20
+ };
21
+ export declare function createServerRoute<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TChildren>(__?: never, __opts?: Partial<ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, undefined>>): ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>;
22
+ export type ServerRouteAddFileChildrenFn<in out TParentRoute extends AnyServerRouteWithTypes, in out TId extends RouteConstraints['TId'], in out TPath extends RouteConstraints['TPath'], in out TFullPath extends RouteConstraints['TFullPath'], in out TMiddlewares, in out TMethods, in out TChildren> = (children: TChildren) => ServerRouteWithTypes<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods, TChildren>;
23
+ export type CreateServerFileRoute<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TChildren> = (options?: undefined) => ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>;
24
+ export type AnyServerRouteWithTypes = ServerRouteWithTypes<any, any, any, any, any, any, any>;
25
+ export interface ServerRouteWithTypes<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares, TMethods, TChildren> {
26
+ _types: ServerRouteTypes<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods>;
27
+ path: TPath;
28
+ id: TId;
29
+ fullPath: TFullPath;
30
+ to: TrimPathRight<TFullPath>;
31
+ parentRoute: TParentRoute;
32
+ children?: TChildren;
33
+ options: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, TMiddlewares>;
34
+ update: (opts: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, undefined>) => ServerRoute<TParentRoute, TId, TPath, TFullPath, TChildren>;
35
+ init: (opts: {
36
+ originalIndex: number;
37
+ }) => void;
38
+ _addFileChildren: ServerRouteAddFileChildrenFn<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods, TChildren>;
39
+ _addFileTypes: () => ServerRouteWithTypes<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods, TChildren>;
40
+ }
41
+ export interface ServerRouteTypes<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares, TMethods> {
42
+ id: TId;
43
+ path: TPath;
44
+ fullPath: TFullPath;
45
+ middlewares: TMiddlewares;
46
+ methods: TMethods;
47
+ parentRoute: TParentRoute;
48
+ allContext: ResolveAllServerContext<TParentRoute, TMiddlewares>;
49
+ }
50
+ export type ResolveAllServerContext<TParentRoute extends AnyServerRouteWithTypes, TMiddlewares> = unknown extends TParentRoute ? AssignAllServerContext<TMiddlewares> : Assign<TParentRoute['_types']['allContext'], AssignAllServerContext<TMiddlewares>>;
51
+ export type AnyServerRoute = AnyServerRouteWithTypes;
52
+ export interface ServerRoute<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TChildren> extends ServerRouteWithTypes<TParentRoute, TId, TPath, TFullPath, undefined, undefined, TChildren>, ServerRouteMiddleware<TParentRoute, TId, TPath, TFullPath, TChildren>, ServerRouteMethods<TParentRoute, TId, TPath, TFullPath, undefined, TChildren> {
53
+ }
54
+ export interface ServerRouteMiddleware<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TChildren> {
55
+ middleware: <const TNewMiddleware>(middleware: Constrain<TNewMiddleware, ReadonlyArray<AnyRequestMiddleware>>) => ServerRouteAfterMiddleware<TParentRoute, TId, TPath, TFullPath, TNewMiddleware, TChildren>;
56
+ }
57
+ export interface ServerRouteAfterMiddleware<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares, TChildren> extends ServerRouteWithTypes<TParentRoute, TId, TPath, TFullPath, TMiddlewares, undefined, TChildren>, ServerRouteMethods<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TChildren> {
58
+ }
59
+ export interface ServerRouteMethods<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares, TChildren> {
60
+ methods: <const TMethods>(methodsOrGetMethods: Constrain<TMethods, ServerRouteMethodsOptions<TParentRoute, TFullPath, TMiddlewares>>) => ServerRouteAfterMethods<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods, TChildren>;
61
+ }
62
+ export type ServerRouteMethodsOptions<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares> = ServerRouteMethodsRecord<TParentRoute, TFullPath, TMiddlewares> | ((api: ServerRouteMethodBuilder<TParentRoute, TFullPath, TMiddlewares>) => ServerRouteMethodsRecord<TParentRoute, TFullPath, TMiddlewares>);
63
+ export interface ServerRouteMethodsRecord<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares> {
64
+ GET?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
65
+ POST?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
66
+ PUT?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
67
+ PATCH?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
68
+ DELETE?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
69
+ OPTIONS?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
70
+ HEAD?: ServerRouteMethodRecordValue<TParentRoute, TFullPath, TMiddlewares>;
71
+ }
72
+ export type ServerRouteMethodRecordValue<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares> = ServerRouteMethodHandlerFn<TParentRoute, TFullPath, TMiddlewares, undefined, any> | AnyRouteMethodsBuilder;
73
+ export type ServerRouteVerb = (typeof ServerRouteVerbs)[number];
74
+ export declare const ServerRouteVerbs: readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"];
75
+ export type ServerRouteMethodHandlerFn<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares, TMethodMiddlewares, TResponse> = (ctx: ServerRouteMethodHandlerCtx<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares>) => TResponse | Promise<TResponse>;
76
+ export interface ServerRouteMethodHandlerCtx<in out TParentRoute extends AnyServerRouteWithTypes, in out TFullPath extends string, in out TMiddlewares, in out TMethodMiddlewares> {
77
+ context: Expand<AssignAllMethodContext<TParentRoute, TMiddlewares, TMethodMiddlewares>>;
78
+ request: Request;
79
+ params: Expand<ResolveParams<TFullPath>>;
80
+ pathname: TFullPath;
81
+ }
82
+ export type MergeMethodMiddlewares<TMiddlewares, TMethodMiddlewares> = TMiddlewares extends ReadonlyArray<any> ? TMethodMiddlewares extends ReadonlyArray<any> ? readonly [...TMiddlewares, ...TMethodMiddlewares] : TMiddlewares : TMethodMiddlewares;
83
+ export type AssignAllMethodContext<TParentRoute extends AnyServerRouteWithTypes, TMiddlewares, TMethodMiddlewares> = ResolveAllServerContext<TParentRoute, MergeMethodMiddlewares<TMiddlewares, TMethodMiddlewares>>;
84
+ export type AnyRouteMethodsBuilder = ServerRouteMethodBuilderWithTypes<any, any, any, any>;
85
+ export interface ServerRouteMethodBuilder<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares> extends ServerRouteMethodBuilderWithTypes<TFullPath, TMiddlewares, undefined, undefined>, ServerRouteMethodBuilderMiddleware<TParentRoute, TFullPath, TMiddlewares>, ServerRouteMethodBuilderHandler<TParentRoute, TFullPath, TMiddlewares, undefined> {
86
+ }
87
+ export interface ServerRouteMethodBuilderWithTypes<TFullPath extends string, TMiddlewares, TMethodMiddlewares, TResponse> {
88
+ _options: TODO;
89
+ _types: ServerRouteMethodBuilderTypes<TFullPath, TMiddlewares, TMethodMiddlewares, TResponse>;
90
+ }
91
+ export interface ServerRouteMethodBuilderTypes<in out TFullPath extends string, in out TMiddlewares, in out TMethodMiddlewares, in out TResponse> {
92
+ middlewares: TMiddlewares;
93
+ methodMiddleware: TMethodMiddlewares;
94
+ fullPath: TFullPath;
95
+ response: TResponse;
96
+ }
97
+ export interface ServerRouteMethodBuilderMiddleware<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares> {
98
+ middleware: <const TNewMethodMiddlewares>(middleware: Constrain<TNewMethodMiddlewares, ReadonlyArray<AnyRequestMiddleware>>) => ServerRouteMethodBuilderAfterMiddleware<TParentRoute, TFullPath, TMiddlewares, TNewMethodMiddlewares>;
99
+ }
100
+ export interface ServerRouteMethodBuilderAfterMiddleware<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares, TMethodMiddlewares> extends ServerRouteMethodBuilderWithTypes<TFullPath, TMiddlewares, TMethodMiddlewares, undefined>, ServerRouteMethodBuilderHandler<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares> {
101
+ }
102
+ export interface ServerRouteMethodBuilderHandler<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares, TMethodMiddlewares> {
103
+ handler: <TResponse>(handler: ServerRouteMethodHandlerFn<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares, TResponse>) => ServerRouteMethodBuilderAfterHandler<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares, TResponse>;
104
+ }
105
+ export interface ServerRouteMethodBuilderAfterHandler<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares, TMethodMiddlewares, TResponse> extends ServerRouteMethodBuilderWithTypes<TFullPath, TMiddlewares, TMethodMiddlewares, TResponse> {
106
+ opts: ServerRouteMethod<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares>;
107
+ }
108
+ export interface ServerRouteMethod<TParentRoute extends AnyServerRouteWithTypes, TFullPath extends string, TMiddlewares, TMethodMiddlewares> {
109
+ middleware?: Constrain<TMiddlewares, Array<AnyRequestMiddleware>>;
110
+ handler?: ServerRouteMethodHandlerFn<TParentRoute, TFullPath, TMiddlewares, TMethodMiddlewares, undefined>;
111
+ }
112
+ export interface ServerRouteAfterMethods<TParentRoute extends AnyServerRouteWithTypes, TId extends RouteConstraints['TId'], TPath extends RouteConstraints['TPath'], TFullPath extends RouteConstraints['TFullPath'], TMiddlewares, TMethods, TChildren> extends ServerRouteWithTypes<TParentRoute, TId, TPath, TFullPath, TMiddlewares, TMethods, TChildren> {
113
+ options: ServerRouteOptions<TParentRoute, TId, TPath, TFullPath, TMiddlewares>;
114
+ }
115
+ export {};