| 269 | } |
| 270 | |
| 271 | export const withDevServer = async <T>( |
| 272 | options: DevServerOptions, |
| 273 | testHandler: (server: DevServer) => Promise<T>, |
| 274 | expectFailure = false, |
| 275 | ): Promise<T> => { |
| 276 | let server: DevServer | undefined |
| 277 | try { |
| 278 | server = await startDevServer(options, expectFailure) |
| 279 | return await testHandler(server) |
| 280 | } catch (err) { |
| 281 | if (!(err instanceof Error)) { |
| 282 | throw err |
| 283 | } |
| 284 | |
| 285 | const error: Error & { stdout?: string | undefined; stderr?: string | undefined } = err |
| 286 | if (server && !expectFailure) { |
| 287 | error.stdout = server.output |
| 288 | error.stderr = server.error |
| 289 | } |
| 290 | throw error |
| 291 | } finally { |
| 292 | if (server) { |
| 293 | await server.close() |
| 294 | } |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | export const tryAndLogOutput = async (func: () => Promise<void>, outputBuffer: unknown[]) => { |
| 299 | try { |