hynky's picture
hynky HF staff
testing
b13f98f
raw
history blame
3.75 kB
const path = require("path");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
const COLOR_KEYS = ["color", "bgColor", "fillcolor"];
const transformDataColors = async (data, path) => {
const {getNamedColor} = await import('./src/colors.mjs');
// if not json file, return
if (!path.endsWith(".json")) {
return data;
}
const parsedData = JSON.parse(data);
// Change the color of the data
const deepIterateAndSetColor = (key, val) => {
if (val === null) {
return null;
}
if (val == undefined) {
return undefined;
}
if (Array.isArray(val)) {
return val.map(item => deepIterateAndSetColor(key, item));
}
if (typeof val === "object") {
return Object.entries(val).reduce((newObj, [key, value]) => {
newObj[key] = deepIterateAndSetColor(key, value);
return newObj;
}, {});
}
if (COLOR_KEYS.includes(key)) {
const [colorName, opacity, ...rest] = val.trim().split(/\s+/);
const floatOpacity = parseFloat(opacity);
const newColor = getNamedColor(colorName, floatOpacity);
if (newColor !== undefined && rest.length === 0 && !isNaN(floatOpacity)) {
console.log(`key: ${key} in file ${path} changed from ${val} to ${newColor}`);
return newColor;
} else {
return val;
}
}
return val;
};
return JSON.stringify(deepIterateAndSetColor(undefined, 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"],
},
},
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
plugins: [
new CleanWebpackPlugin(),
new CopyPlugin({
patterns: [
{
from: "assets",
to: "assets",
},
{ from: "src/style.css", to: "style.css" },
{ from: "src/bibliography.bib", to: "bibliography.bib" },
{ from: "src/index.html", to: "index.html" },
{
from: "../analysis/data",
to: "data",
globOptions: {
ignore: ["**/*.json"],
},
},
],
}),
],
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',
liveReload: process.env.NODE_ENV !== 'production',
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
}
},
mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
};
console.log(process.env.NODE_ENV)