File tree Expand file tree Collapse file tree 8 files changed +54
-22
lines changed
Expand file tree Collapse file tree 8 files changed +54
-22
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ " @opennextjs/aws " : minor
3+ ---
4+
5+ refactor: ` waitUntil ` passed around via ALS.
6+
7+ BREAKING CHANGE: ` waitUntil ` is passed around via ALS to fix #713 .
8+
9+ ` globalThis.openNextWaitUntil ` is no more available, you can access ` waitUntil `
10+ on the ALS context: ` globalThis.__openNextAls.getStore() `
11+
12+ The ` OpenNextHandler ` signature has changed: the second parameter was a ` StreamCreator ` .
13+ It was changed to be of type ` OpenNextHandlerOptions ` which has both a ` streamCreator ` key
14+ and a ` waitUntil ` key.
15+
16+ If you use a custom wrapper, you need to update the call to the handler as follow:
17+
18+ ``` ts
19+ // before
20+ globalThis .openNextWaitUntil = myWaitUntil ;
21+ handler (internalEvent , myStreamCreator );
22+
23+ // after
24+ handler (internalEvent , { streamCreator: myStreamCreator , waitUntil: myWaitUntil });
25+ ```
Original file line number Diff line number Diff line change @@ -11,12 +11,13 @@ import {
1111 convertBodyToReadableStream ,
1212 convertToQueryString ,
1313} from "../core/routing/util" ;
14+ import type { OpenNextHandlerOptions } from "types/overrides" ;
1415
1516globalThis . __openNextAls = new AsyncLocalStorage ( ) ;
1617
1718const defaultHandler = async (
1819 internalEvent : InternalEvent ,
19- options ?: { waitUntil ?: WaitUntil } ,
20+ options ?: OpenNextHandlerOptions ,
2021) : Promise < InternalResult > => {
2122 globalThis . isEdgeRuntime = true ;
2223
Original file line number Diff line number Diff line change @@ -22,10 +22,10 @@ import type {
2222 InternalEvent ,
2323 InternalResult ,
2424 StreamCreator ,
25- WaitUntil ,
2625} from "types/open-next.js" ;
2726import { emptyReadableStream , toReadableStream } from "utils/stream.js" ;
2827
28+ import type { OpenNextHandlerOptions } from "types/overrides.js" ;
2929import { createGenericHandler } from "../core/createGenericHandler.js" ;
3030import { resolveImageLoader } from "../core/resolve.js" ;
3131import { debug , error } from "./logger.js" ;
@@ -59,7 +59,7 @@ export const handler = await createGenericHandler({
5959
6060export async function defaultHandler (
6161 event : InternalEvent ,
62- options ?: { streamCreator ?: StreamCreator ; waitUntil ?: WaitUntil } ,
62+ options ?: OpenNextHandlerOptions ,
6363) : Promise < InternalResult > {
6464 // Images are handled via header and query param information.
6565 debug ( "handler event" , event ) ;
Original file line number Diff line number Diff line change @@ -2,10 +2,10 @@ import type {
22 InternalEvent ,
33 InternalResult ,
44 MiddlewareResult ,
5- WaitUntil ,
65} from "types/open-next" ;
76import { runWithOpenNextRequestContext } from "utils/promise" ;
87
8+ import type { OpenNextHandlerOptions } from "types/overrides" ;
99import { debug , error } from "../adapters/logger" ;
1010import { createGenericHandler } from "../core/createGenericHandler" ;
1111import {
@@ -25,7 +25,7 @@ globalThis.__openNextAls = new AsyncLocalStorage();
2525
2626const defaultHandler = async (
2727 internalEvent : InternalEvent ,
28- options ?: { waitUntil ?: WaitUntil } ,
28+ options ?: OpenNextHandlerOptions ,
2929) : Promise < InternalResult | MiddlewareResult > => {
3030 const originResolver = await resolveOriginResolver (
3131 globalThis . openNextConfig . middleware ?. originResolver ,
Original file line number Diff line number Diff line change @@ -7,11 +7,10 @@ import type {
77 InternalResult ,
88 ResolvedRoute ,
99 RoutingResult ,
10- StreamCreator ,
11- WaitUntil ,
1210} from "types/open-next" ;
1311import { runWithOpenNextRequestContext } from "utils/promise" ;
1412
13+ import type { OpenNextHandlerOptions } from "types/overrides" ;
1514import { debug , error , warn } from "../adapters/logger" ;
1615import { patchAsyncStorage } from "./patchAsyncStorage" ;
1716import { convertRes , createServerResponse } from "./routing/util" ;
@@ -30,10 +29,7 @@ patchAsyncStorage();
3029
3130export async function openNextHandler (
3231 internalEvent : InternalEvent ,
33- options ?: {
34- streamCreator ?: StreamCreator ;
35- waitUntil ?: WaitUntil ;
36- } ,
32+ options ?: OpenNextHandlerOptions ,
3733) : Promise < InternalResult > {
3834 const initialHeaders = internalEvent . headers ;
3935 // We run everything in the async local storage context so that it is available in the middleware as well as in NextServer
Original file line number Diff line number Diff line change 1- import type { InternalEvent , StreamCreator , WaitUntil } from "types/open-next" ;
2- import type { Wrapper , WrapperHandler } from "types/overrides" ;
1+ import type { InternalEvent } from "types/open-next" ;
2+ import type {
3+ OpenNextHandlerOptions ,
4+ Wrapper ,
5+ WrapperHandler ,
6+ } from "types/overrides" ;
37
48const dummyWrapper : WrapperHandler = async ( handler , converter ) => {
5- return async (
6- event : InternalEvent ,
7- options ?: { streamCreator ?: StreamCreator ; waitUntil ?: WaitUntil } ,
8- ) => {
9+ return async ( event : InternalEvent , options ?: OpenNextHandlerOptions ) => {
910 return await handler ( event , options ) ;
1011 } ;
1112} ;
Original file line number Diff line number Diff line change @@ -123,13 +123,17 @@ export type Wrapper<
123123 edgeRuntime ?: boolean ;
124124} ;
125125
126+ export type OpenNextHandlerOptions = {
127+ // Create a `Writeable` for streaming responses.
128+ streamCreator ?: StreamCreator ;
129+ // Extends the liftetime of the runtime after the response is returned.
130+ waitUntil ?: WaitUntil ;
131+ } ;
132+
126133export type OpenNextHandler <
127134 E extends BaseEventOrResult = InternalEvent ,
128135 R extends BaseEventOrResult = InternalResult ,
129- > = (
130- event : E ,
131- options ?: { streamCreator ?: StreamCreator ; waitUntil ?: WaitUntil } ,
132- ) => Promise < R > ;
136+ > = ( event : E , options ?: OpenNextHandlerOptions ) => Promise < R > ;
133137
134138export type Converter <
135139 E extends BaseEventOrResult = InternalEvent ,
Original file line number Diff line number Diff line change @@ -106,7 +106,12 @@ export function runWithOpenNextRequestContext<T>(
106106 {
107107 isISRRevalidation,
108108 waitUntil,
109- } : { isISRRevalidation : boolean ; waitUntil ?: WaitUntil } ,
109+ } : {
110+ // Whether we are in ISR revalidation
111+ isISRRevalidation : boolean ;
112+ // Extends the liftetime of the runtime after the response is returned.
113+ waitUntil ?: WaitUntil ;
114+ } ,
110115 fn : ( ) => Promise < T > ,
111116) : Promise < T > {
112117 return globalThis . __openNextAls . run (
You can’t perform that action at this time.
0 commit comments