blob: 486a408a8aa1d0e785e2b5b87a5dacc32f996210 [file] [log] [blame]
Adrià Vilanova Martínez413cb442021-09-06 00:30:45 +02001const webpack = require('webpack');
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +02002const path = require('path');
3const json5 = require('json5');
4const CopyWebpackPlugin = require('copy-webpack-plugin');
5const WebpackShellPluginNext = require('webpack-shell-plugin-next');
6
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +02007// Pontoon uses their own locale set. This array lets us convert those locales
8// to the ones accepted by Chrome, Firefox, etc.
9const localeOverrides = [
10 {
11 pontoonLocale: 'pt-rBR',
12 webExtLocale: 'pt', // This way it targets both 'pt_BR' and 'pt_PT'
13 },
14];
15
16const getCopyPluginsForOverridenLocales = outputPath => {
17 return localeOverrides.map(l => {
18 return new CopyWebpackPlugin({
19 patterns: [
20 {
21 from: path.join(__dirname, 'src/static/_locales/' + l.pontoonLocale),
22 to: path.join(outputPath, '_locales/' + l.webExtLocale),
23 globOptions: {
24 ignore: ['**/OWNERS', '**.md'],
25 }
26 },
27 ]
28 });
29 });
30};
31
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020032module.exports = (env, args) => {
33 let entry = {
34 // Content scripts
35 communityConsoleMain: './src/contentScripts/communityConsole/main.js',
36 communityConsoleStart: './src/contentScripts/communityConsole/start.js',
37 publicForum: './src/contentScripts/publicForum.js',
38 publicThread: './src/contentScripts/publicThread.js',
39 profile: './src/contentScripts/profile.js',
40 profileIndicator: './src/contentScripts/profileIndicator.js',
41
42 // Injected JS
43 profileIndicatorInject: './src/injections/profileIndicator.js',
44 batchLockInject: './src/injections/batchLock.js',
Adrià Vilanova Martínez43ec2b92021-07-16 18:44:54 +020045 xhrInterceptorInject: './src/injections/xhrInterceptor.js',
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020046
47 // Options page
Adrià Vilanova Martínez09f35be2021-09-06 19:50:09 +020048 optionsCommon: './src/options/optionsCommon.js',
avm999632485a3e2021-09-08 22:18:38 +020049
50 // Common CSS
51 mdcStyles: './src/mdc/index.js',
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020052 };
53
54 // Background script (or service worker for MV3)
Adrià Vilanova Martínez54fbad12022-01-04 03:39:04 +010055 entry.bg = './src/bg.js';
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020056
57 let outputPath = path.join(__dirname, 'dist', env.browser_target);
58
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +020059 let overridenLocalePaths =
60 localeOverrides.map(l => '**/_locales/' + l.pontoonLocale);
61
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +010062 let preprocessorLoader = {
63 loader: 'webpack-preprocessor-loader',
64 options: {
65 params: {
66 browser_target: env.browser_target,
67 production: args.mode == 'production',
Adrià Vilanova Martínez0335b512022-01-21 13:34:59 +010068 canary: !!env.canary
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +010069 },
70 },
71 };
72
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020073 return {
74 entry,
75 output: {
76 filename: '[name].bundle.js',
77 path: outputPath,
Adrià Vilanova Martínez85424b62021-07-11 21:52:00 +020078 clean: true,
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020079 },
80 plugins: [
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020081 new WebpackShellPluginNext({
82 onBuildEnd: {
83 scripts:
avm99963efce2102021-03-23 23:23:26 +010084 ['genmanifest -template templates/manifest.gjson -dest ' +
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020085 path.join(outputPath, 'manifest.json') + ' ' +
86 env.browser_target]
87 }
88 }),
89 new CopyWebpackPlugin({
90 patterns: [
91 {
Adrià Vilanova Martínez9aa29312022-01-16 02:42:46 +010092 from: path.join(
93 __dirname, 'src/icons', env.canary ? 'canary' : 'regular'),
94 to: path.join(outputPath, 'icons'),
95 },
96 ]
97 }),
98 new CopyWebpackPlugin({
99 patterns: [
100 {
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200101 from: path.join(__dirname, 'src/static'),
102 to: outputPath,
103 globOptions: {
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +0200104 ignore: ['**/OWNERS', '**.md', ...overridenLocalePaths],
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200105 }
106 },
107 ]
108 }),
Adrià Vilanova Martínez413cb442021-09-06 00:30:45 +0200109 new webpack.DefinePlugin({
110 'PRODUCTION': args.mode == 'production',
111 }),
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +0200112 ...getCopyPluginsForOverridenLocales(outputPath),
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200113 ],
114 // NOTE: Change to
115 // (args.mode == 'production' ? 'source-map' : 'inline-source-map')
116 // once https://crbug.com/212374 is fixed.
117 devtool: 'inline-source-map',
118 module: {
119 rules: [
120 {
avm999632485a3e2021-09-08 22:18:38 +0200121 test: /\.json5$/i,
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200122 type: 'json',
123 parser: {
124 parse: json5.parse,
125 },
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +0100126 use: [
127 preprocessorLoader,
128 ],
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200129 },
avm999632485a3e2021-09-08 22:18:38 +0200130 {
131 test: /\.s[ac]ss$/i,
132 use: [
133 'style-loader',
134 'css-loader',
135 {
136 loader: 'sass-loader',
137 options: {
138 // Prefer `dart-sass`
139 implementation: require('sass'),
140 },
141 },
142 ],
143 },
Adrià Vilanova Martínez5120dbb2022-01-04 03:21:17 +0100144 {
145 test: /\.js$/i,
146 use: [
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +0100147 preprocessorLoader,
Adrià Vilanova Martínez5120dbb2022-01-04 03:21:17 +0100148 ],
149 },
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200150 ]
151 },
152 };
153};