99 lines
3.5 KiB
JavaScript
99 lines
3.5 KiB
JavaScript
/* 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`),
|
|
},
|
|
],
|
|
}),
|
|
],
|
|
};
|
|
};
|