80 lines
3.2 KiB
JavaScript
80 lines
3.2 KiB
JavaScript
import { manifest } from "virtual:astro:manifest";
|
|
import { routes } from "virtual:astro:routes";
|
|
import { getPackageManager } from "../cli/info/core/get-package-manager.js";
|
|
import { DevDebugInfoProvider } from "../cli/info/infra/dev-debug-info-provider.js";
|
|
import { ProcessNodeVersionProvider } from "../cli/info/infra/process-node-version-provider.js";
|
|
import { ProcessPackageManagerUserAgentProvider } from "../cli/info/infra/process-package-manager-user-agent-provider.js";
|
|
import { StyledDebugInfoFormatter } from "../cli/info/infra/styled-debug-info-formatter.js";
|
|
import { BuildTimeAstroVersionProvider } from "../cli/infra/build-time-astro-version-provider.js";
|
|
import { PassthroughTextStyler } from "../cli/infra/passthrough-text-styler.js";
|
|
import { ProcessOperatingSystemProvider } from "../cli/infra/process-operating-system-provider.js";
|
|
import { TinyexecCommandExecutor } from "../cli/infra/tinyexec-command-executor.js";
|
|
import { AstroLogger } from "../core/logger/core.js";
|
|
import { nodeLogDestination } from "../core/logger/node.js";
|
|
import { AstroServerApp } from "./app.js";
|
|
async function createAstroServerApp(controller, settings, loader, logger) {
|
|
const actualLogger = logger ?? new AstroLogger({
|
|
destination: nodeLogDestination,
|
|
level: settings.logLevel
|
|
});
|
|
const routesList = { routes: routes.map((r) => r.routeData) };
|
|
const debugInfoProvider = new DevDebugInfoProvider({
|
|
config: settings.config,
|
|
astroVersionProvider: new BuildTimeAstroVersionProvider(),
|
|
operatingSystemProvider: new ProcessOperatingSystemProvider(),
|
|
packageManager: await getPackageManager({
|
|
packageManagerUserAgentProvider: new ProcessPackageManagerUserAgentProvider(),
|
|
commandExecutor: new TinyexecCommandExecutor()
|
|
}),
|
|
nodeVersionProvider: new ProcessNodeVersionProvider()
|
|
});
|
|
const debugInfoFormatter = new StyledDebugInfoFormatter({
|
|
textStyler: new PassthroughTextStyler()
|
|
});
|
|
const debugInfo = debugInfoFormatter.format(await debugInfoProvider.get());
|
|
const app = await AstroServerApp.create(
|
|
manifest,
|
|
routesList,
|
|
actualLogger,
|
|
loader,
|
|
settings,
|
|
async () => debugInfo
|
|
);
|
|
if (import.meta.hot) {
|
|
import.meta.hot.on("astro:routes-updated", async () => {
|
|
try {
|
|
const { routes: newRoutes } = await import("virtual:astro:routes");
|
|
const newRoutesList = {
|
|
routes: newRoutes.map((r) => r.routeData)
|
|
};
|
|
app.updateRoutes(newRoutesList);
|
|
actualLogger.debug("router", "Routes updated via HMR");
|
|
} catch (e) {
|
|
actualLogger.error("router", `Failed to update routes via HMR:
|
|
${e}`);
|
|
}
|
|
});
|
|
import.meta.hot.on("astro:content-changed", () => {
|
|
app.clearRouteCache();
|
|
actualLogger.debug("router", "Route cache cleared due to content change");
|
|
});
|
|
import.meta.hot.on("astro:middleware-updated", () => {
|
|
app.clearMiddleware();
|
|
actualLogger.debug("router", "Middleware cache cleared due to file change");
|
|
});
|
|
}
|
|
return {
|
|
handler(incomingRequest, incomingResponse) {
|
|
app.handleRequest({
|
|
controller,
|
|
incomingRequest,
|
|
incomingResponse,
|
|
isHttps: loader?.isHttps() ?? false
|
|
});
|
|
}
|
|
};
|
|
}
|
|
export {
|
|
createAstroServerApp as default
|
|
};
|