73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
import { resolve } from "path";
|
|
import { createRequire } from "node:module";
|
|
import { defineConfig } from "vitest/config";
|
|
import type { PluginOption } from "vite";
|
|
const require = createRequire(import.meta.url);
|
|
import tsconfigPaths from "vite-tsconfig-paths";
|
|
import react from "@vitejs/plugin-react-swc";
|
|
import tailwindcss from "@tailwindcss/vite";
|
|
|
|
import { emberAssetsPlugin } from "./vite-ember-assets";
|
|
import { ghostBackendProxyPlugin } from "./vite-backend-proxy";
|
|
import { deepLinksPlugin } from "./vite-deep-links";
|
|
|
|
export const GHOST_URL = process.env.GHOST_URL ?? "http://localhost:2368/";
|
|
const GHOST_CARDS_PATH = resolve(__dirname, "../../ghost/core/core/frontend/src/cards");
|
|
|
|
/**
|
|
* Extracts the subdirectory path from GHOST_URL.
|
|
* e.g., "http://localhost:2368/blog/" -> "/blog"
|
|
* "http://localhost:2368/" -> ""
|
|
*/
|
|
export function getSubdir(): string {
|
|
const url = new URL(GHOST_URL);
|
|
return url.pathname.replace(/\/$/, '');
|
|
}
|
|
|
|
/**
|
|
* Computes the Vite base path.
|
|
* - If GHOST_CDN_URL is set, use it (for CDN deployments)
|
|
* - Otherwise, use the subdir + /ghost (e.g., "/ghost" or "/blog/ghost")
|
|
* - For builds without CDN, use "./" for relative paths in index-forward.html
|
|
*/
|
|
function getBase(command: 'build' | 'serve'): string {
|
|
if (process.env.GHOST_CDN_URL) {
|
|
return process.env.GHOST_CDN_URL;
|
|
}
|
|
// During build, use relative paths so index-forward.html works when served from any subdir
|
|
if (command === 'build') {
|
|
return './';
|
|
}
|
|
// During dev, use absolute path based on GHOST_URL subdir
|
|
return `${getSubdir()}/ghost`;
|
|
}
|
|
|
|
// https://vite.dev/config/
|
|
export default defineConfig(({ command }) => ({
|
|
base: getBase(command),
|
|
plugins: [tailwindcss() as PluginOption, react(), emberAssetsPlugin(), ghostBackendProxyPlugin(), deepLinksPlugin(), tsconfigPaths()],
|
|
define: {
|
|
"process.env.DEBUG": false, // Shim env var utilized by the @tryghost/nql package
|
|
},
|
|
server: {
|
|
host: '0.0.0.0',
|
|
port: 5174,
|
|
allowedHosts: true
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
"@ghost-cards": GHOST_CARDS_PATH,
|
|
// TODO: Remove this when @tryghost/nql is updated
|
|
mingo: require.resolve("mingo/dist/mingo.js"),
|
|
},
|
|
// Shim node modules utilized by the @tryghost/nql package
|
|
external: ["fs", "path", "util"],
|
|
},
|
|
test: {
|
|
environment: "jsdom",
|
|
globals: true,
|
|
setupFiles: ["./test-utils/setup.ts"],
|
|
include: ["src/**/*.test.ts", "src/**/*.test.tsx"],
|
|
},
|
|
}));
|