import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; import * as RefreshPlugin from "@rspack/plugin-react-refresh"; const isDev = process.env.NODE_ENV === "development"; // Target browsers, see: https://github.com/browserslist/browserslist const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"]; const src = `${__dirname}/src`; const dist = `${__dirname}/dist`; const assets = `${__dirname}/build/assets`; const template = `${assets}/template`; export default defineConfig({ context: __dirname, entry: { service_worker: `${src}/service_worker.ts`, popup: `${src}/pages/popup/main.tsx`, }, resolve: { extensions: ["...", ".ts", ".tsx", ".jsx"], }, module: { rules: [ { test: /\.svg$/, type: "asset", }, { test: /\.(jsx?|tsx?)$/, use: [ { loader: "builtin:swc-loader", options: { jsc: { parser: { syntax: "typescript", tsx: true, }, transform: { react: { runtime: "automatic", development: isDev, refresh: isDev, }, }, }, env: { targets }, }, }, ], }, ], }, plugins: [ new rspack.HtmlRspackPlugin({ filename: `${dist}/ext/src/popup.html`, template: `${src}/pages/popup/index.html`, inject: "head", title: "Home - ScriptCat", minify: true, chunks: ["popup"], }), isDev ? new RefreshPlugin() : null, ].filter(Boolean), optimization: { minimizer: [ new rspack.SwcJsMinimizerRspackPlugin(), new rspack.LightningCssMinimizerRspackPlugin({ minimizerOptions: { targets }, }), ], }, experiments: { css: true, }, });