Replace 7 explicit `any` types with proper TypeScript types:
- Error handling: Use type guard pattern for error messages
- Page parameters: Use Playwright's Page type
- Result objects: Use Record<string, unknown> for dynamic objects
This improves IDE autocomplete, type checking, and may surface hidden bugs.
The plugin-feature-check test was failing intermittently because window.ng
might not be available immediately after Angular bootstrap. Added polling
logic (5s timeout, 100ms intervals) to wait for window.ng to become available.
The test was incomplete - it collected hasPluginService data but never asserted it.
The string-based service lookup via injector.get() didn't work because Angular's DI
expects Type/InjectionToken, not strings. Fixed by checking if Angular's root component
is accessible, which guarantees all root-level services (including PluginService) exist.
Refactored plugin-iframe tests to be more reliable in CI environment:
- Replaced arbitrary waitForTimeout calls with proper waitFor conditions
- Used Playwright locators instead of page.evaluate() for DOM manipulation
- Added proper state verification using waitForFunction
- Increased timeouts appropriately for CI environment
- Improved error handling for iframe content access
- Made test more resilient to timing variations
These changes make the tests deterministic and reliable across different
environments without relying on fixed wait times.
- Remove all console.log statements from E2E test files
- Replace console.error with throw new Error for proper error handling
- Remove console.warn statements
- Fix unused variable linting errors in plugin tests