Skip to content

Commit 9bdeb1a

Browse files
committed
fix: Use HMR API for dev server communication
1 parent 55a1f39 commit 9bdeb1a

File tree

6 files changed

+703
-188
lines changed

6 files changed

+703
-188
lines changed

packages/wxt/src/sandbox/dev-server-websocket.ts

Lines changed: 0 additions & 85 deletions
This file was deleted.

packages/wxt/src/virtual/background-entrypoint.ts

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,28 @@
11
import definition from 'virtual:user-background-entrypoint';
22
import { initPlugins } from 'virtual:wxt-plugins';
3-
import { getDevServerWebSocket } from '../sandbox/dev-server-websocket';
43
import { logger } from '../sandbox/utils/logger';
54
import { browser } from 'wxt/browser';
65
import { keepServiceWorkerAlive } from './utils/keep-service-worker-alive';
76
import { reloadContentScript } from './utils/reload-content-scripts';
87

9-
if (import.meta.env.COMMAND === 'serve') {
10-
try {
11-
const ws = getDevServerWebSocket();
12-
ws.addWxtEventListener('wxt:reload-extension', () => {
13-
browser.runtime.reload();
14-
});
15-
ws.addWxtEventListener('wxt:reload-content-script', (event) => {
16-
reloadContentScript(event.detail);
17-
});
8+
if (import.meta.hot) {
9+
import.meta.hot.on('wxt:reload-extension', () => browser.runtime.reload());
10+
import.meta.hot.on('wxt:reload-content-script', (event) =>
11+
reloadContentScript(event.detail),
12+
);
1813

19-
if (import.meta.env.MANIFEST_VERSION === 3) {
20-
// Tell the server the background script is loaded and ready to go
21-
ws.addEventListener('open', () =>
22-
ws.sendCustom('wxt:background-initialized'),
23-
);
14+
if (import.meta.env.MANIFEST_VERSION === 3) {
15+
let backgroundInitialized = false;
16+
// Tell the server the background script is loaded and ready to go
17+
import.meta.hot.on('vite:ws:connect', () => {
18+
if (backgroundInitialized) return;
2419

25-
// Web Socket will disconnect if the service worker is killed
26-
keepServiceWorkerAlive();
27-
}
28-
} catch (err) {
29-
logger.error('Failed to setup web socket connection with dev server', err);
20+
import.meta.hot?.send('wxt:background-initialized');
21+
backgroundInitialized = true;
22+
});
23+
24+
// Web Socket will disconnect if the service worker is killed
25+
keepServiceWorkerAlive();
3026
}
3127

3228
browser.commands.onCommand.addListener((command) => {
Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
1-
import { logger } from '../sandbox/utils/logger';
2-
import { getDevServerWebSocket } from '../sandbox/dev-server-websocket';
3-
4-
if (import.meta.env.COMMAND === 'serve') {
5-
try {
6-
const ws = getDevServerWebSocket();
7-
ws.addWxtEventListener('wxt:reload-page', (event) => {
8-
// "popup.html" === "/popup.html".substring(1)
9-
if (event.detail === location.pathname.substring(1)) location.reload();
10-
});
11-
} catch (err) {
12-
logger.error('Failed to setup web socket connection with dev server', err);
13-
}
1+
if (import.meta.hot) {
2+
import.meta.hot.on('wxt:reload-page', (event) => {
3+
// "popup.html" === "/popup.html".substring(1)
4+
if (event.detail === location.pathname.substring(1)) location.reload();
5+
});
146
}

packages/wxt/src/virtual/utils/reload-content-scripts.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { browser } from 'wxt/browser';
22
import { logger } from '../../sandbox/utils/logger';
33
import { MatchPattern } from 'wxt/sandbox';
4-
import type { ReloadContentScriptPayload } from '../../sandbox/dev-server-websocket';
54

65
export function reloadContentScript(payload: ReloadContentScriptPayload) {
76
const manifest = browser.runtime.getManifest();
@@ -97,3 +96,12 @@ export async function reloadContentScriptMv2(
9796
) {
9897
throw Error('TODO: reloadContentScriptMv2');
9998
}
99+
100+
export interface ReloadContentScriptPayload {
101+
registration?: 'manifest' | 'runtime';
102+
contentScript: {
103+
matches: string[];
104+
js?: string[];
105+
css?: string[];
106+
};
107+
}

packages/wxt/vitest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export default defineConfig({
1818
ignored: '**/dist/**',
1919
},
2020
},
21-
plugins: [RandomSeed()],
21+
plugins: [RandomSeed() as any],
2222
resolve: {
2323
alias: {
2424
'wxt/testing': path.resolve('src/testing'),

0 commit comments

Comments
 (0)