mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00

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