2021-07-16 14:38:44 -07:00
|
|
|
/*
|
2024-09-06 10:22:13 +02:00
|
|
|
Copyright 2021-2024 New Vector Ltd.
|
2021-07-16 14:38:44 -07:00
|
|
|
|
2025-02-18 17:59:58 +00:00
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
2024-09-06 10:22:13 +02:00
|
|
|
Please see LICENSE in the repository root for full details.
|
2021-07-16 14:38:44 -07:00
|
|
|
*/
|
|
|
|
|
|
2025-08-04 18:50:57 +02:00
|
|
|
import {
|
|
|
|
|
loadEnv,
|
2025-11-24 09:44:21 +01:00
|
|
|
PluginOption,
|
2025-08-04 18:50:57 +02:00
|
|
|
searchForWorkspaceRoot,
|
|
|
|
|
type ConfigEnv,
|
|
|
|
|
type UserConfig,
|
|
|
|
|
} from "vite";
|
2021-08-19 12:11:12 -07:00
|
|
|
import svgrPlugin from "vite-plugin-svgr";
|
2025-03-12 17:00:44 +00:00
|
|
|
import { createHtmlPlugin } from "vite-plugin-html";
|
2025-11-24 09:44:21 +01:00
|
|
|
|
2024-11-14 11:07:21 +01:00
|
|
|
import { codecovVitePlugin } from "@codecov/vite-plugin";
|
2023-09-18 12:02:35 -04:00
|
|
|
import { sentryVitePlugin } from "@sentry/vite-plugin";
|
2025-11-24 09:44:21 +01:00
|
|
|
|
2023-06-30 18:21:18 -04:00
|
|
|
import react from "@vitejs/plugin-react";
|
2025-04-04 23:24:42 +02:00
|
|
|
import { realpathSync } from "fs";
|
2025-05-05 16:01:58 +02:00
|
|
|
import * as fs from "node:fs";
|
2025-08-14 14:57:20 +02:00
|
|
|
|
2021-07-16 14:22:03 -07:00
|
|
|
// https://vitejs.dev/config/
|
2025-08-04 18:50:57 +02:00
|
|
|
// Modified type helper from defineConfig to allow for packageType (see defineConfig from vite)
|
|
|
|
|
export default ({
|
|
|
|
|
mode,
|
|
|
|
|
packageType,
|
2025-12-02 11:31:56 +01:00
|
|
|
}: ConfigEnv & { packageType?: "full" | "embedded" }): UserConfig => {
|
2021-12-17 16:30:10 -08:00
|
|
|
const env = loadEnv(mode, process.cwd());
|
2025-03-21 10:15:20 +00:00
|
|
|
// Environment variables with the VITE_ prefix are accessible at runtime.
|
2025-08-04 18:50:57 +02:00
|
|
|
// So, we set this to allow for build/package specific behavior.
|
2025-03-21 10:15:20 +00:00
|
|
|
// In future we might be able to do what is needed via code splitting at
|
|
|
|
|
// build time.
|
|
|
|
|
process.env.VITE_PACKAGE = packageType ?? "full";
|
2025-11-24 09:44:21 +01:00
|
|
|
const plugins: PluginOption[] = [
|
2023-06-30 18:21:18 -04:00
|
|
|
react(),
|
2023-09-08 15:39:10 -04:00
|
|
|
svgrPlugin({
|
|
|
|
|
svgrOptions: {
|
|
|
|
|
// This enables ref forwarding on SVGR components, which is needed, for
|
|
|
|
|
// example, to make tooltips on icons work
|
|
|
|
|
ref: true,
|
|
|
|
|
},
|
|
|
|
|
}),
|
2025-03-12 17:00:44 +00:00
|
|
|
|
2024-11-14 11:07:21 +01:00
|
|
|
codecovVitePlugin({
|
|
|
|
|
enableBundleAnalysis: process.env.CODECOV_TOKEN !== undefined,
|
|
|
|
|
bundleName: "element-call",
|
|
|
|
|
uploadToken: process.env.CODECOV_TOKEN,
|
|
|
|
|
}),
|
2023-01-03 10:48:48 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
process.env.SENTRY_ORG &&
|
|
|
|
|
process.env.SENTRY_PROJECT &&
|
|
|
|
|
process.env.SENTRY_AUTH_TOKEN &&
|
|
|
|
|
process.env.SENTRY_URL
|
|
|
|
|
) {
|
|
|
|
|
plugins.push(
|
|
|
|
|
sentryVitePlugin({
|
2025-01-07 15:21:56 +00:00
|
|
|
release: {
|
|
|
|
|
name: process.env.VITE_APP_VERSION,
|
|
|
|
|
},
|
2023-10-11 10:42:04 -04:00
|
|
|
}),
|
2023-01-03 10:48:48 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-24 09:44:21 +01:00
|
|
|
plugins.push(
|
|
|
|
|
createHtmlPlugin({
|
2025-12-02 11:31:56 +01:00
|
|
|
entry: "src/main.tsx",
|
2025-11-24 09:44:21 +01:00
|
|
|
inject: {
|
|
|
|
|
data: {
|
|
|
|
|
brand: env.VITE_PRODUCT_NAME || "Element Call",
|
|
|
|
|
packageType: process.env.VITE_PACKAGE,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|
|
|
|
|
|
2025-04-04 23:24:42 +02:00
|
|
|
// The crypto WASM module is imported dynamically. Since it's common
|
|
|
|
|
// for developers to use a linked copy of matrix-js-sdk or Rust
|
|
|
|
|
// crypto (which could reside anywhere on their file system), Vite
|
|
|
|
|
// needs to be told to recognize it as a legitimate file access.
|
|
|
|
|
const allow = [searchForWorkspaceRoot(process.cwd())];
|
|
|
|
|
for (const path of [
|
|
|
|
|
"node_modules/matrix-js-sdk/node_modules/@matrix-org/matrix-sdk-crypto-wasm",
|
|
|
|
|
"node_modules/@matrix-org/matrix-sdk-crypto-wasm",
|
|
|
|
|
]) {
|
|
|
|
|
try {
|
|
|
|
|
allow.push(realpathSync(path));
|
|
|
|
|
} catch {}
|
|
|
|
|
}
|
2025-08-14 14:57:20 +02:00
|
|
|
console.log("Allowed vite paths:", allow);
|
2025-04-04 23:24:42 +02:00
|
|
|
|
2021-12-17 16:30:10 -08:00
|
|
|
return {
|
2023-06-30 18:21:18 -04:00
|
|
|
server: {
|
|
|
|
|
port: 3000,
|
2025-05-05 16:09:34 +02:00
|
|
|
fs: { allow },
|
|
|
|
|
https: {
|
|
|
|
|
key: fs.readFileSync("./backend/dev_tls_m.localhost.key"),
|
|
|
|
|
cert: fs.readFileSync("./backend/dev_tls_m.localhost.crt"),
|
|
|
|
|
},
|
2023-06-30 18:21:18 -04:00
|
|
|
},
|
2025-10-14 12:25:31 +02:00
|
|
|
worker: {
|
|
|
|
|
format: "es",
|
|
|
|
|
},
|
2022-04-27 12:11:59 -07:00
|
|
|
build: {
|
2025-06-06 00:02:19 +02:00
|
|
|
minify: mode === "production" ? true : false,
|
2022-04-27 12:11:59 -07:00
|
|
|
sourcemap: true,
|
2024-11-14 11:53:43 +01:00
|
|
|
rollupOptions: {
|
|
|
|
|
output: {
|
2025-08-04 18:50:57 +02:00
|
|
|
assetFileNames: ({ originalFileNames }): string => {
|
2024-11-14 11:53:43 +01:00
|
|
|
if (originalFileNames) {
|
|
|
|
|
for (const name of originalFileNames) {
|
|
|
|
|
// Custom asset name for locales to include the locale code in the filename
|
|
|
|
|
const match = name.match(/locales\/([^/]+)\/(.+)\.json$/);
|
|
|
|
|
if (match) {
|
|
|
|
|
const [, locale, filename] = match;
|
|
|
|
|
return `assets/${locale}-${filename}-[hash].json`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Default naming fallback
|
|
|
|
|
return "assets/[name]-[hash][extname]";
|
|
|
|
|
},
|
2025-12-02 11:31:56 +01:00
|
|
|
manualChunks: {
|
|
|
|
|
// we should be able to remove this one https://github.com/matrix-org/matrix-rust-sdk-crypto-wasm/pull/167 lands
|
|
|
|
|
"matrix-sdk-crypto-wasm": ["@matrix-org/matrix-sdk-crypto-wasm"],
|
|
|
|
|
},
|
2024-11-14 11:53:43 +01:00
|
|
|
},
|
|
|
|
|
},
|
2022-04-27 12:11:59 -07:00
|
|
|
},
|
2023-01-03 10:48:48 +00:00
|
|
|
plugins,
|
2021-12-17 16:30:10 -08:00
|
|
|
resolve: {
|
2022-07-15 11:24:38 -04:00
|
|
|
alias: {
|
|
|
|
|
// matrix-widget-api has its transpiled lib/index.js as its entry point,
|
|
|
|
|
// which Vite for some reason refuses to work with, so we point it to
|
|
|
|
|
// src/index.ts instead
|
|
|
|
|
"matrix-widget-api": "matrix-widget-api/src/index.ts",
|
|
|
|
|
},
|
2022-01-21 13:21:23 -08:00
|
|
|
dedupe: [
|
|
|
|
|
"react",
|
|
|
|
|
"react-dom",
|
|
|
|
|
"matrix-js-sdk",
|
|
|
|
|
"react-use-measure",
|
2023-12-01 17:43:09 -05:00
|
|
|
// These packages modify the document based on some module-level global
|
|
|
|
|
// state, and don't play nicely with duplicate copies of themselves
|
|
|
|
|
// https://github.com/radix-ui/primitives/issues/1241#issuecomment-1847837850
|
|
|
|
|
"@radix-ui/react-focus-guards",
|
|
|
|
|
"@radix-ui/react-dismissable-layer",
|
2022-01-21 13:21:23 -08:00
|
|
|
],
|
2021-09-30 11:27:44 -07:00
|
|
|
},
|
2024-12-18 17:03:29 +00:00
|
|
|
// Vite is using esbuild in development mode, which doesn't work with the wasm loader
|
|
|
|
|
// in matrix-sdk-crypto-wasm, so we need to exclude it here. This doesn't affect the
|
|
|
|
|
// production build (which uses rollup) which still works as expected.
|
|
|
|
|
// https://vite.dev/guide/why.html#why-not-bundle-with-esbuild
|
|
|
|
|
optimizeDeps: {
|
|
|
|
|
exclude: ["@matrix-org/matrix-sdk-crypto-wasm"],
|
|
|
|
|
},
|
2021-12-17 16:30:10 -08:00
|
|
|
};
|
2025-08-04 18:50:57 +02:00
|
|
|
};
|