astro-ghostcms/.pnpm-store/v3/files/6d/397f8f8f6efbfaac9598b91e23c...

64 lines
1.9 KiB
Plaintext

import { fileURLToPath } from "node:url";
import { performance } from "perf_hooks";
import enableDestroy from "server-destroy";
import { preview } from "vite";
import * as msg from "../messages.js";
import { getResolvedHostForHttpServer } from "./util.js";
import { vitePluginAstroPreview } from "./vite-plugin-astro-preview.js";
async function createStaticPreviewServer(settings, logger) {
const startServerTime = performance.now();
let previewServer;
try {
previewServer = await preview({
configFile: false,
base: settings.config.base,
appType: "mpa",
build: {
outDir: fileURLToPath(settings.config.outDir)
},
preview: {
host: settings.config.server.host,
port: settings.config.server.port,
headers: settings.config.server.headers,
open: settings.config.server.open
},
plugins: [vitePluginAstroPreview(settings)]
});
} catch (err) {
if (err instanceof Error) {
logger.error(null, err.stack || err.message);
}
throw err;
}
enableDestroy(previewServer.httpServer);
logger.info(
"SKIP_FORMAT",
msg.serverStart({
startupTime: performance.now() - startServerTime,
resolvedUrls: previewServer.resolvedUrls ?? { local: [], network: [] },
host: settings.config.server.host,
base: settings.config.base
})
);
function closed() {
return new Promise((resolve, reject) => {
previewServer.httpServer.addListener("close", resolve);
previewServer.httpServer.addListener("error", reject);
});
}
return {
host: getResolvedHostForHttpServer(settings.config.server.host),
port: settings.config.server.port,
closed,
server: previewServer.httpServer,
stop: async () => {
await new Promise((resolve, reject) => {
previewServer.httpServer.destroy((err) => err ? reject(err) : resolve(void 0));
});
}
};
}
export {
createStaticPreviewServer as default
};