🏡 index : cold-air-networks/mirror-jetstream.git

import path from "path";
import webpack from "webpack";
import TerserPlugin from "terser-webpack-plugin";
import UnicodeEscapePlugin  from "@dapplets/unicode-escape-webpack-plugin";
import { LicenseWebpackPlugin } from "license-webpack-plugin";
import { fileURLToPath } from 'url';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

function createConfig({ filename, minify }) {
  return {
    mode: "production",
    devtool: "source-map",
    target: "web",
    entry: "./src/react-render-test.cjs",
    output: {
      path: path.resolve(__dirname, "dist"),
      filename: filename,
      library: {
        name: "ReactRenderTest",
        type: "globalThis",
      },
      libraryTarget: "assign",
    },
    plugins: [
      new webpack.ProvidePlugin({
        TextEncoder: ["text-encoding", "TextEncoder"],
        TextDecoder: ["text-encoding", "TextDecoder"],
        MessageChannel: [path.resolve(__dirname, "src/mock/message_channel.cjs"), "MessageChannel"],
        process: "process/browser",
        Buffer: ["buffer", "Buffer"],
      }),
      new UnicodeEscapePlugin({
        test: /\.(js|jsx|ts|tsx)$/, // Escape Unicode in JavaScript and TypeScript files
      }),
      new LicenseWebpackPlugin({
        perChunkOutput: true, 
        outputFilename: "LICENSE.txt",
      }),
    ],
    module: {
      rules: [
        {
          test: /\.c?js$/,
          exclude: /node_modules/,
          use: {
            loader: "babel-loader",
            options: {
              presets: [
                ["@babel/preset-env", {
                  // Keep ES6 classes.
                  exclude: ["@babel/plugin-transform-classes"]
                }],
                "@babel/preset-react"
              ],
              plugins: [path.resolve(__dirname, "../utils/BabelCacheBuster.mjs")],
            },
          },
        },
        {
          test: /\.c?js$/,
          include: path.resolve(__dirname, "node_modules"),
          use: {
            loader: "babel-loader",
            options: {
              plugins: [path.resolve(__dirname, "../utils/BabelCacheBuster.mjs")],
            },
          },
        },
      ],
    },
    optimization: {
      minimizer: [
        new TerserPlugin({
          extractComments: false,
          terserOptions: {
            mangle: minify,
            format: {
              // Keep this comment for cache-busting.
              comments: /ThouShaltNotCache/i,
            },
          },
        }),
      ],
    },
    resolve: {
      fallback: {
        "assert": path.resolve("assert/"),
        "buffer": path.resolve("buffer/"),
        "canvas": false,
        "child_process": false,
        "crypto": false,
        "fs": false,
        "http": false,
        "https": false,
        "net": false,
        "os": false,
        "path": path.resolve("path-browserify"),
        "stream": path.resolve("stream-browserify"),
        "string_decoder": path.resolve("string_decoder/"),
        "tls": false,
        "url": path.resolve("url/"),
        "util": path.resolve("util/"),
        "vm": false,
        "zlib": false,
      }
    },
    performance: {
      hints: false
    },
  };
};



export default [
  createConfig({ filename: "bundle.min.js", minify: true }),
  createConfig({ filename: "bundle.js", minify: false })
];