返回 DeepSeek-Reasonix
build-browser-page.mjs
根目录 / desktop / electron / scripts / build-browser-page.mjs
1 import { build } from "esbuild";
2 import { createHash } from "node:crypto";
3 import { mkdir, writeFile } from "node:fs/promises";
4 import { dirname, resolve } from "node:path";
5 import { fileURLToPath } from "node:url";
6 import { playwrightPageResource } from "./playwright-page-resource.mjs";
7
8 const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
9
10 export async function buildBrowserPage() {
11 await mkdir(resolve(root, "dist"), { recursive: true });
12 const playwright = await playwrightPageResource(resolve(root, "dist"));
13 const result = await build({
14 entryPoints: [resolve(root, "src/main/browser/pageRuntimeEntry.ts")],
15 bundle: true, platform: "browser", format: "iife", globalName: "ReasonixPageRuntime",
16 target: "es2022", keepNames: false, minify: true, write: false,
17 plugins: [{ name: "qualified-playwright-injection", setup(build) {
18 build.onResolve({ filter: /^reasonix-playwright-injected$/ }, () => ({ path: "injected", namespace: "reasonix-injected" }));
19 build.onLoad({ filter: /.*/, namespace: "reasonix-injected" }, () => ({ contents: playwright.source, loader: "js" }));
20 } }],
21 });
22 const source = result.outputFiles[0].text;
23 await mkdir(resolve(root, "dist"), { recursive: true });
24 await writeFile(resolve(root, "dist/browser-page.js"), source);
25 await writeFile(resolve(root, "dist/browser-page.json"), JSON.stringify({ version: 1, playwright: playwright.version, adapter: "password-values-redacted-v1", sha256: createHash("sha256").update(source).digest("hex") }) + "\n");
26 await build({ entryPoints: [resolve(root, "src/main/browser/recorderRenderer.ts")], outfile: resolve(root, "dist/browser-recorder.js"), bundle: true, platform: "browser", format: "iife", target: "es2022", keepNames: false, minify: true });
27 await build({ entryPoints: [resolve(root, "src/main/browser/recorderPreload.ts")], outfile: resolve(root, "dist/recorder-preload.cjs"), bundle: true, platform: "node", format: "cjs", external: ["electron"], target: "node22", minify: true });
28 }
29
30 if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) await buildBrowserPage();
31
31 lines Plain Text