|
|
@ -3,7 +3,7 @@ import path from "node:path"; |
|
|
import process from "node:process"; |
|
|
import process from "node:process"; |
|
|
import tailwindcss from "@tailwindcss/vite"; |
|
|
import tailwindcss from "@tailwindcss/vite"; |
|
|
import react from "@vitejs/plugin-react"; |
|
|
import react from "@vitejs/plugin-react"; |
|
|
import { defineConfig } from "vite"; |
|
|
import { defineConfig, loadEnv } from "vite"; |
|
|
import { createHtmlPlugin } from "vite-plugin-html"; |
|
|
import { createHtmlPlugin } from "vite-plugin-html"; |
|
|
|
|
|
|
|
|
let hash = ""; |
|
|
let hash = ""; |
|
|
@ -24,60 +24,69 @@ try { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const CONTENT_SECURITY_POLICY = |
|
|
const CONTENT_SECURITY_POLICY = |
|
|
"script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' data: https://rsms.me https://cdn.jsdelivr.net; img-src 'self' data:; font-src 'self' data: https://rsms.me https://cdn.jsdelivr.net; worker-src 'self' blob:; object-src 'none'; base-uri 'self';"; |
|
|
"script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdn-cookieyes.com; style-src 'self' 'unsafe-inline' data: https://rsms.me https://cdn.jsdelivr.net; img-src 'self' data:; font-src 'self' data: https://rsms.me https://cdn.jsdelivr.net; worker-src 'self' blob:; object-src 'none'; base-uri 'self';"; |
|
|
|
|
|
|
|
|
export default defineConfig({ |
|
|
export default defineConfig(({ mode }) => { |
|
|
plugins: [ |
|
|
const env = loadEnv(mode, process.cwd()); |
|
|
react(), |
|
|
|
|
|
tailwindcss(), |
|
|
return { |
|
|
// adding CookieYes script if VITE_COOKIEYES_CLIENT_ID is set (it only runs while in Vercel) for GDPR/CCPA compliance
|
|
|
plugins: [ |
|
|
createHtmlPlugin({ |
|
|
react(), |
|
|
inject: { |
|
|
tailwindcss(), |
|
|
data: { |
|
|
// This is for GDPR/CCPA compliance
|
|
|
cookieScript: process.env.VITE_COOKIEYES_CLIENT_ID |
|
|
createHtmlPlugin({ |
|
|
? `<script async src="https://cdn-cookieyes.com/client_data/${process.env.VITE_COOKIEYES_CLIENT_ID}/script.js"></script>` |
|
|
inject: { |
|
|
: "", |
|
|
data: { |
|
|
|
|
|
cookieYesScript: |
|
|
|
|
|
mode === "production" && env.VITE_COOKIEYES_CLIENT_ID |
|
|
|
|
|
? `<script async src="https://cdn-cookieyes.com/client_data/${env.VITE_COOKIEYES_CLIENT_ID}/script.js"></script>` |
|
|
|
|
|
: "", |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
|
|
|
}), |
|
|
|
|
|
// VitePWA({
|
|
|
|
|
|
// registerType: "autoUpdate",
|
|
|
|
|
|
// strategies: "generateSW",
|
|
|
|
|
|
// devOptions: {
|
|
|
|
|
|
// enabled: true,
|
|
|
|
|
|
// },
|
|
|
|
|
|
// workbox: {
|
|
|
|
|
|
// cleanupOutdatedCaches: true,
|
|
|
|
|
|
// sourcemap: true,
|
|
|
|
|
|
// },
|
|
|
|
|
|
// }),
|
|
|
|
|
|
], |
|
|
|
|
|
optimizeDeps: { |
|
|
|
|
|
include: ["react/jsx-runtime"], |
|
|
|
|
|
}, |
|
|
|
|
|
define: { |
|
|
|
|
|
"import.meta.env.VITE_COMMIT_HASH": JSON.stringify(hash), |
|
|
|
|
|
"import.meta.env.VITE_VERSION": JSON.stringify(version), |
|
|
|
|
|
}, |
|
|
|
|
|
build: { |
|
|
|
|
|
emptyOutDir: true, |
|
|
|
|
|
assetsDir: "./", |
|
|
|
|
|
}, |
|
|
|
|
|
resolve: { |
|
|
|
|
|
alias: { |
|
|
|
|
|
"@app": path.resolve(process.cwd(), "./src"), |
|
|
|
|
|
"@pages": path.resolve(process.cwd(), "./src/pages"), |
|
|
|
|
|
"@components": path.resolve(process.cwd(), "./src/components"), |
|
|
|
|
|
"@core": path.resolve(process.cwd(), "./src/core"), |
|
|
|
|
|
"@layouts": path.resolve(process.cwd(), "./src/layouts"), |
|
|
}, |
|
|
}, |
|
|
}), |
|
|
|
|
|
// VitePWA({
|
|
|
|
|
|
// registerType: "autoUpdate",
|
|
|
|
|
|
// strategies: "generateSW",
|
|
|
|
|
|
// devOptions: {
|
|
|
|
|
|
// enabled: true,
|
|
|
|
|
|
// },
|
|
|
|
|
|
// workbox: {
|
|
|
|
|
|
// cleanupOutdatedCaches: true,
|
|
|
|
|
|
// sourcemap: true,
|
|
|
|
|
|
// },
|
|
|
|
|
|
// }),
|
|
|
|
|
|
], |
|
|
|
|
|
optimizeDeps: { |
|
|
|
|
|
include: ["react/jsx-runtime"], |
|
|
|
|
|
}, |
|
|
|
|
|
define: { |
|
|
|
|
|
"import.meta.env.VITE_COMMIT_HASH": JSON.stringify(hash), |
|
|
|
|
|
"import.meta.env.VITE_VERSION": JSON.stringify(version), |
|
|
|
|
|
}, |
|
|
|
|
|
build: { |
|
|
|
|
|
emptyOutDir: true, |
|
|
|
|
|
assetsDir: "./", |
|
|
|
|
|
}, |
|
|
|
|
|
resolve: { |
|
|
|
|
|
alias: { |
|
|
|
|
|
"@app": path.resolve(process.cwd(), "./src"), |
|
|
|
|
|
"@pages": path.resolve(process.cwd(), "./src/pages"), |
|
|
|
|
|
"@components": path.resolve(process.cwd(), "./src/components"), |
|
|
|
|
|
"@core": path.resolve(process.cwd(), "./src/core"), |
|
|
|
|
|
"@layouts": path.resolve(process.cwd(), "./src/layouts"), |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
server: { |
|
|
server: { |
|
|
port: 3000, |
|
|
port: 3000, |
|
|
headers: { |
|
|
headers: { |
|
|
"content-security-policy": CONTENT_SECURITY_POLICY, |
|
|
"content-security-policy": CONTENT_SECURITY_POLICY, |
|
|
"Cross-Origin-Opener-Policy": "same-origin", |
|
|
"Cross-Origin-Opener-Policy": "same-origin", |
|
|
"Cross-Origin-Embedder-Policy": "credentialless", |
|
|
"Cross-Origin-Embedder-Policy": "require-corp", |
|
|
"X-Content-Type-Options": "nosniff", |
|
|
|
|
|
"Strict-Transport-Security": |
|
|
|
|
|
"max-age=63072000; includeSubDomains; preload", |
|
|
|
|
|
"Referrer-Policy": "strict-origin-when-cross-origin", |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}; |
|
|
}); |
|
|
}); |
|
|
|