File size: 3,753 Bytes
e4890d1 b13f98f e4890d1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
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)
|