blob: 40fbcc23aa2070e86b385e235d7a70652cd11ff7 [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',
Adrià Vilanova Martínez7f9540d2022-02-17 22:05:14 +010012 webExtLocale: 'pt_BR',
13 },
14 {
15 pontoonLocale: 'pt-rBR',
16 webExtLocale: 'pt_PT',
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +020017 },
18];
19
20const getCopyPluginsForOverridenLocales = outputPath => {
21 return localeOverrides.map(l => {
22 return new CopyWebpackPlugin({
23 patterns: [
24 {
25 from: path.join(__dirname, 'src/static/_locales/' + l.pontoonLocale),
26 to: path.join(outputPath, '_locales/' + l.webExtLocale),
27 globOptions: {
28 ignore: ['**/OWNERS', '**.md'],
29 }
30 },
31 ]
32 });
33 });
34};
35
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020036module.exports = (env, args) => {
Adrià Vilanova Martínez2df2f242022-03-01 22:25:27 +010037 // NOTE: When adding an entry, add the corresponding source map file to
38 // web_accessible_resources in //templates/manifest.gjson.
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020039 let entry = {
40 // Content scripts
41 communityConsoleMain: './src/contentScripts/communityConsole/main.js',
42 communityConsoleStart: './src/contentScripts/communityConsole/start.js',
43 publicForum: './src/contentScripts/publicForum.js',
44 publicThread: './src/contentScripts/publicThread.js',
Adrià Vilanova Martíneza2f79512022-07-10 15:32:32 +020045 publicThreadStart: './src/contentScripts/publicThreadStart.js',
avm9996337601bc2022-02-21 10:36:45 +010046 publicProfile: './src/contentScripts/publicProfile.js',
47 publicProfileStart: './src/contentScripts/publicProfileStart.js',
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020048 profileIndicator: './src/contentScripts/profileIndicator.js',
49
50 // Injected JS
51 profileIndicatorInject: './src/injections/profileIndicator.js',
52 batchLockInject: './src/injections/batchLock.js',
Adrià Vilanova Martínez43ec2b92021-07-16 18:44:54 +020053 xhrInterceptorInject: './src/injections/xhrInterceptor.js',
Adrià Vilanova Martínez4f56d562022-01-26 00:23:27 +010054 extraInfoInject: './src/injections/extraInfo.js',
Adrià Vilanova Martínez2788d122022-10-10 22:06:25 +020055 workflowComponentsInject: './src/injections/workflowComponentsInject.js',
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020056
57 // Options page
Adrià Vilanova Martínez09f35be2021-09-06 19:50:09 +020058 optionsCommon: './src/options/optionsCommon.js',
avm999632485a3e2021-09-08 22:18:38 +020059
Adrià Vilanova Martínezf276ac72022-10-13 22:16:22 +020060 // Workflow manager
61 workflowManager: './src/workflows/manager/index.js',
62
avm999632485a3e2021-09-08 22:18:38 +020063 // Common CSS
64 mdcStyles: './src/mdc/index.js',
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020065 };
66
67 // Background script (or service worker for MV3)
Adrià Vilanova Martínez54fbad12022-01-04 03:39:04 +010068 entry.bg = './src/bg.js';
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020069
70 let outputPath = path.join(__dirname, 'dist', env.browser_target);
71
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +020072 let overridenLocalePaths =
73 localeOverrides.map(l => '**/_locales/' + l.pontoonLocale);
74
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +010075 let preprocessorLoader = {
76 loader: 'webpack-preprocessor-loader',
77 options: {
78 params: {
79 browser_target: env.browser_target,
80 production: args.mode == 'production',
Adrià Vilanova Martínez0335b512022-01-21 13:34:59 +010081 canary: !!env.canary
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +010082 },
83 },
84 };
85
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020086 return {
87 entry,
88 output: {
89 filename: '[name].bundle.js',
90 path: outputPath,
Adrià Vilanova Martínez85424b62021-07-11 21:52:00 +020091 clean: true,
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020092 },
93 plugins: [
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020094 new WebpackShellPluginNext({
95 onBuildEnd: {
96 scripts:
avm99963efce2102021-03-23 23:23:26 +010097 ['genmanifest -template templates/manifest.gjson -dest ' +
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020098 path.join(outputPath, 'manifest.json') + ' ' +
99 env.browser_target]
100 }
101 }),
102 new CopyWebpackPlugin({
103 patterns: [
104 {
Adrià Vilanova Martínez9aa29312022-01-16 02:42:46 +0100105 from: path.join(
106 __dirname, 'src/icons', env.canary ? 'canary' : 'regular'),
107 to: path.join(outputPath, 'icons'),
108 },
109 ]
110 }),
111 new CopyWebpackPlugin({
112 patterns: [
113 {
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200114 from: path.join(__dirname, 'src/static'),
115 to: outputPath,
116 globOptions: {
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +0200117 ignore: ['**/OWNERS', '**.md', ...overridenLocalePaths],
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200118 }
119 },
120 ]
121 }),
Adrià Vilanova Martínez413cb442021-09-06 00:30:45 +0200122 new webpack.DefinePlugin({
123 'PRODUCTION': args.mode == 'production',
124 }),
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +0200125 ...getCopyPluginsForOverridenLocales(outputPath),
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200126 ],
Adrià Vilanova Martínez2df2f242022-03-01 22:25:27 +0100127 devtool: (args.mode == 'production' ? 'source-map' : 'inline-source-map'),
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200128 module: {
129 rules: [
130 {
avm999632485a3e2021-09-08 22:18:38 +0200131 test: /\.json5$/i,
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200132 type: 'json',
133 parser: {
134 parse: json5.parse,
135 },
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +0100136 use: [
137 preprocessorLoader,
138 ],
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200139 },
avm999632485a3e2021-09-08 22:18:38 +0200140 {
141 test: /\.s[ac]ss$/i,
142 use: [
Adrià Vilanova Martínezb06c13d2022-06-20 17:30:14 +0000143 'style-loader',
avm999632485a3e2021-09-08 22:18:38 +0200144 'css-loader',
145 {
146 loader: 'sass-loader',
147 options: {
148 // Prefer `dart-sass`
149 implementation: require('sass'),
150 },
151 },
152 ],
153 },
Adrià Vilanova Martínez5120dbb2022-01-04 03:21:17 +0100154 {
155 test: /\.js$/i,
156 use: [
Adrià Vilanova Martíneza4dd5fd2022-01-05 04:23:44 +0100157 preprocessorLoader,
Adrià Vilanova Martínez5120dbb2022-01-04 03:21:17 +0100158 ],
159 },
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +0200160 ]
161 },
162 };
163};