@@ -5,9 +5,11 @@ import { MockedRequest } from 'msw';
55import { SetupServerApi } from 'msw/node' ;
66import { IsomorphicResponse } from '@mswjs/interceptors' ;
77
8+ import { Headers } from 'headers-polyfill' ;
9+
810import { DisposableObject } from '../pure/disposable-object' ;
911
10- import { GitHubApiRequest , RequestKind } from './gh-api-request' ;
12+ import { GetVariantAnalysisRepoResultRequest , GitHubApiRequest , RequestKind } from './gh-api-request' ;
1113
1214export class Recorder extends DisposableObject {
1315 private readonly allRequests = new Map < string , MockedRequest > ( ) ;
@@ -70,7 +72,28 @@ export class Recorder extends DisposableObject {
7072
7173 const fileName = `${ i } -${ request . request . kind } .json` ;
7274 const filePath = path . join ( scenarioDirectory , fileName ) ;
73- await fs . writeFile ( filePath , JSON . stringify ( request , null , 2 ) ) ;
75+
76+ let writtenRequest = {
77+ ...request
78+ } ;
79+
80+ if ( shouldWriteBodyToFile ( writtenRequest ) ) {
81+ const extension = writtenRequest . response . contentType === 'application/zip' ? 'zip' : 'bin' ;
82+
83+ const bodyFileName = `${ i } -${ writtenRequest . request . kind } .body.${ extension } ` ;
84+ const bodyFilePath = path . join ( scenarioDirectory , bodyFileName ) ;
85+ await fs . writeFile ( bodyFilePath , writtenRequest . response . body ) ;
86+
87+ writtenRequest = {
88+ ...writtenRequest ,
89+ response : {
90+ ...writtenRequest . response ,
91+ body : `file:${ bodyFileName } ` ,
92+ } ,
93+ } ;
94+ }
95+
96+ await fs . writeFile ( filePath , JSON . stringify ( writtenRequest , null , 2 ) ) ;
7497 }
7598
7699 this . stop ( ) ;
@@ -93,7 +116,7 @@ export class Recorder extends DisposableObject {
93116 return ;
94117 }
95118
96- const gitHubApiRequest = createGitHubApiRequest ( request . url . toString ( ) , response . status , response . body ) ;
119+ const gitHubApiRequest = createGitHubApiRequest ( request . url . toString ( ) , response . status , response . body , response . headers ) ;
97120 if ( ! gitHubApiRequest ) {
98121 return ;
99122 }
@@ -102,7 +125,7 @@ export class Recorder extends DisposableObject {
102125 }
103126}
104127
105- function createGitHubApiRequest ( url : string , status : number , body : string ) : GitHubApiRequest | undefined {
128+ function createGitHubApiRequest ( url : string , status : number , body : string , headers : Headers ) : GitHubApiRequest | undefined {
106129 if ( ! url ) {
107130 return undefined ;
108131 }
@@ -167,10 +190,15 @@ function createGitHubApiRequest(url: string, status: number, body: string): GitH
167190 } ,
168191 response : {
169192 status,
170- body : body as unknown as ArrayBuffer ,
193+ body : Buffer . from ( body ) ,
194+ contentType : headers . get ( 'content-type' ) ?? 'application/octet-stream' ,
171195 }
172196 } ;
173197 }
174198
175199 return undefined ;
176200}
201+
202+ function shouldWriteBodyToFile ( request : GitHubApiRequest ) : request is GetVariantAnalysisRepoResultRequest {
203+ return request . response . body instanceof Buffer ;
204+ }
0 commit comments