Skip to content

Commit ad09751

Browse files
committed
Add logic to only update the agent if it has changed.
1 parent 8607bc5 commit ad09751

1 file changed

Lines changed: 24 additions & 8 deletions

File tree

packages/cli/src/test-page.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
spawn,
88
} from "effection";
99
import { readFile } from "fs/promises";
10+
import { existsSync } from "fs";
1011
import { chromium, Page } from "playwright";
1112
import { 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

Comments
 (0)