2024-11-29 21:36:41 +01:00
|
|
|
/* 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/";
|
2024-12-15 17:32:35 +01:00
|
|
|
const urlProd = "https://rizlum.ai/fr/"; // CHANGE THIS TO YOUR PRODUCTION DEPLOYMENT LOCATION
|
2024-11-29 21:36:41 +01:00
|
|
|
|
|
|
|
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;
|
|
|
|
};
|