blob: 7d71978d1fa15955ef8612aae23477ec482b755a [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
48 optionsCommon: './src/optionsCommon.js',
49 };
50
51 // Background script (or service worker for MV3)
52 if (env.browser_target == 'chromium_mv3')
53 entry.sw = './src/sw.js';
54 else
55 entry.background = './src/background.js';
56
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ínez3465e772021-07-11 19:18:41 +020062 return {
63 entry,
64 output: {
65 filename: '[name].bundle.js',
66 path: outputPath,
Adrià Vilanova Martínez85424b62021-07-11 21:52:00 +020067 clean: true,
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020068 },
69 plugins: [
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020070 new WebpackShellPluginNext({
71 onBuildEnd: {
72 scripts:
73 ['go run tools/generateManifest.go -dest=' +
74 path.join(outputPath, 'manifest.json') + ' ' +
75 env.browser_target]
76 }
77 }),
78 new CopyWebpackPlugin({
79 patterns: [
80 {
81 from: path.join(__dirname, 'src/static'),
82 to: outputPath,
83 globOptions: {
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +020084 ignore: ['**/OWNERS', '**.md', ...overridenLocalePaths],
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020085 }
86 },
87 ]
88 }),
Adrià Vilanova Martínez413cb442021-09-06 00:30:45 +020089 new webpack.DefinePlugin({
90 'PRODUCTION': args.mode == 'production',
91 }),
Adrià Vilanova Martínez43d0a7b2021-08-28 01:21:17 +020092 ...getCopyPluginsForOverridenLocales(outputPath),
Adrià Vilanova Martínez3465e772021-07-11 19:18:41 +020093 ],
94 // NOTE: Change to
95 // (args.mode == 'production' ? 'source-map' : 'inline-source-map')
96 // once https://crbug.com/212374 is fixed.
97 devtool: 'inline-source-map',
98 module: {
99 rules: [
100 {
101 test: /\.json5$/,
102 type: 'json',
103 parser: {
104 parse: json5.parse,
105 },
106 },
107 ]
108 },
109 };
110};