Download Latest Version e2e@0.18.0 source code.zip (5.4 MB) Google Add to Preferred Sources
Home / @e2e-dev_web@0.13.0
Name Modified Size InfoDownloads / Week
Parent folder
@e2e-dev_web@0.13.0 source code.tar.gz < 9 hours ago 4.6 MB
@e2e-dev_web@0.13.0 source code.zip < 9 hours ago 5.4 MB
README.md < 9 hours ago 6.0 kB
Totals: 3 Items   10.0 MB 0

Minor Changes

  • #790 0d1ed15 Thanks @okwasniewski! - Breaking: e2e and every @e2e-dev package now need Node.js 22.22.3 or newer on Node.js 22, or 24.8.0 or newer (engines.node is ^22.22.3 || >=24.8.0). Node.js 22.12 through 22.22.2, 23, and 24.0 through 24.7 are no longer supported, and the CLI refuses to start on them, naming the versions to upgrade to. Those releases fail when a CommonJS file a test imports requires TypeScript through the new loader's module.registerHooks (nodejs/node#59679 fixed it in 22.22.3 and 24.8.0).

e2e now loads TypeScript with its own loader, built on oxc, instead of tsx. tsx brought in esbuild, whose postinstall script made every pnpm install on pnpm 11 and later fail with ERR_PNPM_IGNORED_BUILDS until the project approved the build; nothing e2e installs runs an install script now. Config and tests load as before: ESM whatever package.json says, ./x.js and ./x resolve to x.ts and ./x.jsx to x.tsx, directory index imports, tsconfig paths and baseUrl, workspace packages exporting .ts source, JSX in .tsx and .jsx, enums, namespaces, experimentalDecorators, and source-mapped stack traces. JSON imported without with { type: 'json' } still loads. A test file whose name holds %, #, or a space now collects with its source location instead of failing with "URI malformed" or losing the location. Each file reads its nearest tsconfig.json rather than the one in the working directory. What changes: import statements in a .cts file are no longer compiled into require calls (write import x = require()); standard decorators without experimentalDecorators, auto-accessors, and ES module import and value export declarations in .cts are refused with their line (import type, export type, import x = require(), and export = work); the CLI refuses the Bun (bun --bun) and Deno runtimes (install with any package manager, run on Node.js); a type imported without import type that stays in the output (a decorated member's type under emitDecoratorMetadata) fails to load, with an error naming the import; a .ts file a CommonJS file requires runs as an ES module like every other .ts, so one written with module.exports needs the .cts extension; and an import written in a JavaScript file resolves as Node.js resolves it, without TypeScript's extension rules or tsconfig paths. TypeScript inside an installed package compiles without the project's tsconfig.json.

  • #840 b33398f Thanks @Mohit20057! - screen.swipe({ from, to, duration }) adds an optional duration for path swipes, controlling how long the gesture takes in milliseconds.

Patch Changes

  • #803 f2f9a53 Thanks @fecolinhares! - A headless run no longer downloads the full Chromium when the headless shell is installed, and the install no longer removes other browsers in the cache. Set PLAYWRIGHT_SKIP_BROWSER_GC=0 to restore cleanup.

  • #860 60bf04d Thanks @okwasniewski! - browser.evaluate evaluates a string as an expression: browser.evaluate('document.title') and browser.evaluate('(() => document.title)()') return the title instead of failing with EVALUATE_FAILED: ... is not a function. A string that evaluates to a function, such as '() => document.title', is still called with the argument.

  • #859 432e9bf Thanks @okwasniewski! - An action whose locator gains a second match just before it runs, such as a screen transition that briefly shows the old and new page together, no longer fails with ENGINE_FAILURE and a Playwright strict mode violation. The locator resolves again: two matches still fail with LOCATOR_AMBIGUOUS, and a duplicate that went away lets the action run. A drag whose drop target gains a second match after the press fails with ACTION_FAILED and is not repeated.

  • #891 a0e5142 Thanks @rudycelekli! - Infer scope-less table headers from neighboring data cells, matching native row headers in semantic observations.

  • #828 c83b86f Thanks @okwasniewski! - A page whose script never yields no longer holds a web test until its test timeout: a tap, a locate, or a navigation on it now fails with ACTION_FAILED at its action or navigation timeout, also while a trace records. A tap or keystroke cut off that way may have reached the page and is never repeated by a replay. expect(browser) matchers on such a page end at their own timeout instead of the action timeout.

  • #913 7c158ee Thanks @okwasniewski! - Requires e2e 0.18.0 or later. With an older runner the engine failed to load, or a headed run failed to launch the browser.

Source: README.md, updated 2026-10-06