astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
40 lines (39 loc) • 1.69 kB
JavaScript
import { isAstroServerEnvironment } from "../environments.js";
import { fileURLToPath } from "node:url";
import { ASTRO_VITE_ENVIRONMENT_NAMES } from "../core/constants.js";
// This is used by Cloudflare's optimizeDeps
const VIRTUAL_CLIENT_ID = "virtual:astro:adapter-config/client";
const RESOLVED_VIRTUAL_CLIENT_ID = "\0" + VIRTUAL_CLIENT_ID;
export function vitePluginAdapterConfig(settings) {
return {
name: "astro:adapter-config",
config() {
const { adapter } = settings;
if (adapter && adapter.entrypointResolution === "auto" && adapter.serverEntrypoint) {
return { environments: { [ASTRO_VITE_ENVIRONMENT_NAMES.ssr]: { build: { rolldownOptions: { input: { index: typeof adapter.serverEntrypoint === "string" ? adapter.serverEntrypoint : fileURLToPath(adapter.serverEntrypoint) } } } } } };
}
},
resolveId: {
filter: { id: new RegExp(`^${VIRTUAL_CLIENT_ID}$`) },
handler() {
return RESOLVED_VIRTUAL_CLIENT_ID;
}
},
load: {
filter: { id: new RegExp(`^${RESOLVED_VIRTUAL_CLIENT_ID}$`) },
handler() {
// During SSR, return empty headers to avoid any runtime issues
if (isAstroServerEnvironment(this.environment)) {
return { code: `export const internalFetchHeaders = {};` };
}
const adapter = settings.adapter;
const clientConfig = adapter?.client || {};
let internalFetchHeaders = {};
if (clientConfig.internalFetchHeaders) {
internalFetchHeaders = typeof clientConfig.internalFetchHeaders === "function" ? clientConfig.internalFetchHeaders() : clientConfig.internalFetchHeaders;
}
return { code: `export const internalFetchHeaders = ${JSON.stringify(internalFetchHeaders)};` };
}
}
};
}