| ... | ... | @@ -147,7 +147,8 @@ it("hot updates Tailwind classes when a source file changes in bundled dev", asy |
| 147 | 147 | ); |
| 148 | 148 | const logger = createLogger("silent"); |
| 149 | 149 | logger.error = (message) => events.emit("error", new Error(message)); |
| 150 | | const built = NodeEvents.EventEmitter.once(events, "built"); |
| 150 | const connected = NodeEvents.EventEmitter.once(events, "connected"); |
| 151 | const ready = NodeEvents.EventEmitter.once(events, "ready"); |
| 151 | 152 | server = await createServer({ |
| 152 | 153 | configFile: false, |
| 153 | 154 | root, |
| ... | ... | @@ -168,19 +169,18 @@ it("hot updates Tailwind classes when a source file changes in bundled dev", asy |
| 168 | 169 | transform(code, id) { |
| 169 | 170 | if (id.endsWith("/style.css")) css = code; |
| 170 | 171 | }, |
| 171 | | generateBundle() { |
| 172 | | events.emit("built"); |
| 172 | async generateBundle() { |
| 173 | // Keep the build pending until the socket can receive Vite's ready message. |
| 174 | await connected; |
| 173 | 175 | }, |
| 174 | 176 | }, |
| 175 | 177 | ], |
| 176 | 178 | server: { host: "127.0.0.1", port: 0 }, |
| 177 | 179 | }); |
| 178 | 180 | await server.listen(); |
| 179 | | await built; |
| 180 | 181 | const address = server.httpServer?.address(); |
| 181 | 182 | if (!address || typeof address === "string") throw new Error("Vite did not bind a port"); |
| 182 | 183 | |
| 183 | | const connected = NodeEvents.EventEmitter.once(events, "connected"); |
| 184 | 184 | server.ws.on("vite:client-connected", () => events.emit("connected")); |
| 185 | 185 | socket = new WebSocket( |
| 186 | 186 | `ws://127.0.0.1:${address.port}/?token=${server.config.webSocketToken}`, |
| ... | ... | @@ -197,16 +197,21 @@ it("hot updates Tailwind classes when a source file changes in bundled dev", asy |
| 197 | 197 | }); |
| 198 | 198 | socket.addEventListener("message", ({ data }) => { |
| 199 | 199 | const message: unknown = JSON.parse(String(data)); |
| 200 | | if ( |
| 201 | | message !== null && |
| 202 | | typeof message === "object" && |
| 203 | | "type" in message && |
| 204 | | message.type === "bundled-dev-update" |
| 205 | | ) { |
| 206 | | events.emit("updated"); |
| 200 | if (message !== null && typeof message === "object" && "type" in message) { |
| 201 | // generateBundle runs before Vite stores the files for HTTP requests. |
| 202 | if ( |
| 203 | message.type === "full-reload" && |
| 204 | "ifFallback" in message && |
| 205 | message.ifFallback === true |
| 206 | ) { |
| 207 | events.emit("ready"); |
| 208 | } else if (message.type === "bundled-dev-update") { |
| 209 | events.emit("updated"); |
| 210 | } |
| 207 | 211 | } |
| 208 | 212 | }); |
| 209 | 213 | await connected; |
| 214 | await ready; |
| 210 | 215 | const entry = await fetch(`http://127.0.0.1:${address.port}/assets/index.js`); |
| 211 | 216 | expect(entry.headers.get("content-type")).toContain("javascript"); |
| 212 | 217 | await entry.text(); |