1- import { test as base } from "@playwright/test" ;
1+ import { test as base , type Page } from "@playwright/test" ;
22import * as fs from "fs" ;
33import { AdvancedRouteFromHAR , requestResponseToEntry } from "./utils/types" ;
44import { parseContent , serveFromHar } from "./utils/serveFromHar" ;
@@ -9,47 +9,53 @@ export { customMatcher } from "./utils/matchers/customMatcher";
99export { parseContent } from "./utils/serveFromHar" ;
1010import * as path from "path" ;
1111
12- export const test = base . extend < {
13- advancedRouteFromHAR : AdvancedRouteFromHAR ;
14- } > ( {
15- advancedRouteFromHAR : async ( { page } , use ) => {
16- const originalRouteFromHAR = page . routeFromHAR . bind ( page ) ;
17- const advancedRouteFromHAR : AdvancedRouteFromHAR = async ( filename , options ) => {
18- if ( options ?. update ) {
19- const { matcher} = options ;
20- if ( matcher && "postProcess" in matcher ) {
21- await page . route ( options . url || / .* / , async ( route , request ) => {
22- const resp = await route . fetch ( ) ;
23- const response = matcher . postProcess ?.( await requestResponseToEntry ( request , resp , await page . context ( ) . cookies ( ) ) ) . response ;
24- if ( response )
25- route . fulfill ( {
26- status : response . status ,
27- headers : Object . fromEntries ( response . headers . map ( ( header ) => [ header . name , header . value ] ) ) ,
28- body : await parseContent ( response . content , path . dirname ( filename ) ) ,
29- } ) ;
30- } ) ;
31- }
32- // on update, we want to record the HAR just like the original playwright method
33- return originalRouteFromHAR ( filename , {
34- url : options . url ,
35- update : true ,
36- updateContent : options ?. updateContent ,
37- updateMode : options ?. updateMode ,
12+ export const advancedRouteFromHAR = async (
13+ { page } : { page : Page } ,
14+ use : ( fn : AdvancedRouteFromHAR ) => Promise < void > ,
15+ ) => {
16+ const originalRouteFromHAR = page . routeFromHAR . bind ( page ) ;
17+
18+ await use ( async ( filename , options ) => {
19+ if ( options ?. update ) {
20+ const { matcher } = options ;
21+ if ( matcher && "postProcess" in matcher ) {
22+ await page . route ( options . url || / .* / , async ( route , request ) => {
23+ const resp = await route . fetch ( ) ;
24+ const response = matcher . postProcess ?.(
25+ await requestResponseToEntry ( request , resp , await page . context ( ) . cookies ( ) ) ,
26+ ) . response ;
27+ if ( response )
28+ route . fulfill ( {
29+ status : response . status ,
30+ headers : Object . fromEntries ( response . headers . map ( ( header ) => [ header . name , header . value ] ) ) ,
31+ body : await parseContent ( response . content , path . dirname ( filename ) ) ,
32+ } ) ;
3833 } ) ;
39- } else {
40- const har = JSON . parse ( await fs . promises . readFile ( filename , { encoding : "utf8" } ) ) ;
41- return serveFromHar (
42- har ,
43- {
44- ...options ,
45- matcher : options ?. matcher ?? defaultMatcher ,
46- dirName : path . dirname ( filename ) ,
47- } ,
48- page ,
49- ) ;
5034 }
51- } ;
35+ // on update, we want to record the HAR just like the original playwright method
36+ return originalRouteFromHAR ( filename , {
37+ url : options . url ,
38+ update : true ,
39+ updateContent : options ?. updateContent ,
40+ updateMode : options ?. updateMode ,
41+ } ) ;
42+ } else {
43+ const har = JSON . parse ( await fs . promises . readFile ( filename , { encoding : "utf8" } ) ) ;
44+ return serveFromHar (
45+ har ,
46+ {
47+ ...options ,
48+ matcher : options ?. matcher ?? defaultMatcher ,
49+ dirName : path . dirname ( filename ) ,
50+ } ,
51+ page ,
52+ ) ;
53+ }
54+ } ) ;
55+ } ;
5256
53- await use ( advancedRouteFromHAR ) ;
54- } ,
57+ export const test = base . extend < {
58+ advancedRouteFromHAR : AdvancedRouteFromHAR ;
59+ } > ( {
60+ advancedRouteFromHAR,
5561} ) ;
0 commit comments