diff options
author | 2023-03-07 10:52:47 +0800 | |
---|---|---|
committer | 2023-03-07 10:52:47 +0800 | |
commit | 00a0af7ed44f5bb275f570ca38bbd0b798ce84ad (patch) | |
tree | 4c15d9223bffbcd4999a1950580cbd3a02a8ae5f /benchmark/packages/timer/src | |
parent | af05a4fa4637bad9b20b9928e6d2c2f894aa9139 (diff) | |
download | astro-00a0af7ed44f5bb275f570ca38bbd0b798ce84ad.tar.gz astro-00a0af7ed44f5bb275f570ca38bbd0b798ce84ad.tar.zst astro-00a0af7ed44f5bb275f570ca38bbd0b798ce84ad.zip |
Move benchmark package and update changeset config (#6433)
Diffstat (limited to 'benchmark/packages/timer/src')
-rw-r--r-- | benchmark/packages/timer/src/index.ts | 35 | ||||
-rw-r--r-- | benchmark/packages/timer/src/preview.ts | 36 | ||||
-rw-r--r-- | benchmark/packages/timer/src/server.ts | 21 |
3 files changed, 92 insertions, 0 deletions
diff --git a/benchmark/packages/timer/src/index.ts b/benchmark/packages/timer/src/index.ts new file mode 100644 index 000000000..49edcb5e8 --- /dev/null +++ b/benchmark/packages/timer/src/index.ts @@ -0,0 +1,35 @@ +import type { AstroAdapter, AstroIntegration } from 'astro'; + +export function getAdapter(): AstroAdapter { + return { + name: '@benchmark/timer', + serverEntrypoint: '@benchmark/timer/server.js', + previewEntrypoint: '@benchmark/timer/preview.js', + exports: ['handler'], + }; +} + +export default function createIntegration(): AstroIntegration { + return { + name: '@benchmark/timer', + hooks: { + 'astro:config:setup': ({ updateConfig }) => { + updateConfig({ + vite: { + ssr: { + noExternal: ['@benchmark/timer'], + }, + }, + }); + }, + 'astro:config:done': ({ setAdapter, config }) => { + setAdapter(getAdapter()); + + if (config.output === 'static') { + // eslint-disable-next-line no-console + console.warn(`[@benchmark/timer] \`output: "server"\` is required to use this adapter.`); + } + }, + }, + }; +} diff --git a/benchmark/packages/timer/src/preview.ts b/benchmark/packages/timer/src/preview.ts new file mode 100644 index 000000000..1208830dd --- /dev/null +++ b/benchmark/packages/timer/src/preview.ts @@ -0,0 +1,36 @@ +import type { CreatePreviewServer } from 'astro'; +import { createServer } from 'http'; +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); + + // eslint-disable-next-line no-console + 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 }; diff --git a/benchmark/packages/timer/src/server.ts b/benchmark/packages/timer/src/server.ts new file mode 100644 index 000000000..5cfa4ad76 --- /dev/null +++ b/benchmark/packages/timer/src/server.ts @@ -0,0 +1,21 @@ +import { polyfill } from '@astrojs/webapi'; +import type { SSRManifest } from 'astro'; +import { NodeApp } from 'astro/app/node'; +import type { IncomingMessage, ServerResponse } from 'http'; + +polyfill(globalThis, { + exclude: 'window document', +}); + +export function createExports(manifest: SSRManifest) { + const app = new NodeApp(manifest); + return { + handler: async (req: IncomingMessage, res: ServerResponse) => { + const start = performance.now(); + await app.render(req); + const end = performance.now(); + res.write(end - start + ''); + res.end(); + }, + }; +} |