"use strict";
const assert = require("assert");
const path = require("path");
const webpack = require("webpack");

function webpackForTest(testFileName, basePath) {
  const match = testFileName.match(/\/?([^\/]*)\.ts$/);
  if (!match) {
    assert(false, "wrong filename:" + testFileName);
  }

  return {
    mode: "production",
    cache: true,
    entry: testFileName,
    output: {
      library: match[1].replace(/-/g, "_"),
      path: path.join(basePath, "./testCompiledForWeb/"),
      filename: match[1] + ".js",
    },
    plugins: [
      new webpack.DefinePlugin({
        "process.stdout": {},
      }),
      new webpack.ProvidePlugin({ process: "process/browser" }),
    ],
    module: {
      rules: [
        // Compile compile the tests
        {
          test: /\.ts$/,
          use: [
            {
              loader: "ts-loader",
              options: {
                compilerOptions: {
                  lib: ["esnext", "dom"],
                  composite: false,
                  declaration: false,
                  declarationMap: false,
                },
              },
            },
          ],
        },
      ],
    },
    node: {
      global: true,
      __filename: false,
      __dirname: true,
    },
    resolve: {
      extensions: [".ts", ".js", ".json"],
    },
  };
}

module.exports = {
  webpackForTest,
};
