@@ -116,6 +116,96 @@ test("It should log with streamifyResponse:true using body ReadableStream", asyn
116116 ] ) ;
117117} ) ;
118118
119+ test ( "It should log with Web Streams API using ReadableStream" , async ( t ) => {
120+ const input = "x" . repeat ( 1024 * 1024 ) ;
121+ const logger = t . mock . fn ( ) ;
122+ const handler = middy (
123+ async ( event , context , { signal } ) => {
124+ // Create a Web ReadableStream
125+ const stream = new ReadableStream ( {
126+ start ( controller ) {
127+ controller . enqueue ( input ) ;
128+ controller . close ( ) ;
129+ } ,
130+ } ) ;
131+ return stream ;
132+ } ,
133+ {
134+ streamifyResponse : true ,
135+ } ,
136+ ) . use (
137+ inputOutputLogger ( {
138+ logger,
139+ } ) ,
140+ ) ;
141+
142+ const event = { } ;
143+ let chunkResponse = "" ;
144+ const responseStream = createWritableStream ( ( chunk ) => {
145+ chunkResponse += chunk ;
146+ } ) ;
147+ const response = await handler ( event , responseStream , context ) ;
148+ equal ( response , undefined ) ;
149+ equal ( chunkResponse , input ) ;
150+ deepEqual ( logger . mock . calls [ 0 ] . arguments , [ { event : { } } ] ) ;
151+ deepEqual ( logger . mock . calls [ 1 ] . arguments , [
152+ {
153+ response : input ,
154+ } ,
155+ ] ) ;
156+ } ) ;
157+
158+ test ( "It should log with Web Streams API using body ReadableStream" , async ( t ) => {
159+ const input = "x" . repeat ( 1024 * 1024 ) ;
160+ const logger = t . mock . fn ( ) ;
161+ const handler = middy (
162+ async ( event , context , { signal } ) => {
163+ // Create a Web ReadableStream in the body
164+ const stream = new ReadableStream ( {
165+ start ( controller ) {
166+ controller . enqueue ( input ) ;
167+ controller . close ( ) ;
168+ } ,
169+ } ) ;
170+ return {
171+ statusCode : 200 ,
172+ headers : {
173+ "Content-Type" : "plain/text" ,
174+ } ,
175+ body : stream ,
176+ } ;
177+ } ,
178+ {
179+ streamifyResponse : true ,
180+ } ,
181+ ) . use (
182+ inputOutputLogger ( {
183+ logger,
184+ } ) ,
185+ ) ;
186+
187+ const event = { } ;
188+ let chunkResponse = "" ;
189+ const responseStream = createWritableStream ( ( chunk ) => {
190+ chunkResponse += chunk ;
191+ } ) ;
192+ const response = await handler ( event , responseStream , context ) ;
193+ equal ( response , undefined ) ;
194+ equal ( chunkResponse , input ) ;
195+ deepEqual ( logger . mock . calls [ 0 ] . arguments , [ { event : { } } ] ) ;
196+ deepEqual ( logger . mock . calls [ 1 ] . arguments , [
197+ {
198+ response : {
199+ statusCode : 200 ,
200+ headers : {
201+ "Content-Type" : "plain/text" ,
202+ } ,
203+ body : input ,
204+ } ,
205+ } ,
206+ ] ) ;
207+ } ) ;
208+
119209test ( "It should throw error when invalid logger" , async ( t ) => {
120210 const logger = false ;
121211
0 commit comments