Skip to content

Commit

Permalink
feat(app): app.render optional object
Browse files Browse the repository at this point in the history
  • Loading branch information
lilnasy committed Nov 27, 2023
1 parent a145ac0 commit 585ce6f
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 3 deletions.
11 changes: 11 additions & 0 deletions .changeset/sharp-starfishes-compete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'astro': major
---

The adapter API now offers a simpler signature for rendering. The `render()` method on App now accepts an `options` object.

```diff
- app.render(request, undefined, locals)
+ app.render(request, { locals })
```
The current signature is deprecated but will continue to function until next major version.
20 changes: 19 additions & 1 deletion packages/astro/src/core/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,25 @@ export class App {
return routeData;
}

async render(request: Request, routeData?: RouteData, locals?: object): Promise<Response> {
async render(request: Request, options?: { routeData?: RouteData, locals?: object }): Promise<Response>
async render(request: Request, routeData?: RouteData, locals?: object): Promise<Response>
async render(request: Request, ...rest: any[]): Promise<Response> {
let routeData: RouteData | undefined;
let locals: object | undefined;
if (rest.length === 2) {
routeData = rest[0];
locals = rest[1];
}
else if (rest.length === 1) {
const [ options ] = rest;
if (options && 'routeData' in options) {
routeData = options.routeData;
}
if (options && 'locals' in options) {
locals = options.locals;
}
}

// Handle requests with duplicate slashes gracefully by cloning with a cleaned-up request URL
if (request.url !== collapseDuplicateSlashes(request.url)) {
request = new Request(collapseDuplicateSlashes(request.url), request);
Expand Down
21 changes: 19 additions & 2 deletions packages/astro/src/core/app/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,28 @@ export class NodeApp extends App {
}
return super.match(req, opts);
}
render(req: NodeIncomingMessage | Request, routeData?: RouteData, locals?: object) {
render(request: NodeIncomingMessage | Request, options?: { routeData?: RouteData, locals?: object }): Promise<Response>
render(request: NodeIncomingMessage | Request, routeData?: RouteData, locals?: object): Promise<Response>
render(req: NodeIncomingMessage | Request, ...rest: any[]) {
let routeData: RouteData | undefined;
let locals: object | undefined;
if (rest.length === 2) {
routeData = rest[0];
locals = rest[1];
}
else if (rest.length === 1) {
const [ options ] = rest;
if (options && 'routeData' in options) {
routeData = options.routeData;
}
if (options && 'locals' in options) {
locals = options.locals;
}
}
if (!(req instanceof Request)) {
req = createRequestFromNodeRequest(req);
}
return super.render(req, routeData, locals);
return super.render(req, { routeData, locals });
}
}

Expand Down

0 comments on commit 585ce6f

Please sign in to comment.