text: const path = require("path");
  const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
  const { IgnorePlugin } = require("webpack");
  
  module.exports = env => {
    const config = {
      entry: {
          main: "./src/index.tsx",
          worker: "./src/worker.ts"
      },
      output: {
          filename: "[name].bundle.js",
          chunkFilename: "[name].bundle.js",
          path: path.resolve(__dirname, "dist/"),
          publicPath: "/dist/",
      },
  
      // Enable sourcemaps for debugging webpack's output.
      devtool: "source-map",
  
      resolve: {
          // Add '.ts' and '.tsx' as resolvable extensions.
          extensions: [".ts", ".tsx", ".js", ".json"]
      },
  
      module: {
          rules: [
              { test: /\.css$/, use: ['style-loader', 'css-loader'] },
  
              // All files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'.
              { test: /\.tsx?$/, loader: "ts-loader" },
  
              // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
              { enforce: "pre", test: /\.js$/, loader: "source-map-loader", exclude: path.resolve(__dirname, 'node_modules') }
          ]
      },
  
      // When importing a module whose path matches one of the following, just
      // assume a corresponding global variable exists and use that instead.
      // This is important because it allows us to avoid bundling all of our
      // dependencies, which allows browsers to cache those libraries between builds.
      externals: {
          "react": "React",
          "react-dom": "ReactDOM",
          "fs": "StudioFs",
          "assemblyscript/bin/asc": "AssemblyScriptCompiler"
      },
      plugins: [
          new IgnorePlugin(/@wasm\/studio-utils+/),
          new MonacoWebpackPlugin()
      ],
      optimization: {
          splitChunks: {
              cacheGroups: {
                  editor: {
                      // Editor bundle
                      test: /[\\/]node_modules\/(monaco-editor\/esm\/vs\/(nls\.js|editor|platform|base|basic-languages|language\/(css|html|json|typescript)\/monaco\.contribution\.js)|style-loader\/lib|css-loader\/lib\/css-base\.js)/,
                      name: "monaco-editor",
                      chunks: "async"
                  },
                  languages: {
                      // Language bundle
                      test: /[\\/]node_modules\/monaco-editor\/esm\/vs\/language\/(css|html|json|typescript)\/(_deps|lib|fillers|languageFeatures\.js|workerManager\.js|tokenization\.js|(tsMode|jsonMode|htmlMode|cssMode)\.js|(tsWorker|jsonWorker|htmlWorker|cssWorker)\.js)/,
                      name: "monaco-languages",
                      chunks: "async"
                  }
              }
          }
      }
    };
  
    return config;
  };
  