import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import { viteStaticCopy } from "vite-plugin-static-copy"; import { fileURLToPath } from "node:url"; import { dirname, resolve } from "node:path"; const __dirname = dirname(fileURLToPath(import.meta.url)); export default defineConfig({ plugins: [ react(), // PDF.js needs its cmaps (character maps for CID fonts) and // standard fonts (Helvetica/Times/Courier metrics) to position // text-layer spans correctly. Without them, PDFs with embedded // CID fonts or unembedded standard fonts get rendered to canvas // OK but their textLayer overlays land in the wrong place — text // appears unselectable or selection jumps to a different region. // We serve both directories straight from `node_modules/pdfjs-dist`. viteStaticCopy({ targets: [ { src: resolve(__dirname, "node_modules/pdfjs-dist/cmaps") + "/[!.]*", dest: "cmaps", }, { src: resolve(__dirname, "node_modules/pdfjs-dist/standard_fonts") + "/[!.]*", dest: "standard_fonts", }, ], }), ], resolve: { alias: { "@shared": resolve(__dirname, "src/shared"), "@engine": resolve(__dirname, "src/engine"), "@anchor": resolve(__dirname, "src/anchor"), "@source": resolve(__dirname, "src/source"), "@binder": resolve(__dirname, "src/binder"), "@work": resolve(__dirname, "src/work"), "@app": resolve(__dirname, "src/app"), }, }, server: { fs: { // Allow Vite to serve /fixtures/pdfs/*.pdf from the project root. allow: [resolve(__dirname)], }, }, optimizeDeps: { // pdfjs-dist ships its worker as a .mjs Vite needs to handle. exclude: ["pdfjs-dist"], }, });