64 lines
1.9 KiB
Plaintext
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
|
|
};
|