playwright/packages/playwright-ct-core
Max Schmitt 9fa06be49e
fix(ct): throw error if inline component is getting mounted (#32531)
What was happening?
- When we use CT, we go over the test files, look at the imports using
`tsxTransform.ts` and store them inside a map, these we feed into the
import registry which we build using Vite and have access inside the
browser
- In case of an inline component in the same file as where the test file
is, this is not happening.
- jsx-runtime via babel kicks in, transforms every JSX component in
something like that:

```
{
  __pw_type: 'jsx',
  type: [Function: MyInlineComponent],
  props: { value: 'Max' },
  key: undefined
}
```

this then gets passed into `wrapObject` which maps any function from the
Node.js side into expose function calls so they work inside the browser.
The assumption for `wrapObject` was to do it mostly for callbacks. So it
does for `type` - which is actually our component. We then pass this to
the React render function, which calls back the exposed function but we
never return anything, so it mounts `undefined`.

---

While there have been experiments from certain vendors to get the
'client only' code inside a server side file, we should throw for now to
not confuse users. We might revisit this in the future since Babel / TSX
doesn't support it outside of the box.

Fixes https://github.com/microsoft/playwright/issues/32167
2024-09-10 11:15:20 +02:00
..
src fix(ct): throw error if inline component is getting mounted (#32531) 2024-09-10 11:15:20 +02:00
types feat(ct): resolve hooksConfig import refs (#31024) 2024-05-28 12:29:52 -07:00
.eslintrc.js chore: strengthen linting (#29669) 2024-02-26 16:52:28 -08:00
.npmignore chore: pass the private data to the runner via config (#29467) 2024-02-13 09:34:03 -08:00
README.md
index.d.ts chore: rename `route` fixture in ct (#31817) 2024-07-23 07:43:28 -07:00
index.js chore: implement clear-cache through plugins (#32471) 2024-09-05 13:50:16 -07:00
package.json chore: mark 1.48.0-next (#32466) 2024-09-05 12:57:16 +02:00

README.md

BEWARE This package is EXPERIMENTAL and does not respect semver.

Read more at https://playwright.dev/docs/test-components