Skip to content

Commit 6972b25

Browse files
committed
feat(app): app.render optional object
1 parent a145ac0 commit 6972b25

3 files changed

Lines changed: 51 additions & 3 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
'astro': major
3+
---
4+
5+
The adapter API now offers a simpler signature for rendering. The `render()` method on App now accepts an `options` object.
6+
7+
```diff
8+
- app.render(request, undefined, locals)
9+
+ app.render(request, { locals })
10+
```
11+
The current signature is deprecated but will continue to function until next major version.

packages/astro/src/core/app/index.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,26 @@ export class App {
145145
return routeData;
146146
}
147147

148-
async render(request: Request, routeData?: RouteData, locals?: object): Promise<Response> {
148+
async render(request: Request, options?: { routeData?: RouteData, locals?: object }): Promise<Response>
149+
async render(request: Request, routeData?: RouteData, locals?: object): Promise<Response>
150+
async render(request: Request): Promise<Response> {
151+
let routeData: RouteData | undefined;
152+
let locals: object | undefined;
153+
154+
if (arguments.length === 3) {
155+
routeData = arguments[1];
156+
locals = arguments[2];
157+
}
158+
else if (arguments.length === 2) {
159+
const options = arguments[1];
160+
if (options && 'routeData' in options) {
161+
routeData = options.routeData;
162+
}
163+
if (options && 'locals' in options) {
164+
locals = options.locals;
165+
}
166+
}
167+
149168
// Handle requests with duplicate slashes gracefully by cloning with a cleaned-up request URL
150169
if (request.url !== collapseDuplicateSlashes(request.url)) {
151170
request = new Request(collapseDuplicateSlashes(request.url), request);

packages/astro/src/core/app/node.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,29 @@ export class NodeApp extends App {
116116
}
117117
return super.match(req, opts);
118118
}
119-
render(req: NodeIncomingMessage | Request, routeData?: RouteData, locals?: object) {
119+
render(request: NodeIncomingMessage | Request, options?: { routeData?: RouteData, locals?: object }): Promise<Response>
120+
render(request: NodeIncomingMessage | Request, routeData?: RouteData, locals?: object): Promise<Response>
121+
render(req: NodeIncomingMessage | Request) {
122+
let routeData: RouteData | undefined;
123+
let locals: object | undefined;
124+
125+
if (arguments.length === 3) {
126+
routeData = arguments[1];
127+
locals = arguments[2];
128+
}
129+
else if (arguments.length === 2) {
130+
const options = arguments[1];
131+
if (options && 'routeData' in options) {
132+
routeData = options.routeData;
133+
}
134+
if (options && 'locals' in options) {
135+
locals = options.locals;
136+
}
137+
}
120138
if (!(req instanceof Request)) {
121139
req = createRequestFromNodeRequest(req);
122140
}
123-
return super.render(req, routeData, locals);
141+
return super.render(req, { routeData, locals });
124142
}
125143
}
126144

0 commit comments

Comments
 (0)