summaryrefslogtreecommitdiff
path: root/packages/integrations/node/src/preview.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/node/src/preview.ts')
-rw-r--r--packages/integrations/node/src/preview.ts73
1 files changed, 20 insertions, 53 deletions
diff --git a/packages/integrations/node/src/preview.ts b/packages/integrations/node/src/preview.ts
index 89baa1897..26b91756c 100644
--- a/packages/integrations/node/src/preview.ts
+++ b/packages/integrations/node/src/preview.ts
@@ -1,26 +1,19 @@
-import type { CreatePreviewServer } from 'astro';
-import { AstroError } from 'astro/errors';
-import type http from 'node:http';
import { fileURLToPath } from 'node:url';
-import { getNetworkAddress } from './get-network-address.js';
-import { createServer } from './http-server.js';
+import { AstroError } from 'astro/errors';
+import { logListeningOn } from './log-listening-on.js';
+import { createServer } from './standalone.js';
+import type { CreatePreviewServer } from 'astro';
import type { createExports } from './server.js';
-const preview: CreatePreviewServer = async function ({
- client,
- serverEntrypoint,
- host,
- port,
- base,
- logger,
-}) {
- type ServerModule = ReturnType<typeof createExports>;
- type MaybeServerModule = Partial<ServerModule>;
+type ServerModule = ReturnType<typeof createExports>;
+type MaybeServerModule = Partial<ServerModule>;
+
+const createPreviewServer: CreatePreviewServer = async function (preview) {
let ssrHandler: ServerModule['handler'];
let options: ServerModule['options'];
try {
process.env.ASTRO_NODE_AUTOSTART = 'disabled';
- const ssrModule: MaybeServerModule = await import(serverEntrypoint.toString());
+ const ssrModule: MaybeServerModule = await import(preview.serverEntrypoint.toString());
if (typeof ssrModule.handler === 'function') {
ssrHandler = ssrModule.handler;
options = ssrModule.options!;
@@ -33,49 +26,23 @@ const preview: CreatePreviewServer = async function ({
if ((err as any).code === 'ERR_MODULE_NOT_FOUND') {
throw new AstroError(
`The server entrypoint ${fileURLToPath(
- serverEntrypoint
+ preview.serverEntrypoint
)} does not exist. Have you ran a build yet?`
);
} else {
throw err;
}
}
-
- const handler: http.RequestListener = (req, res) => {
- ssrHandler(req, res);
- };
-
- const baseWithoutTrailingSlash: string = base.endsWith('/')
- ? base.slice(0, base.length - 1)
- : base;
- function removeBase(pathname: string): string {
- if (pathname.startsWith(base)) {
- return pathname.slice(baseWithoutTrailingSlash.length);
- }
- return pathname;
- }
-
- const server = createServer(
- {
- client,
- port,
- host,
- removeBase,
- assets: options.assets,
- },
- handler
- );
- const address = getNetworkAddress('http', host, port);
-
- if (host === undefined) {
- logger.info(
- `Preview server listening on \n local: ${address.local[0]} \t\n network: ${address.network[0]}\n`
- );
- } else {
- logger.info(`Preview server listening on ${address.local[0]}`);
- }
-
+ const host = preview.host ?? "localhost"
+ const port = preview.port ?? 4321
+ const server = createServer(ssrHandler, host, port);
+ logListeningOn(preview.logger, server.server, options)
+ await new Promise<void>((resolve, reject) => {
+ server.server.once('listening', resolve);
+ server.server.once('error', reject);
+ server.server.listen(port, host);
+ });
return server;
};
-export { preview as default };
+export { createPreviewServer as default }