diff --git a/docs/canary/concepts/context.md b/docs/canary/concepts/context.md index 473966611d4..54d2042a6d0 100644 --- a/docs/canary/concepts/context.md +++ b/docs/canary/concepts/context.md @@ -39,9 +39,9 @@ Contains the incoming ```ts app.get("/", (ctx) => { - console.log("Request: ", ctx.req); + console.log("Request: ", ctx.request); - if (ctx.req.headers.has("X-Foo")) { + if (ctx.request.headers.has("X-Foo")) { // do something } diff --git a/docs/canary/examples/migration-guide.md b/docs/canary/examples/migration-guide.md index d3ac737e6db..5eec3916c02 100644 --- a/docs/canary/examples/migration-guide.md +++ b/docs/canary/examples/migration-guide.md @@ -187,7 +187,7 @@ have a trailing slash at the end or that they will never have one. Middleware, handler and route component signatures have been unified to all look the same. Instead of receiving two arguments, they receive one. The `Request` -object is stored on the context object as `ctx.req`. +object is stored on the context object as `ctx.request`. ```diff middleware.ts - const middleware = (req, ctx) => new Response("ok"); diff --git a/packages/fresh/src/context.ts b/packages/fresh/src/context.ts index 3f0d4353fd2..0f70e0916ee 100644 --- a/packages/fresh/src/context.ts +++ b/packages/fresh/src/context.ts @@ -69,7 +69,9 @@ export class Context { * certain search parameters are set. */ readonly url: URL; - /** The original incoming {@linkcode Request} object. */ + /** The original incoming `Request` object` */ + readonly request: Request; + /** @deprecated This is an alias for internal use only. Use {@linkcode FreshContext[request]} instead. */ readonly req: Request; /** The matched route pattern. */ readonly route: string | null; @@ -126,7 +128,7 @@ export class Context { } constructor( - req: Request, + request: Request, url: URL, info: Deno.ServeHandlerInfo, route: string | null, @@ -136,7 +138,8 @@ export class Context { buildCache: BuildCache, ) { this.url = url; - this.req = req; + this.request = request; + this.req = request; this.info = info; this.params = params; this.route = route; diff --git a/packages/fresh/src/dev/builder.ts b/packages/fresh/src/dev/builder.ts index 1495e8a6571..d5b4bb5a233 100644 --- a/packages/fresh/src/dev/builder.ts +++ b/packages/fresh/src/dev/builder.ts @@ -192,7 +192,7 @@ export class Builder { await this.#ready.promise; return ctx.next(); }) - .all("*", (ctx) => appHandler(ctx.req, ctx.info)); + .all("*", (ctx) => appHandler(ctx.request, ctx.info)); devApp.config.root = this.config.root; devApp.config.mode = "development"; diff --git a/packages/fresh/src/dev/middlewares/automatic_workspace_folders.ts b/packages/fresh/src/dev/middlewares/automatic_workspace_folders.ts index 6138ce5b364..56f10395b4c 100644 --- a/packages/fresh/src/dev/middlewares/automatic_workspace_folders.ts +++ b/packages/fresh/src/dev/middlewares/automatic_workspace_folders.ts @@ -40,7 +40,7 @@ export function automaticWorkspaceFolders(root: string): Middleware { content ??= JSON.stringify({ workspace: { root, uuid } }, undefined, 2); etag ??= await eTag(content); - const noneMatchValue = ctx.req.headers.get("if-none-match"); + const noneMatchValue = ctx.request.headers.get("if-none-match"); if (!ifNoneMatch(noneMatchValue, etag)) { return new Response(undefined, { status: 304, headers: { etag } }); } diff --git a/packages/fresh/src/dev/middlewares/error_overlay/middleware.tsx b/packages/fresh/src/dev/middlewares/error_overlay/middleware.tsx index b8b6e2d67c5..0010d48aca5 100644 --- a/packages/fresh/src/dev/middlewares/error_overlay/middleware.tsx +++ b/packages/fresh/src/dev/middlewares/error_overlay/middleware.tsx @@ -14,7 +14,7 @@ export function devErrorOverlay(): Middleware { try { return await ctx.next(); } catch (err) { - if (ctx.req.headers.get("accept")?.includes("text/html")) { + if (ctx.request.headers.get("accept")?.includes("text/html")) { let init: ResponseInit | undefined; if (err instanceof HttpError) { if (err.status < 500) throw err; diff --git a/packages/fresh/src/dev/middlewares/live_reload.ts b/packages/fresh/src/dev/middlewares/live_reload.ts index 7f67794cbbd..c9c146f90af 100644 --- a/packages/fresh/src/dev/middlewares/live_reload.ts +++ b/packages/fresh/src/dev/middlewares/live_reload.ts @@ -6,12 +6,12 @@ export function liveReload(): Middleware { const revision = Date.now(); return (ctx) => { - const { config, req, url } = ctx; + const { config, request, url } = ctx; const aliveUrl = config.basePath + ALIVE_URL; if (url.pathname === aliveUrl) { - if (req.headers.get("upgrade") !== "websocket") { + if (request.headers.get("upgrade") !== "websocket") { return new Response(null, { status: 501 }); } @@ -20,7 +20,7 @@ export function liveReload(): Middleware { // the client to know when the server is back up. Once we // have HMR we'll actively start sending messages back // and forth. - const { response, socket } = Deno.upgradeWebSocket(req); + const { response, socket } = Deno.upgradeWebSocket(request); socket.addEventListener("open", () => { socket.send( diff --git a/packages/fresh/src/handlers.ts b/packages/fresh/src/handlers.ts index 4136f34546d..5a80b02bff5 100644 --- a/packages/fresh/src/handlers.ts +++ b/packages/fresh/src/handlers.ts @@ -89,7 +89,7 @@ export function page(data?: T, options?: { * * ```ts * export const handlers = define.handlers((ctx) => { - * return new Response(`Hello from a ${ctx.req.method} request!`); + * return new Response(`Hello from a ${ctx.request.method} request!`); * }); * ``` */ diff --git a/packages/fresh/src/middlewares/cors.ts b/packages/fresh/src/middlewares/cors.ts index 00fd0904a1e..97f90d45d0c 100644 --- a/packages/fresh/src/middlewares/cors.ts +++ b/packages/fresh/src/middlewares/cors.ts @@ -94,7 +94,7 @@ export function cors(options?: CORSOptions): Middleware { const optsOrigin = opts.origin; return async (ctx) => { - const requestOrigin = ctx.req.headers.get("origin") || ""; + const requestOrigin = ctx.request.headers.get("origin") || ""; let allowOrigin: string | null = null; if (typeof optsOrigin === "string") { @@ -115,7 +115,7 @@ export function cors(options?: CORSOptions): Middleware { vary.add("Origin"); } - if (ctx.req.method === "OPTIONS") { + if (ctx.request.method === "OPTIONS") { const headers = new Headers(); addHeaderProperties( @@ -137,7 +137,7 @@ export function cors(options?: CORSOptions): Middleware { let allowHeaders = opts.allowHeaders; if (!allowHeaders?.length) { - const reqHeaders = ctx.req.headers.get( + const reqHeaders = ctx.request.headers.get( "Access-Control-Request-Headers", ); if (reqHeaders) { diff --git a/packages/fresh/src/middlewares/csrf.ts b/packages/fresh/src/middlewares/csrf.ts index 5d080cfa7cd..46093245027 100644 --- a/packages/fresh/src/middlewares/csrf.ts +++ b/packages/fresh/src/middlewares/csrf.ts @@ -78,7 +78,7 @@ export function csrf( }; return async (ctx) => { - const { method, headers } = ctx.req; + const { method, headers } = ctx.request; // Safe methods if (method === "GET" || method === "HEAD" || method === "OPTIONS") { diff --git a/packages/fresh/src/middlewares/mod.ts b/packages/fresh/src/middlewares/mod.ts index 62a1913f166..7a0558121d1 100644 --- a/packages/fresh/src/middlewares/mod.ts +++ b/packages/fresh/src/middlewares/mod.ts @@ -42,7 +42,7 @@ import { recordSpanError, tracer } from "../otel.ts"; * // checking and code completion. It does not register the middleware with the * // app. * const loggerMiddleware = define.middleware((ctx) => { - * console.log(`${ctx.req.method} ${ctx.req.url}`); + * console.log(`${ctx.request.method} ${ctx.request.url}`); * // Call the next middleware * return ctx.next(); * }); diff --git a/packages/fresh/src/middlewares/static_files.ts b/packages/fresh/src/middlewares/static_files.ts index 6f0c4cac25d..8c8c6d2e30b 100644 --- a/packages/fresh/src/middlewares/static_files.ts +++ b/packages/fresh/src/middlewares/static_files.ts @@ -13,7 +13,7 @@ import { getBuildCache } from "../context.ts"; */ export function staticFiles(): Middleware { return async function freshServeStaticFiles(ctx) { - const { req, url, config } = ctx; + const { request, url, config } = ctx; const buildCache = getBuildCache(ctx); if (buildCache === null) return await ctx.next(); @@ -36,7 +36,7 @@ export function staticFiles(): Middleware { return await ctx.next(); } - if (req.method !== "GET" && req.method !== "HEAD") { + if (request.method !== "GET" && request.method !== "HEAD") { file.close(); return new Response("Method Not Allowed", { status: 405 }); } @@ -68,7 +68,7 @@ export function staticFiles(): Middleware { vary: "If-None-Match", }); - const ifNoneMatch = req.headers.get("If-None-Match"); + const ifNoneMatch = request.headers.get("If-None-Match"); if ( ifNoneMatch !== null && (ifNoneMatch === etag || ifNoneMatch === `W/"${etag}"`) @@ -98,7 +98,7 @@ export function staticFiles(): Middleware { } headers.set("Content-Length", String(file.size)); - if (req.method === "HEAD") { + if (request.method === "HEAD") { file.close(); return new Response(null, { status: 200, headers }); } diff --git a/packages/fresh/src/render.ts b/packages/fresh/src/render.ts index 844b2a8d034..7c72975e328 100644 --- a/packages/fresh/src/render.ts +++ b/packages/fresh/src/render.ts @@ -82,7 +82,7 @@ export async function renderRouteComponent( info: ctx.info, isPartial: ctx.isPartial, params: ctx.params, - req: ctx.req, + req: ctx.request, state: ctx.state, url: ctx.url, }; diff --git a/packages/fresh/src/segments.ts b/packages/fresh/src/segments.ts index 63c31448b22..199bdc14180 100644 --- a/packages/fresh/src/segments.ts +++ b/packages/fresh/src/segments.ts @@ -153,7 +153,7 @@ export async function renderRoute( internals.layouts = []; } - const method = ctx.req.method as Method; + const method = ctx.request.method as Method; const handlers = route.handler; if (handlers === undefined) { diff --git a/packages/fresh/tests/partials_test.tsx b/packages/fresh/tests/partials_test.tsx index 2e8770c6a56..b9bbb9886ed 100644 --- a/packages/fresh/tests/partials_test.tsx +++ b/packages/fresh/tests/partials_test.tsx @@ -1774,7 +1774,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -1875,7 +1875,7 @@ Deno.test({ ); }) .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = String(data.get("name")); return new Response(null, { @@ -1920,7 +1920,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -1979,7 +1979,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( @@ -2040,7 +2040,7 @@ Deno.test({ fn: async () => { const app = testApp() .post("/partial", async (ctx) => { - const data = await ctx.req.formData(); + const data = await ctx.request.formData(); const name = data.get("name"); const submitter = data.get("submitter"); return ctx.render( diff --git a/packages/init/src/init.ts b/packages/init/src/init.ts index de387db0269..25f9555b8f3 100644 --- a/packages/init/src/init.ts +++ b/packages/init/src/init.ts @@ -401,7 +401,7 @@ app.get("/api2/:name", (ctx) => { // this can also be defined via a file. feel free to delete this! const exampleLoggerMiddleware = define.middleware((ctx) => { - console.log(\`\${ctx.req.method} \${ctx.req.url}\`); + console.log(\`\${ctx.request.method} \${ctx.request.url}\`); return ctx.next(); }); app.use(exampleLoggerMiddleware); diff --git a/packages/update/src/update.ts b/packages/update/src/update.ts index f1d71b67680..420cd60ebe8 100644 --- a/packages/update/src/update.ts +++ b/packages/update/src/update.ts @@ -531,7 +531,7 @@ function maybePrependReqVar( declarationKind: tsmorph.VariableDeclarationKind.Const, declarations: [{ name: paramName, - initializer: "ctx.req", + initializer: "ctx.request", }], }); } diff --git a/packages/update/src/update_test.ts b/packages/update/src/update_test.ts index e2abdac761e..89f4c0aab92 100644 --- a/packages/update/src/update_test.ts +++ b/packages/update/src/update_test.ts @@ -158,7 +158,7 @@ interface State { export async function handler( ctx: FreshContext, ) { - const req = ctx.req; + const req = ctx.request; ctx.state.data = "myData"; ctx.state.url = req.url; @@ -185,7 +185,7 @@ Deno.test("update - 1.x project middlewares one arg", async () => { .toEqual(`import { FreshContext } from "fresh"; export async function handler(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; return new Response("hello world from: " + req.url); }`); @@ -266,19 +266,19 @@ export const handler: Handlers = { export const handler: Handlers = { async GET(ctx) { - const req = ctx.req; + const req = ctx.request; }, async POST(ctx) { - const req = ctx.req; + const req = ctx.request; }, async PATCH(ctx) { - const req = ctx.req; + const req = ctx.request; }, async PUT(ctx) { - const req = ctx.req; + const req = ctx.request; }, async DELETE(ctx) { - const req = ctx.req; + const req = ctx.request; }, };`); expect(files["/routes/foo.tsx"]) @@ -297,19 +297,19 @@ export const handler: Handlers = { export const handler: Handlers = { async GET(ctx) { - const request = ctx.req; + const request = ctx.request; }, async POST(ctx) { - const request = ctx.req; + const request = ctx.request; }, async PATCH(ctx) { - const request = ctx.req; + const request = ctx.request; }, async PUT(ctx) { - const request = ctx.req; + const request = ctx.request; }, async DELETE(ctx) { - const request = ctx.req; + const request = ctx.request; }, };`); expect(files["/routes/name-unused.tsx"]) @@ -342,7 +342,7 @@ Deno.test( expect(files["/routes/index.tsx"]) .toEqual(`export const handler: Handlers = { GET(ctx) { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -369,7 +369,7 @@ Deno.test.ignore( expect(files["/routes/index.tsx"]) .toEqual(`export const handler: Handlers = { GET: (ctx) => { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -377,7 +377,7 @@ Deno.test.ignore( expect(files["/routes/foo.tsx"]) .toEqual(`export const handler: Handlers = { GET: (ctx) => { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -405,7 +405,7 @@ Deno.test( export const handler = { GET(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; return Response.redirect(req.url); }, @@ -481,7 +481,7 @@ export default defineRoute(async (req, ctx) => { .toEqual(`import { defineApp } from "fresh/compat"; export default defineApp(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -489,7 +489,7 @@ export default defineApp(async (ctx) => { .toEqual(`import { defineLayout } from "fresh/compat"; export default defineLayout(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -497,7 +497,7 @@ export default defineLayout(async (ctx) => { .toEqual(`import { defineRoute } from "fresh/compat"; export default defineRoute(async (ctx) => { - const req = ctx.req; + const req = ctx.request; return null; });`); @@ -529,7 +529,7 @@ Deno.test( import { HttpError } from "fresh"; export default async function Index(ctx: FreshContext) { - const req = ctx.req; + const req = ctx.request; if (true) { throw new HttpError(404); diff --git a/www/routes/_middleware.ts b/www/routes/_middleware.ts index ca4a0e7a5ad..7467a5d576c 100644 --- a/www/routes/_middleware.ts +++ b/www/routes/_middleware.ts @@ -106,7 +106,7 @@ export async function handler( throw e; } finally { ga4( - ctx.req, + ctx.request, ctx, res!, start, diff --git a/www/routes/index.tsx b/www/routes/index.tsx index add6f473768..13155ac2244 100644 --- a/www/routes/index.tsx +++ b/www/routes/index.tsx @@ -16,9 +16,9 @@ import { define } from "../utils/state.ts"; export const handler = define.handlers({ GET(ctx) { - const { req } = ctx; - const accept = req.headers.get("accept"); - const userAgent = req.headers.get("user-agent"); + const { request } = ctx; + const accept = request.headers.get("accept"); + const userAgent = request.headers.get("user-agent"); if (userAgent?.includes("Deno/") && !accept?.includes("text/html")) { const path = `https://deno.land/x/fresh@${VERSIONS[0]}/init.ts`; return new Response(`Redirecting to ${path}`, { @@ -37,7 +37,7 @@ export const handler = define.handlers({ }, async POST(ctx) { const headers = new Headers(); - const form = await ctx.req.formData(); + const form = await ctx.request.formData(); const treat = form.get("treat"); headers.set("location", `/thanks?vote=${treat}`); return new Response(null, { diff --git a/www/routes/raw.ts b/www/routes/raw.ts index 503020a0273..fb393e57a51 100644 --- a/www/routes/raw.ts +++ b/www/routes/raw.ts @@ -18,7 +18,7 @@ const contentTypes = new Map([ export const handler = define.handlers({ async GET(ctx) { - const accept = ctx.req.headers.get("Accept"); + const accept = ctx.request.headers.get("Accept"); const isHTML = accept?.includes("text/html"); const { version, path } = ctx.params; diff --git a/www/routes/update.tsx b/www/routes/update.tsx index b36862b99d2..bd1a16399d3 100644 --- a/www/routes/update.tsx +++ b/www/routes/update.tsx @@ -2,8 +2,8 @@ import { define } from "../utils/state.ts"; import VERSIONS from "../../versions.json" with { type: "json" }; export const handler = define.handlers({ - GET({ req }) { - const accept = req.headers.get("accept"); + GET({ request }) { + const accept = request.headers.get("accept"); let path = "/docs/concepts/updating"; if (accept && !accept.includes("text/html")) { path = `https://deno.land/x/fresh@${VERSIONS[0]}/update.ts`;