diff options
Diffstat (limited to 'benchmark/packages/timer/src/preview.ts')
-rw-r--r-- | benchmark/packages/timer/src/preview.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/benchmark/packages/timer/src/preview.ts b/benchmark/packages/timer/src/preview.ts new file mode 100644 index 000000000..9659a26be --- /dev/null +++ b/benchmark/packages/timer/src/preview.ts @@ -0,0 +1,36 @@ +import { createServer } from 'node:http'; +import type { CreatePreviewServer } from 'astro'; +import enableDestroy from 'server-destroy'; + +const preview: CreatePreviewServer = async function ({ serverEntrypoint, host, port }) { + const ssrModule = await import(serverEntrypoint.toString()); + const ssrHandler = ssrModule.handler; + const server = createServer(ssrHandler); + server.listen(port, host); + enableDestroy(server); + + // biome-ignore lint/suspicious/noConsoleLog: allowed + console.log(`Preview server listening on http://${host}:${port}`); + + // Resolves once the server is closed + const closed = new Promise<void>((resolve, reject) => { + server.addListener('close', resolve); + server.addListener('error', reject); + }); + + return { + host, + port, + closed() { + return closed; + }, + server, + stop: async () => { + await new Promise((resolve, reject) => { + server.destroy((err) => (err ? reject(err) : resolve(undefined))); + }); + }, + }; +}; + +export { preview as default }; |