|
const path = require("path"); |
|
const { CleanWebpackPlugin } = require("clean-webpack-plugin"); |
|
const CopyPlugin = require("copy-webpack-plugin"); |
|
const HtmlWebpackPlugin = require("html-webpack-plugin"); |
|
const CompressionPlugin = require("compression-webpack-plugin"); |
|
const HtmlWebpackChangeAssetsExtensionPlugin = require("html-webpack-change-assets-extension-plugin"); |
|
|
|
const COLOR_KEYS = ["color", "bgColor", "fillcolor"]; |
|
|
|
const transformDataColors = async (data, path) => { |
|
const {getNamedColor} = await import('./src/colors.mjs'); |
|
|
|
if (!path.endsWith(".json") || path.includes("score_by_dump")) { |
|
return data; |
|
} |
|
console.log(path) |
|
const parsedData = JSON.parse(data); |
|
|
|
const deepIterateAndSetColor = (obj) => { |
|
Object.keys(obj).forEach((key) => { |
|
if (typeof obj[key] === "object" && obj[key] !== null) { |
|
deepIterateAndSetColor(obj[key]); |
|
} else if (COLOR_KEYS.includes(key)) { |
|
|
|
const [colorName, opacity] = obj[key].trim().split(/\s+/); |
|
console.log(`key: ${key} in file ${path} changed to ${getNamedColor(colorName, parseFloat(opacity))}`); |
|
obj[key] = getNamedColor(colorName, parseFloat(opacity)); |
|
} |
|
}); |
|
}; |
|
|
|
deepIterateAndSetColor(parsedData); |
|
return JSON.stringify(parsedData); |
|
}; |
|
|
|
module.exports = { |
|
entry: { |
|
distill: "./src/distill.js", |
|
main: "./src/index.js", |
|
}, |
|
output: { |
|
filename: "[name].bundle.js", |
|
path: path.resolve(__dirname, "dist"), |
|
}, |
|
module: { |
|
rules: [ |
|
|
|
{ |
|
test: /\.(js|mjs)$/, |
|
exclude: /node_modules/, |
|
use: { |
|
loader: "babel-loader", |
|
options: { |
|
presets: ["@babel/preset-env"], |
|
}, |
|
}, |
|
}, |
|
], |
|
}, |
|
plugins: [ |
|
new CleanWebpackPlugin(), |
|
new CopyPlugin({ |
|
patterns: [ |
|
{ |
|
from: "assets", |
|
to: "assets", |
|
transform: transformDataColors, |
|
}, |
|
{ from: "src/style.css", to: "style.css" }, |
|
{ from: "src/bibliography.bib", to: "bibliography.bib" }, |
|
{ from: "src/index.html", to: "index.html" }, |
|
], |
|
}), |
|
], |
|
devtool: process.env.NODE_ENV === 'production' ? 'source-map' : 'eval-source-map', |
|
devServer: { |
|
static: "./dist", |
|
open: process.env.NODE_ENV !== 'production', |
|
hot: process.env.NODE_ENV !== 'production', |
|
}, |
|
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development', |
|
}; |
|
|
|
console.log(process.env.NODE_ENV) |