This commit is contained in:
mrKamoo
2026-09-30 16:27:32 +02:00
commit 310724708f
147 changed files with 21327 additions and 0 deletions
+98
View File
@@ -0,0 +1,98 @@
/* eslint-disable */
const path = require("path");
const fs = require("fs");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
/** Lecture minimale de .env (sans dépendance) ; les variables d'environnement priment. */
function loadEnv() {
const env = {};
const file = path.resolve(__dirname, ".env");
if (fs.existsSync(file)) {
for (const line of fs.readFileSync(file, "utf8").split(/\r?\n/)) {
const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/);
if (m) env[m[1]] = m[2].replace(/^["']|["']$/g, "");
}
}
return { ...env, ...process.env };
}
module.exports = async (_env, argv) => {
const e = loadEnv();
const baseUrl = (e.ADDIN_BASE_URL || "https://signature.beziers-mediterranee.fr/addin").replace(/\/$/, "");
const origin = new URL(baseUrl).origin;
const config = {
tenantId: e.ENTRA_TENANT_ID || "",
clientId: e.ADDIN_CLIENT_ID || "",
apiBaseUrl: e.API_BASE_URL || origin,
apiScope: e.API_SCOPE || "",
portalUrl: e.PORTAL_URL || `${origin}/me`,
};
if (argv.mode === "production" && (!config.tenantId || !config.clientId || !config.apiScope)) {
console.warn("\n[ATTENTION] ENTRA_TENANT_ID, ADDIN_CLIENT_ID ou API_SCOPE vide : renseignez addin/.env\n");
}
// Serveur de dev HTTPS (npm run dev-server) : certificat localhost approuvé par office-addin-dev-certs,
// /api et /img relayés vers le Laravel local pour éviter le contenu mixte.
let devServer;
if (process.env.WEBPACK_SERVE) {
const devCerts = require("office-addin-dev-certs");
const https = await devCerts.getHttpsServerOptions();
const backend = e.DEV_BACKEND_URL || "http://127.0.0.1:8000";
devServer = {
port: Number(new URL(baseUrl).port || 3000),
server: { type: "https", options: { ca: https.ca, key: https.key, cert: https.cert } },
headers: { "Access-Control-Allow-Origin": "*" },
static: false,
devMiddleware: { publicPath: new URL(baseUrl).pathname.replace(/\/?$/, "/") },
proxy: [{ context: ["/api", "/img"], target: backend, changeOrigin: true }],
};
}
return {
devServer,
entry: {
launchevent: "./src/launchevent/launchevent.ts",
taskpane: "./src/taskpane/taskpane.ts",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name].js",
clean: true,
},
resolve: { extensions: [".ts", ".js"] },
module: { rules: [{ test: /\.ts$/, use: "ts-loader", exclude: /node_modules/ }] },
devtool: argv.mode === "production" ? false : "source-map",
performance: { hints: false },
plugins: [
new webpack.DefinePlugin({ __ADDIN_CONFIG__: JSON.stringify(config) }),
new HtmlWebpackPlugin({
filename: "commands.html",
template: "./src/launchevent/commands.html",
chunks: ["launchevent"],
scriptLoading: "blocking",
}),
new HtmlWebpackPlugin({
filename: "taskpane.html",
template: "./src/taskpane/taskpane.html",
chunks: ["taskpane"],
}),
new CopyWebpackPlugin({
patterns: [
{ from: "assets", to: "assets" },
{
from: "manifest.xml",
to: "manifest.xml",
transform: (content) =>
content
.toString()
.replace(/\{\{BASE_URL\}\}/g, baseUrl)
.replace(/\{\{ORIGIN\}\}/g, origin)
.replace(/\{\{SUPPORT_URL\}\}/g, e.SUPPORT_URL || `${origin}/aide`),
},
],
}),
],
};
};