77 spawn ,
88} from "effection" ;
99import { readFile } from "fs/promises" ;
10+ import { existsSync } from "fs" ;
1011import { chromium , Page } from "playwright" ;
1112import { buildAttrs , BuildOptions } from "./build.js" ;
1213
@@ -24,6 +25,28 @@ export function useTestPage(
2425 let { browser, page } = yield * call ( async ( ) => {
2526 let browser = await chromium . launch ( { headless : false } ) ;
2627 let context = await browser . newContext ( ) ;
28+
29+ let digest = '' ;
30+
31+ await context . exposeBinding ( '$iagentupdate' , async ( { page } , options = { } ) => {
32+ let { init } = options ;
33+ if ( existsSync ( agentScriptPath ) ) {
34+ let decoder = new TextDecoder ( ) ;
35+ let buffer = await readFile ( agentScriptPath ) ;
36+
37+ let nextdigest = decoder . decode ( await crypto . subtle . digest ( 'SHA-1' , buffer ) ) ;
38+ if ( init || digest !== nextdigest ) {
39+ let source = decoder . decode (
40+ buffer ,
41+ ) ;
42+ await page . evaluate ( source ) ;
43+ digest = nextdigest ;
44+ }
45+ } else {
46+ await page . evaluate ( `console.log('agent script not found at "${ agentScriptPath } "')` ) ;
47+ }
48+ } ) ;
49+ await context . addInitScript ( '$iagentupdate({ init: true })' ) ;
2750 let page = await context . newPage ( ) ;
2851 await page . goto ( url ) ;
2952 return { browser, page } ;
@@ -34,14 +57,7 @@ export function useTestPage(
3457 try {
3558 yield * provide ( {
3659 * update ( ) {
37- let decoder = new TextDecoder ( ) ;
38- let source = decoder . decode (
39- yield * call ( ( ) => readFile ( agentScriptPath ) ) ,
40- ) ;
41- yield * call ( async ( ) => {
42- await page . addInitScript ( source ) ;
43- await page . evaluate ( source ) ;
44- } ) ;
60+ yield * call ( ( ) => page . evaluate ( '$iagentupdate()' ) ) ;
4561 yield * repl . reset ( ) ;
4662 } ,
4763 } ) ;
0 commit comments