fix(preview): rewrite inline module scripts in proxy HTML responses (#1470)

Co-authored-by: mdbetancourt <mdbetancourt@users.noreply.github.com>
Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Michel Betancourt
2026-06-09 19:04:50 +03:00
committed by GitHub
co-authored by mdbetancourt Bohdan Triapitsyn
parent 3541bc63f9
commit db17f2d95a
2 changed files with 17 additions and 1 deletions
@@ -194,7 +194,7 @@ export const classifyPreviewNavigation = ({ url, currentUrl, targetOrigin }) =>
return { action: 'external', url: parsed.toString() };
};
const PREVIEW_BRIDGE_SCRIPT = String.raw`(() => {
const PREVIEW_BRIDGE_SCRIPT = String.raw`(() => {
if (window.__openchamberPreviewBridgeInstalled) return;
window.__openchamberPreviewBridgeInstalled = true;
@@ -146,11 +146,27 @@ describe('preview body URL rewriting', () => {
'import RefreshRuntime from "/@react-refresh";',
'window.__vite_plugin_react_preamble_installed__ = true;',
'</script>',
'<script type=module>',
'import { injectIntoGlobalHook } from "/@react-refresh";',
'import value from "/module.js";',
'const url = "/api/data";',
'</script>',
'<script type=\'module\'>',
'import "/entry.js";',
'</script>',
'<script type="text/javascript">',
'import "/not-rewritten.js";',
'</script>',
'<script>const refreshUrl = "/@react-refresh";</script>',
].join('');
const output = rewrite(input, 'html');
expect(output).toContain('from "/api/preview/proxy/abc123/@react-refresh"');
expect(output).toContain('import { injectIntoGlobalHook } from "/api/preview/proxy/abc123/@react-refresh";');
expect(output).toContain('import value from "/api/preview/proxy/abc123/module.js";');
expect(output).toContain('const url = "/api/data";');
expect(output).toContain('import "/api/preview/proxy/abc123/entry.js";');
expect(output).toContain('import "/not-rewritten.js";');
expect(output).toContain('window.__vite_plugin_react_preamble_installed__ = true;');
expect(output).toContain('const refreshUrl = "/@react-refresh";');
});