| 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 |