Files
EpicNext-Cms/e2e/ui/process-shim.mjs
T
openhands 1dd584cd82 fix(ui): make fixture bundle browser-safe, fast and cacheable
The UI fixture bundle crashed at runtime, so every test waited out its
45s timeout:
- server-only modules leaked into the bundle and referenced node
  built-ins, the process global, and validated env at import time
- the previous platform: 'node' fix kept esbuild happy but emitted
  require() calls that cannot run in the browser

Fix it at the bundle boundary:
- alias node:* imports to e2e/ui/node-stubs.mjs (shape-compatible stubs,
  no real I/O)
- inject e2e/ui/process-shim.mjs for the process global
- define process.env.SKIP_ENV_VALIDATION=1 so src/env.ts skips parsing
  in the fixture (same escape hatch vitest uses)

Also make the fixture server fast to start:
- build JS and Tailwind CSS in parallel
- cache built assets in node_modules/.cache/nexst-ui-fixture keyed on a
  content hash of src/, fixtures, stubs and the server file
- startup drops from ~1.7s to ~220ms on cache hits
2026-10-17 17:13:59 +02:00

26 lines
770 B
JavaScript

// Minimal `process` shim injected into the UI fixture bundle. Server-only
// modules that leak into the bundle reference the `process` global at module
// scope (release ids, paths, etc). esbuild's `inject` rewrites those free
// identifier references to import from this file so evaluation cannot crash
// in the browser.
export const process = {
env: { NODE_ENV: "production" },
platform: "linux",
arch: "x64",
version: "v20.0.0",
versions: { node: "20.0.0" },
argv: [],
cwd: () => "/",
nextTick: (fn, ...args) => setTimeout(() => fn(...args), 0),
on: () => {},
once: () => {},
emit: () => {},
exit: () => {},
hrtime: Object.assign(() => [0, 0], { bigint: () => 0n }),
memoryUsage: () => ({ heapUsed: 0, rss: 0 }),
pid: 0,
};
export default process;