playwright/packages/playwright-ct-core/src
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
..
injected fix(ct): throw error if inline component is getting mounted (#32531) 2024-09-10 11:15:20 +02:00
DEPS.list chore(ct): use sticky test server if available (#29136) 2024-01-25 08:36:13 -08:00
devServer.ts chore: make dev server only use public config (#32441) 2024-09-04 01:29:55 -07:00
mount.ts chore: rename route fixture in ct (#31817) 2024-07-23 07:43:28 -07:00
program.ts chore: move dev server to config-based framework extensibility (#30234) 2024-04-05 08:39:51 -07:00
router.ts chore: rename route fixture in ct (#31817) 2024-07-23 07:43:28 -07:00
tsxTransform.ts fix(ct): ct ID clash on similar imports (#30108) 2024-03-25 23:50:45 +01:00
vitePlugin.ts Revert "fix(test runner): align with typescript behaviour for resolving index.js and package.json through path mapping (#32078)" (#32492) 2024-09-06 12:08:10 -07:00
viteUtils.ts Revert "fix(test runner): align with typescript behaviour for resolving index.js and package.json through path mapping (#32078)" (#32492) 2024-09-06 12:08:10 -07:00