Spaces:
Running
Running
| 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) | |