/* eslint-disable unicorn/no-process-exit */ process.env.NODE_ENV = process.env.NODE_ENV || “development”;

const port = process.env.ELECTRON_PORT || 1212; const publicPath = `localhost:${port}/`;

const path = require(“path”); const { spawn } = require(“child_process”); const webpack = require(“webpack”); const DotEnvPlugin = require(“dotenv-webpack”); const HtmlWebpackPlugin = require(“html-webpack-plugin”); const { config } = require(“@rails/webpacker”); const environment = require(“../../environment”);

Object.keys(environment.entry)

.filter((key) => !key.match(/^electron/))
.forEach((entry) => {
  environment.entry.delete(entry);
});

const electronConfig = {

target: "electron-renderer",
entry: {
  electron: path.resolve(
    "./",
    config.source_path,
    config.source_entry_path,
    "electron/renderer.js",
  ),
},
output: {
  publicPath,
  path: path.resolve(config.outputPath, "../", "packs-electron"),
  filename: "renderer.development.js",
},
node: {
  __dirname: false,
  __filename: false,
},
plugins: [
  new DotEnvPlugin(),
  new webpack.LoaderOptionsPlugin({
    debug: true,
  }),
  new HtmlWebpackPlugin({
    title: "Electron App",
    template: path.resolve(config.outputPath, "../", "electron.html"),
  }),
],
devServer: {
  port,
  publicPath,
  contentBase: path.resolve(config.outputPath, "../", "packs-electron"),
  historyApiFallback: {
    verbose: true,
    disableDotRule: false,
  },
  before() {
    console.log("Starting Main Process...");

    spawn("bin/rails", ["webpacker:start:electron:main"], {
      shell: true,
      env: process.env,
      stdio: "inherit",
    })
      .on("close", (code) => process.exit(code))
      .on("error", (spawnError) => console.error(spawnError));
  },
},

};

environment.config.merge(electronConfig);

module.exports = environment.toWebpackConfig();