1- const HtmlWebpackPlugin = require ( 'html-webpack-plugin' )
2- const { default : WebextensionPlugin } = require ( '@webextension-toolbox/webpack-webextension-plugin' )
3- const CopyPlugin = require ( 'copy-webpack-plugin' )
4- const { HotModuleReplacementPlugin } = require ( 'webpack' )
5- const ReactRefreshWebpackPlugin = require ( '@pmmmwh/react-refresh-webpack-plugin' )
6- const { createDefinePlugin } = require ( '../webpack.base' )
1+ import HtmlWebpackPlugin from 'html-webpack-plugin'
2+ import { WebextensionPlugin } from '@webextension-toolbox/webpack-webextension-plugin'
3+ import CopyPlugin from 'copy-webpack-plugin'
4+ import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'
5+ import webpack from 'webpack'
6+ import { createDefinePlugin } from '../webpack.base.ts'
7+ import packageJson from './package.json' with { type : 'json' }
78
8- module . exports = ( _env , argv ) => {
9+ export default ( _env : unknown , argv : { mode ?: webpack . Configuration [ 'mode' ] } ) => {
910 const isDevelopment = argv . mode === 'development'
1011
1112 return [
@@ -31,16 +32,12 @@ module.exports = (_env, argv) => {
3132 {
3233 from : './manifest.json' ,
3334 to : 'manifest.json' ,
34- transform ( content ) {
35+ transform ( content : Buffer ) {
3536 const manifest = JSON . parse ( content . toString ( ) )
36- const packageJson = require ( './package.json' )
37-
38- // Add required fields
3937 manifest . version = packageJson . version
4038 manifest . version_name = packageJson . version
4139
4240 if ( isDevelopment ) {
43- // Inject dev CSP
4441 manifest . content_security_policy = {
4542 extension_pages : "script-src 'self' http://localhost:3001; object-src 'self'" ,
4643 }
@@ -72,11 +69,10 @@ module.exports = (_env, argv) => {
7269 errors : true ,
7370 warnings : false ,
7471 } ,
75- // Disable webpack hot client injection to avoid CSP issues
7672 webSocketTransport : 'ws' ,
7773 } ,
7874 devMiddleware : {
79- writeToDisk : ( filePath ) => filePath . endsWith ( 'panel.html' ) ,
75+ writeToDisk : ( filePath : string ) => filePath . endsWith ( 'panel.html' ) ,
8076 } ,
8177 }
8278 : undefined ,
@@ -87,8 +83,8 @@ module.exports = (_env, argv) => {
8783 plugins : [
8884 new HtmlWebpackPlugin ( {
8985 filename : 'panel.html' ,
90- inject : false , // Disable auto script injection - we handle it manually
91- templateContent : ( { isDevelopment } ) => `
86+ inject : false ,
87+ templateContent : ( ) => `
9288 <!doctype html>
9389 <html>
9490 <head>
@@ -109,7 +105,7 @@ module.exports = (_env, argv) => {
109105 templateParameters : { isDevelopment } ,
110106 } ) ,
111107 createDefinePlugin ( ) ,
112- ...( isDevelopment ? [ new HotModuleReplacementPlugin ( ) , new ReactRefreshWebpackPlugin ( ) ] : [ ] ) ,
108+ ...( isDevelopment ? [ new webpack . HotModuleReplacementPlugin ( ) , new ReactRefreshWebpackPlugin ( ) ] : [ ] ) ,
113109 ] ,
114110 } ) ,
115111 baseConfig ( {
@@ -140,29 +136,40 @@ module.exports = (_env, argv) => {
140136 } ) ,
141137 ]
142138
143- function baseConfig ( { name, entry, output, plugins, devServer } ) {
139+ function baseConfig ( {
140+ name,
141+ entry,
142+ output,
143+ plugins,
144+ devServer,
145+ } : {
146+ name : string
147+ entry : string
148+ output ?: webpack . Configuration [ 'output' ]
149+ plugins ?: webpack . Configuration [ 'plugins' ]
150+ devServer ?: any
151+ } ) : webpack . Configuration & { devServer ?: any } {
144152 return {
145153 name,
146154 entry,
147155 output,
148- // Use source-map instead of eval-based devtools for CSP compatibility
149156 devtool : isDevelopment ? 'source-map' : false ,
150157 devServer,
151-
152158 module : {
153159 rules : [
154160 {
155161 test : / \. t s x ? $ / ,
156162 loader : 'ts-loader' ,
157163 exclude : / n o d e _ m o d u l e s / ,
158164 options : {
165+ configFile : 'tsconfig.webpack.json' ,
159166 onlyCompileBundledFiles : true ,
160167 ...( isDevelopment && {
161168 getCustomTransformers : ( ) => ( {
162- before : [ require ( 'react-refresh-typescript' ) . default ( ) ] ,
169+ before : [ new ReactRefreshWebpackPlugin ( ) ] ,
163170 } ) ,
164- transpileOnly : true ,
165171 } ) ,
172+ transpileOnly : true ,
166173 } ,
167174 } ,
168175 {
@@ -183,18 +190,16 @@ module.exports = (_env, argv) => {
183190 } ,
184191 ] ,
185192 } ,
186-
187193 resolve : {
188194 extensions : [ '.ts' , '.tsx' , '.js' ] ,
189195 } ,
190-
191196 plugins,
192197 }
193198 }
194199}
195200
196201function getVersion ( ) {
197- const version = require ( './package.json' ) . version
202+ const version : string = packageJson . version
198203
199204 return {
200205 version : version . replace ( / - ( a l p h a | b e t a ) / , '' ) ,
0 commit comments