/* eslint-disable no-undef */ const devCerts = require("office-addin-dev-certs"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const webpack = require("webpack"); const urlDev = "https://localhost:3000/"; const urlProd = "https://rizlum.ai/fr/"; // CHANGE THIS TO YOUR PRODUCTION DEPLOYMENT LOCATION async function getHttpsOptions() { const httpsOptions = await devCerts.getHttpsServerOptions(); return { ca: httpsOptions.ca, key: httpsOptions.key, cert: httpsOptions.cert }; } module.exports = async (env, options) => { const dev = options.mode === "development"; const config = { devtool: "source-map", entry: { polyfill: ["core-js/stable", "regenerator-runtime/runtime"], vendor: ["react", "react-dom", "core-js", "@fluentui/react-components", "@fluentui/react-icons"], taskpane: ["./src/taskpane/index.jsx", "./src/taskpane/taskpane.html"], commands: "./src/commands/commands.js", summarizepane: ["./src/summarizepane/index.jsx", "./src/summarizepane/summarizepane.html"], }, output: { clean: true, }, resolve: { extensions: [".html", ".js", ".jsx"], }, module: { rules: [ { test: /\.jsx?$/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env"], }, }, exclude: /node_modules/, }, { test: /\.js$/, use: { loader: "babel-loader", options: { presets: ["@babel/preset-env"], }, }, exclude: /node_modules/, }, { test: /\.html$/, exclude: /node_modules/, use: "html-loader", }, { test: /\.(png|jpg|jpeg|gif|ico)$/, type: "asset/resource", generator: { filename: "assets/[name][ext][query]", }, }, { test: /\.(woff|woff2|ttf|eot)$/, use: 'file-loader?name=fonts/[name].[ext]!static' }, ], }, plugins: [ new CopyWebpackPlugin({ patterns: [ { from: "assets/*", to: "assets/[name][ext][query]", }, { from: "manifest*.xml", to: "[name]" + "[ext]", transform(content) { if (dev) { return content; } else { return content.toString().replace(new RegExp(urlDev, "g"), urlProd); } }, }, ], }), new HtmlWebpackPlugin({ filename: "taskpane.html", template: "./src/taskpane/taskpane.html", chunks: ["taskpane", "vendor", "polyfill"], }), new HtmlWebpackPlugin({ filename: "commands.html", template: "./src/commands/commands.html", chunks: ["commands"], }), new HtmlWebpackPlugin({ filename: "summarizepane.html", template: "./src/summarizepane/summarizepane.html", chunks: ["summarizepane", "vendor", "polyfill"], }), new webpack.ProvidePlugin({ Promise: ["es6-promise", "Promise"], }), ], devServer: { hot: true, headers: { "Access-Control-Allow-Origin": "*", }, server: { type: "https", options: env.WEBPACK_BUILD || options.https !== undefined ? options.https : await getHttpsOptions(), }, port: process.env.npm_package_config_dev_server_port || 3000, }, }; return config; };