This release adds module uninstallation, a configurable install profile for the parallelWorker fixture, and an ESLint plugin to catch root-relative paths that break on Drupal.org CI.
✨ New Features
A new `drupal.uninstallModules(modules: string[])` method uninstalls modules via the UI, handling the confirmation step. It throws a clear error if a module isn't installed, or can't be uninstalled because another module depends on it or it has content that must be deleted first.
The `parallelWorker` fixture now accepts a worker-scoped `installProfile` option (default `'minimal'`), which is passed to `Drupal.install()`:
```typescript
import { parallelWorker as test } from '@drupal/playwright';
test.use({ installProfile: 'standard' });
```
Tests declaring different profiles run in separate workers, each with its own site install.
Drupal may be installed in a subdirectory (e.g. `http://localhost/web/` on Drupal.org CI), so a leading `/` in `page.goto()`, `waitForURL()`, `toHaveURL()` or `page.request` drops that path and tests 404 in CI despite passing locally. Always use `./`-relative paths, and add the new ESLint plugin to catch (and `--fix`) root-relative ones:
```js
import drupalPlaywright from '@drupal/playwright/eslint';
export default [
// ...
drupalPlaywright.configs.recommended,
];
```
The fixtures now also add the trailing slash `baseURL` needs for relative paths to resolve correctly.
🐛 Bug Fixes
- `Drupal.logout()` no longer asserts the presence of an `h1` that isn't guaranteed to be there.
- Added the missing `"default"` export condition to `package.json`.
- A pre-commit hook now regenerates the API docs automatically.