diff options
Diffstat (limited to 'packages/integrations/node/src')
-rw-r--r-- | packages/integrations/node/src/http-server.ts | 5 | ||||
-rw-r--r-- | packages/integrations/node/src/index.ts | 2 | ||||
-rw-r--r-- | packages/integrations/node/src/server.ts | 1 | ||||
-rw-r--r-- | packages/integrations/node/src/standalone.ts | 6 |
4 files changed, 11 insertions, 3 deletions
diff --git a/packages/integrations/node/src/http-server.ts b/packages/integrations/node/src/http-server.ts index 8eea3c170..fee30aaec 100644 --- a/packages/integrations/node/src/http-server.ts +++ b/packages/integrations/node/src/http-server.ts @@ -3,6 +3,7 @@ import http from 'http'; import https from 'https'; import send from 'send'; import { fileURLToPath } from 'url'; +import enableDestroy from 'server-destroy'; interface CreateServerOptions { client: URL; @@ -19,6 +20,7 @@ export function createServer( if (req.url) { let pathname = removeBase(req.url); pathname = pathname[0] === '/' ? pathname : '/' + pathname; + pathname = new URL(pathname, `http://${host}:${port}`).pathname; const stream = send(req, encodeURI(decodeURI(pathname)), { root: fileURLToPath(client), dotfiles: pathname.startsWith('/.well-known/') ? 'allow' : 'deny', @@ -63,6 +65,7 @@ export function createServer( httpServer = http.createServer(listener); } httpServer.listen(port, host); + enableDestroy(httpServer); // Resolves once the server is closed const closed = new Promise<void>((resolve, reject) => { @@ -79,7 +82,7 @@ export function createServer( server: httpServer, stop: async () => { await new Promise((resolve, reject) => { - httpServer.close((err) => (err ? reject(err) : resolve(undefined))); + httpServer.destroy((err) => (err ? reject(err) : resolve(undefined))); }); }, }; diff --git a/packages/integrations/node/src/index.ts b/packages/integrations/node/src/index.ts index bbe5e44b4..d882f34fb 100644 --- a/packages/integrations/node/src/index.ts +++ b/packages/integrations/node/src/index.ts @@ -6,7 +6,7 @@ export function getAdapter(options: Options): AstroAdapter { name: '@astrojs/node', serverEntrypoint: '@astrojs/node/server.js', previewEntrypoint: '@astrojs/node/preview.js', - exports: ['handler'], + exports: ['handler', 'startServer'], args: options, }; } diff --git a/packages/integrations/node/src/server.ts b/packages/integrations/node/src/server.ts index e0ccf6599..c4c79f6a8 100644 --- a/packages/integrations/node/src/server.ts +++ b/packages/integrations/node/src/server.ts @@ -13,6 +13,7 @@ export function createExports(manifest: SSRManifest, options: Options) { const app = new NodeApp(manifest); return { handler: middleware(app, options.mode), + startServer: () => startServer(app, options) }; } diff --git a/packages/integrations/node/src/standalone.ts b/packages/integrations/node/src/standalone.ts index 789269860..d3ab36793 100644 --- a/packages/integrations/node/src/standalone.ts +++ b/packages/integrations/node/src/standalone.ts @@ -55,8 +55,12 @@ export default function startServer(app: NodeApp, options: Options) { ); const protocol = server.server instanceof https.Server ? 'https' : 'http'; + // eslint-disable-next-line no-console console.log(`Server listening on ${protocol}://${host}:${port}`); - return server.closed(); + return { + server, + done: server.closed() + }; } |