ShokupanContext
Defined in: src/context.ts:137
Shokupan Request Context
The context object passed to all middleware and route handlers. Provides access to request data, response helpers, and typed state management.
Examples
Section titled “Examples”app.get('/hello', (ctx) => { return ctx.json({ message: 'Hello' });});interface AppState { userId: string; requestId: string;}
const app = new Shokupan<AppState>();
app.use((ctx, next) => { ctx.state.requestId = crypto.randomUUID(); // ✓ Type-safe return next();});app.get('/users/:userId/posts/:postId', (ctx) => { // ctx.params is automatically typed as { userId: string; postId: string } const { userId, postId } = ctx.params; return ctx.json({ userId, postId });});interface RequestState { userId: string; permissions: string[];}
const app = new Shokupan<RequestState>();
app.get('/admin/users/:userId', (ctx) => { // Both typed! const { userId } = ctx.params; // ✓ From path const { permissions } = ctx.state; // ✓ From state
if (!permissions.includes('admin')) { return ctx.json({ error: 'Forbidden' }, 403); } return ctx.json({ userId });});Type Parameters
Section titled “Type Parameters”State extends Record<string, any> = GlobalShokupanState
The shape of ctx.state for type-safe state access across middleware.
Params
Section titled “Params”Params extends Record<string, string> = Record<string, string>
The shape of ctx.params based on the route path pattern.
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new ShokupanContext<
State,Params>(request,server?,state?,app?,signal?,enableMiddlewareTracking?,requestId?):ShokupanContext<State,Params>
Defined in: src/context.ts:240
Parameters
Section titled “Parameters”request
Section titled “request”any
server?
Section titled “server?”Server<any>
state?
Section titled “state?”State
Shokupan<any>
signal?
Section titled “signal?”AbortSignal
enableMiddlewareTracking?
Section titled “enableMiddlewareTracking?”boolean = false
requestId?
Section titled “requestId?”string
Returns
Section titled “Returns”ShokupanContext<State, Params>
Properties
Section titled “Properties”[$debug]?
Section titled “[$debug]?”
optional[$debug]:DebugCollector
Defined in: src/context.ts:146
[$finalResponse]?
Section titled “[$finalResponse]?”
optional[$finalResponse]:Response
Defined in: src/context.ts:147
[$onWsMessage]()?
Section titled “[$onWsMessage]()?”
optional[$onWsMessage]: (msg) =>void
Defined in: src/context.ts:174
Parameters
Section titled “Parameters”any
Returns
Section titled “Returns”void
[$rawBody]?
Section titled “[$rawBody]?”
optional[$rawBody]:string|ArrayBuffer|Uint8Array<ArrayBufferLike>
Defined in: src/context.ts:148
[$routeMatched]
Section titled “[$routeMatched]”[$routeMatched]:
boolean=false
Defined in: src/context.ts:172
[$ws]?
Section titled “[$ws]?”
optional[$ws]:ServerWebSocket<any>
Defined in: src/context.ts:202
[$wsMessages]?
Section titled “[$wsMessages]?”
optional[$wsMessages]:any[]
Defined in: src/context.ts:173
readonlyoptionalapp:Shokupan<any>
Defined in: src/context.ts:244
handlerStack
Section titled “handlerStack”handlerStack:
HandlerStackItem[] =[]
Defined in: src/context.ts:143
isHtmx
Section titled “isHtmx”isHtmx:
boolean
Defined in: src/plugins/application/htmx/index.ts:14
Checks if the request is an HTMX request.
isHtmxBoosted
Section titled “isHtmxBoosted”isHtmxBoosted:
boolean
Defined in: src/plugins/application/htmx/index.ts:18
Checks if the request is boosting.
isUpgraded
Section titled “isUpgraded”isUpgraded:
boolean=false
Defined in: src/context.ts:430
matchedRoute?
Section titled “matchedRoute?”
optionalmatchedRoute:ShokupanRoute
Defined in: src/context.ts:175
params
Section titled “params”params:
Params
Defined in: src/context.ts:141
request
Section titled “request”
readonlyrequest:any
Defined in: src/context.ts:241
server?
Section titled “server?”
readonlyoptionalserver:Server<any>
Defined in: src/context.ts:242
session
Section titled “session”session:
SessionData&object
Defined in: src/plugins/middleware/session.ts:301
Type Declaration
Section titled “Type Declaration”id:
string
destroy()
Section titled “destroy()”destroy():
Promise<void>
Returns
Section titled “Returns”Promise<void>
regenerate()
Section titled “regenerate()”regenerate():
Promise<void>
Returns
Section titled “Returns”Promise<void>
reload()
Section titled “reload()”reload():
Promise<void>
Returns
Section titled “Returns”Promise<void>
save()
Section titled “save()”save():
Promise<void>
Returns
Section titled “Returns”Promise<void>
touch()
Section titled “touch()”touch():
void
Returns
Section titled “Returns”void
sessionID
Section titled “sessionID”sessionID:
string
Defined in: src/plugins/middleware/session.ts:302
sessionStore
Section titled “sessionStore”sessionStore:
Store
Defined in: src/plugins/middleware/session.ts:303
signal?
Section titled “signal?”
readonlyoptionalsignal:AbortSignal
Defined in: src/context.ts:245
state:
State
Defined in: src/context.ts:142
Accessors
Section titled “Accessors”cookies
Section titled “cookies”Get Signature
Section titled “Get Signature”get cookies():
Record<string,string>
Defined in: src/context.ts:336
Request cookies
Returns
Section titled “Returns”Record<string, string>
headers
Section titled “headers”Get Signature
Section titled “Get Signature”get headers():
any
Defined in: src/context.ts:387
Request headers
Returns
Section titled “Returns”any
Get Signature
Section titled “Get Signature”get host():
string
Defined in: src/context.ts:361
Request host (e.g. “localhost:3000”)
Returns
Section titled “Returns”string
hostname
Section titled “hostname”Get Signature
Section titled “Get Signature”get hostname():
string
Defined in: src/context.ts:354
Request hostname (e.g. “localhost”)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get io():
Server<DefaultEventsMap,DefaultEventsMap,DefaultEventsMap,any> |undefined
Defined in: src/context.ts:418
Socket.io server
Returns
Section titled “Returns”Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any> | undefined
Get Signature
Section titled “Get Signature”get ip():
SocketAddress|null|undefined
Defined in: src/context.ts:349
Client IP address
Returns
Section titled “Returns”SocketAddress | null | undefined
logger
Section titled “logger”Get Signature
Section titled “Get Signature”get logger():
Logger|undefined
Defined in: src/context.ts:153
Application logger instance
Returns
Section titled “Returns”Logger | undefined
method
Section titled “method”Get Signature
Section titled “Get Signature”get method():
any
Defined in: src/context.ts:284
HTTP method
Returns
Section titled “Returns”any
nativeStream
Section titled “nativeStream”Get Signature
Section titled “Get Signature”get nativeStream():
ReadableStream<Uint8Array<ArrayBufferLike>> |null
Defined in: src/context.ts:721
Exposes the raw, unread incoming ReadableStream of the HTTP request body.
Use this if you want to manually process chunks (e.g., custom streaming parsers)
without anything being buffered to memory or disk first.
Returns
Section titled “Returns”ReadableStream<Uint8Array<ArrayBufferLike>> | null
origin
Section titled “origin”Get Signature
Section titled “Get Signature”get origin():
string
Defined in: src/context.ts:380
Request origin (e.g. “http://localhost:3000”)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get path():
any
Defined in: src/context.ts:288
Request path
Returns
Section titled “Returns”any
protocol
Section titled “protocol”Get Signature
Section titled “Get Signature”get protocol():
string
Defined in: src/context.ts:368
Request protocol (e.g. “http:”, “https:“)
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get query():
Record<string,any>
Defined in: src/context.ts:323
Request query params
Returns
Section titled “Returns”Record<string, any>
Get Signature
Section titled “Get Signature”get req():
any
Defined in: src/context.ts:280
Base request
Returns
Section titled “Returns”any
requestBody
Section titled “requestBody”Get Signature
Section titled “Get Signature”get requestBody():
any
Defined in: src/context.ts:701
Gets the parsed request body if it has been read.
Returns
Section titled “Returns”any
requestId
Section titled “requestId”Get Signature
Section titled “Get Signature”get requestId():
string
Defined in: src/context.ts:215
Returns
Section titled “Returns”string
Get Signature
Section titled “Get Signature”get res():
ShokupanResponse
Defined in: src/context.ts:398
Base response object
Returns
Section titled “Returns”response
Section titled “response”Get Signature
Section titled “Get Signature”get response():
ShokupanResponse
Defined in: src/context.ts:160
Response object (lazy-initialized)
Returns
Section titled “Returns”responseBody
Section titled “responseBody”Get Signature
Section titled “Get Signature”get responseBody():
string|ArrayBuffer|Uint8Array<ArrayBufferLike> |undefined
Defined in: src/context.ts:403
Get the raw response body content (if available)
Returns
Section titled “Returns”string | ArrayBuffer | Uint8Array<ArrayBufferLike> | undefined
secure
Section titled “secure”Get Signature
Section titled “Get Signature”get secure():
boolean
Defined in: src/context.ts:375
Whether request is secure (https)
Returns
Section titled “Returns”boolean
socket
Section titled “socket”Get Signature
Section titled “Get Signature”get socket():
Socket<DefaultEventsMap,DefaultEventsMap,DefaultEventsMap,any> |undefined
Defined in: src/context.ts:413
Socket.io socket
Returns
Section titled “Returns”Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any> | undefined
Get Signature
Section titled “Get Signature”get url():
URL
Defined in: src/context.ts:268
Returns
Section titled “Returns”URL
Get Signature
Section titled “Get Signature”get ws():
ServerWebSocket<any> |undefined
Defined in: src/context.ts:408
Raw WebSocket connection
Returns
Section titled “Returns”ServerWebSocket<any> | undefined
Methods
Section titled “Methods”body()
Section titled “body()”body<
T>():Promise<T>
Defined in: src/context.ts:677
Type Parameters
Section titled “Type Parameters”T = any
Returns
Section titled “Returns”Promise<T>
emit()
Section titled “emit()”emit(
event,data?):void
Defined in: src/context.ts:854
Emit an event to the client (WebSocket only)
Parameters
Section titled “Parameters”string
Event name
any
Event data (Must be JSON serializable)
Returns
Section titled “Returns”void
file()
Section titled “file()”file(
path,fileOptions?,responseOptions?):Promise<Response>
Defined in: src/context.ts:1007
Respond with a file
Parameters
Section titled “Parameters”string
fileOptions?
Section titled “fileOptions?”BlobPropertyBag
responseOptions?
Section titled “responseOptions?”ResponseInit
Returns
Section titled “Returns”Promise<Response>
get(
name):any
Defined in: src/context.ts:393
Get a request header
Parameters
Section titled “Parameters”string
Header name
Returns
Section titled “Returns”any
html()
Section titled “html()”html(
html,status?,headers?):Promise<Response>
Defined in: src/context.ts:933
Respond with HTML content
Parameters
Section titled “Parameters”string | Promise<string>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
htmxRedirect()
Section titled “htmxRedirect()”htmxRedirect(
url):void
Defined in: src/plugins/application/htmx/index.ts:30
Sets the HX-Redirect header.
Parameters
Section titled “Parameters”string
Returns
Section titled “Returns”void
json()
Section titled “json()”json(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:865
Respond with a JSON object
Parameters
Section titled “Parameters”object | Promise<object>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
jsx(
element,args?,status?,headers?):Promise<Response>
Defined in: src/context.ts:1069
Render a JSX element
Parameters
Section titled “Parameters”element
Section titled “element”any
JSX Element
unknown
JSX Element Args/Props
status?
Section titled “status?”number
HTTP Status
headers?
Section titled “headers?”HTTP Headers
Returns
Section titled “Returns”Promise<Response>
nativeFormData()
Section titled “nativeFormData()”nativeFormData():
Promise<FormData>
Defined in: src/context.ts:712
Bypasses the configured maxBodySize and memory buffering, directly invoking the
underlying native runtime’s FormData parser.
In Bun, this handles large files by seamlessly backing them up to disk, keeping memory usage extremely low. Use this when handling large file uploads.
Returns
Section titled “Returns”Promise<FormData>
onSocketDisconnect()
Section titled “onSocketDisconnect()”onSocketDisconnect(
callback):void
Defined in: src/context.ts:191
Registers a callback to be executed when the associated WebSocket disconnects. This is only applicable for requests that are part of a WebSocket interaction or upgrade.
Parameters
Section titled “Parameters”callback
Section titled “callback”() => void | Promise<void>
Returns
Section titled “Returns”void
parseBody()
Section titled “parseBody()”parseBody():
Promise<void>
Defined in: src/context.ts:730
Pre-parse the request body before handler execution. This improves performance and enables Node.js compatibility for large payloads. Errors are deferred until the body is actually accessed in the handler.
Returns
Section titled “Returns”Promise<void>
pipe()
Section titled “pipe()”pipe(
stream,options?):Response
Defined in: src/context.ts:1089
Pipe a ReadableStream to the response
Parameters
Section titled “Parameters”stream
Section titled “stream”ReadableStream
ReadableStream to pipe
options?
Section titled “options?”ResponseInit
Response options (status, headers)
Returns
Section titled “Returns”Response
pushUrl()
Section titled “pushUrl()”pushUrl(
url):void
Defined in: src/plugins/application/htmx/index.ts:26
Sets the HX-Push-Url header.
Parameters
Section titled “Parameters”string | false
Returns
Section titled “Returns”void
redirect()
Section titled “redirect()”redirect(
url,status):Promise<Response>
Defined in: src/context.ts:955
Respond with a redirect
Parameters
Section titled “Parameters”string | Promise<string>
status
Section titled “status”number = 302
Returns
Section titled “Returns”Promise<Response>
refresh()
Section titled “refresh()”refresh():
void
Defined in: src/plugins/application/htmx/index.ts:34
Sets the HX-Refresh header.
Returns
Section titled “Returns”void
respond()
Section titled “respond()”respond(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:778
Respond with automatic content negotiation Uses Accept header to determine the best response format
Parameters
Section titled “Parameters”any
Data to respond with
status?
Section titled “status?”number
HTTP status code
headers?
Section titled “headers?”Additional headers
Returns
Section titled “Returns”Promise<Response>
send()
Section titled “send()”send(
body?,options?):Response
Defined in: src/context.ts:832
Send a response
Parameters
Section titled “Parameters”BodyInit
Response body
options?
Section titled “options?”ResponseInit
Response options
Returns
Section titled “Returns”Response
Response
set(
key,value):ShokupanContext<State,Params>
Defined in: src/context.ts:425
Helper to set a header on the response
Parameters
Section titled “Parameters”string
Header key
string
Header value
Returns
Section titled “Returns”ShokupanContext<State, Params>
setCookie()
Section titled “setCookie()”setCookie(
name,value,options):ShokupanContext<State,Params>
Defined in: src/context.ts:603
Set a cookie
Parameters
Section titled “Parameters”string
Cookie name
string
Cookie value
options
Section titled “options”CookieOptions = {}
Cookie options
Returns
Section titled “Returns”ShokupanContext<State, Params>
setRenderer()
Section titled “setRenderer()”setRenderer(
renderer):void
Defined in: src/context.ts:210
Parameters
Section titled “Parameters”renderer
Section titled “renderer”Returns
Section titled “Returns”void
status()
Section titled “status()”status(
statusCode):Promise<Response>
Defined in: src/context.ts:991
Respond with a status code DOES NOT CHAIN!
Parameters
Section titled “Parameters”statusCode
Section titled “statusCode”number | Promise<number>
Returns
Section titled “Returns”Promise<Response>
stream()
Section titled “stream()”stream(
callback,onError?):Response
Defined in: src/context.ts:1246
Generic streaming helper for binary/text data
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives a StreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
streamSSE()
Section titled “streamSSE()”streamSSE(
callback,onError?):Response
Defined in: src/context.ts:1324
Server-Sent Events (SSE) streaming helper
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives an SSEStreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
streamText()
Section titled “streamText()”streamText(
callback,onError?):Response
Defined in: src/context.ts:1287
Text streaming helper with proper headers
Parameters
Section titled “Parameters”callback
Section titled “callback”(stream) => void | Promise<void>
Callback function that receives a TextStreamHelper
onError?
Section titled “onError?”Optional error handler
Returns
Section titled “Returns”Response
text()
Section titled “text()”text(
data,status?,headers?):Promise<Response>
Defined in: src/context.ts:902
Respond with a text string
Parameters
Section titled “Parameters”string | Promise<string>
status?
Section titled “status?”number
headers?
Section titled “headers?”Returns
Section titled “Returns”Promise<Response>
trigger()
Section titled “trigger()”trigger(
event,options?):void
Defined in: src/plugins/application/htmx/index.ts:22
Sets the HX-Trigger header.
Parameters
Section titled “Parameters”string | Record<string, any>
options?
Section titled “options?”after?
Section titled “after?”"receive" | "settle" | "swap"
Returns
Section titled “Returns”void
upgrade()
Section titled “upgrade()”upgrade(
options?):boolean
Defined in: src/context.ts:452
Upgrades the request to a WebSocket connection.
Parameters
Section titled “Parameters”options?
Section titled “options?”Upgrade options or inline WebSocket handlers
[Request, ...options: ([State] extends [undefined] ? [options?: { data?: undefined; headers?: HeadersInit }] : [options: { data: State; headers?: HeadersInit }])[]][1] | InlineWebSocketHandlers<State> & object
Returns
Section titled “Returns”boolean
true if upgraded, false otherwise
This method will link the WebSocket connection to the context object, allowing you to access the connection in your handlers.
Example
Section titled “Example”app.get('/ws', (ctx) => { ctx.upgrade({ open: (ctx, ws) => ws.send("Connected"), message: (ctx, ws, msg) => ws.send(msg), close: (ctx, ws) => console.log("Disconnected") });});