| 
									
										
										
										
											2020-03-23 15:35:58 +01:00
										 |  |  | /* | 
					
						
							|  |  |  |  * MIT License | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2020-present Cloudogu GmbH and Contributors | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | 
					
						
							|  |  |  |  * of this software and associated documentation files (the "Software"), to deal | 
					
						
							|  |  |  |  * in the Software without restriction, including without limitation the rights | 
					
						
							|  |  |  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
					
						
							|  |  |  |  * copies of the Software, and to permit persons to whom the Software is | 
					
						
							|  |  |  |  * furnished to do so, subject to the following conditions: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The above copyright notice and this permission notice shall be included in all | 
					
						
							|  |  |  |  * copies or substantial portions of the Software. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
					
						
							|  |  |  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
					
						
							|  |  |  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
					
						
							|  |  |  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
					
						
							|  |  |  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
					
						
							|  |  |  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
					
						
							|  |  |  |  * SOFTWARE. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  | const path = require("path"); | 
					
						
							| 
									
										
										
										
											2019-11-18 10:56:40 +01:00
										 |  |  | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); | 
					
						
							|  |  |  | const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  | const WorkerPlugin = require("worker-plugin"); | 
					
						
							| 
									
										
										
										
											2020-01-13 21:38:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  | const createIndexMiddleware = require("./middleware/IndexMiddleware"); | 
					
						
							|  |  |  | const createContextPathMiddleware = require("./middleware/ContextPathMiddleware"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-15 10:17:27 +01:00
										 |  |  | const isDevelopment = process.env.NODE_ENV === "development"; | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  | const root = path.resolve(process.cwd(), "scm-ui"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  | const babelPlugins = []; | 
					
						
							|  |  |  | const webpackPlugins = [new WorkerPlugin()]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let mode = "production"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (isDevelopment) { | 
					
						
							|  |  |  |   mode = "development"; | 
					
						
							|  |  |  |   babelPlugins.push(require.resolve("react-refresh/babel")); | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  |   // it is ok to use require here, because we want to load the package conditionally
 | 
					
						
							|  |  |  |   // eslint-disable-next-line global-require
 | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |   const ReactRefreshWebpackPlugin = require("@pmmmwh/react-refresh-webpack-plugin"); | 
					
						
							|  |  |  |   webpackPlugins.push(new ReactRefreshWebpackPlugin()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | console.log(`build ${mode} bundles`); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  | module.exports = [ | 
					
						
							| 
									
										
										
										
											2019-11-18 10:56:40 +01:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |     mode, | 
					
						
							| 
									
										
										
										
											2020-03-04 12:20:37 +01:00
										 |  |  |     stats: "minimal", | 
					
						
							| 
									
										
										
										
											2019-11-18 10:56:40 +01:00
										 |  |  |     context: root, | 
					
						
							|  |  |  |     entry: { | 
					
						
							|  |  |  |       webapp: [path.resolve(__dirname, "webpack-public-path.js"), "./ui-webapp/src/index.tsx"] | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |     devtool: "cheap-module-eval-source-map", | 
					
						
							|  |  |  |     target: "web", | 
					
						
							|  |  |  |     node: { | 
					
						
							|  |  |  |       fs: "empty", | 
					
						
							|  |  |  |       net: "empty", | 
					
						
							|  |  |  |       tls: "empty" | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     module: { | 
					
						
							|  |  |  |       rules: [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           parser: { | 
					
						
							|  |  |  |             system: false, | 
					
						
							|  |  |  |             systemjs: false | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2019-10-19 16:38:07 +02:00
										 |  |  |           test: /\.(js|ts|jsx|tsx)$/i, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |           exclude: /node_modules/, | 
					
						
							|  |  |  |           use: [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               loader: "babel-loader", | 
					
						
							|  |  |  |               options: { | 
					
						
							|  |  |  |                 cacheDirectory: true, | 
					
						
							| 
									
										
										
										
											2020-01-13 21:38:28 +01:00
										 |  |  |                 presets: ["@scm-manager/babel-preset"], | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |                 plugins: babelPlugins | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |               } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           ] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           test: /\.(css|scss|sass)$/i, | 
					
						
							|  |  |  |           use: [ | 
					
						
							|  |  |  |             // Creates `style` nodes from JS strings
 | 
					
						
							|  |  |  |             "style-loader", | 
					
						
							| 
									
										
										
										
											2020-10-23 13:06:36 +02:00
										 |  |  |             { | 
					
						
							|  |  |  |               loader: "css-loader", | 
					
						
							|  |  |  |               options: { | 
					
						
							|  |  |  |                 // Run `postcss-loader` on each CSS `@import`, do not forget that `sass-loader` compile non CSS `@import`'s into a single file
 | 
					
						
							|  |  |  |                 // If you need run `sass-loader` and `postcss-loader` on each CSS `@import` please set it to `2`
 | 
					
						
							|  |  |  |                 importLoaders: 1, | 
					
						
							|  |  |  |                 // Automatically enable css modules for files satisfying `/\.module\.\w+$/i` RegExp.
 | 
					
						
							|  |  |  |                 modules: { auto: true } | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             }, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |             // Compiles Sass to CSS
 | 
					
						
							|  |  |  |             "sass-loader" | 
					
						
							|  |  |  |           ] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           test: /\.(png|svg|jpg|gif|woff2?|eot|ttf)$/, | 
					
						
							|  |  |  |           use: ["file-loader"] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2019-10-19 16:38:07 +02:00
										 |  |  |     resolve: { | 
					
						
							| 
									
										
										
										
											2019-10-21 14:52:08 +02:00
										 |  |  |       extensions: [".ts", ".tsx", ".js", ".jsx", ".css", ".scss", ".json"] | 
					
						
							| 
									
										
										
										
											2019-10-19 16:38:07 +02:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |     output: { | 
					
						
							| 
									
										
										
										
											2020-12-22 14:53:45 +01:00
										 |  |  |       path: path.join(root, "build", "webapp", "assets"), | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |       filename: "[name].bundle.js", | 
					
						
							|  |  |  |       chunkFilename: "[name].bundle.js" | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |     }, | 
					
						
							|  |  |  |     devServer: { | 
					
						
							|  |  |  |       contentBase: path.join(root, "ui-webapp", "public"), | 
					
						
							|  |  |  |       compress: false, | 
					
						
							|  |  |  |       historyApiFallback: true, | 
					
						
							|  |  |  |       overlay: true, | 
					
						
							|  |  |  |       port: 3000, | 
					
						
							| 
									
										
										
										
											2021-01-13 09:08:50 +01:00
										 |  |  |       hot: true, | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  |       before: app => { | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |         app.use(createContextPathMiddleware("/scm")); | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  |       after: app => { | 
					
						
							| 
									
										
										
										
											2019-10-21 14:52:08 +02:00
										 |  |  |         const templatePath = path.join(root, "ui-webapp", "public", "index.mustache"); | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  |         const stage = process.env.NODE_ENV || "DEVELOPMENT"; | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |         const renderParams = { | 
					
						
							| 
									
										
										
										
											2020-08-25 08:42:16 +02:00
										 |  |  |           contextPath: "/scm", | 
					
						
							|  |  |  |           scmStage: stage.toUpperCase() | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |         }; | 
					
						
							|  |  |  |         app.use(createIndexMiddleware(templatePath, renderParams)); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       publicPath: "/assets/" | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     optimization: { | 
					
						
							|  |  |  |       runtimeChunk: "single", | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |       namedChunks: true, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |       splitChunks: { | 
					
						
							|  |  |  |         chunks: "all", | 
					
						
							|  |  |  |         cacheGroups: { | 
					
						
							|  |  |  |           vendors: { | 
					
						
							|  |  |  |             test: /[\\/]node_modules[\\/]/, | 
					
						
							|  |  |  |             priority: -10 | 
					
						
							|  |  |  |             // chunks: chunk => chunk.name !== "polyfill"
 | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |           default: { | 
					
						
							|  |  |  |             minChunks: 2, | 
					
						
							|  |  |  |             priority: -20, | 
					
						
							|  |  |  |             reuseExistingChunk: true | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2020-01-13 21:38:28 +01:00
										 |  |  |     }, | 
					
						
							| 
									
										
										
										
											2020-01-27 13:30:46 +01:00
										 |  |  |     plugins: webpackPlugins | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2019-11-20 14:47:47 +01:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2021-01-13 09:08:50 +01:00
										 |  |  |     mode, | 
					
						
							| 
									
										
										
										
											2019-11-20 14:47:47 +01:00
										 |  |  |     context: root, | 
					
						
							|  |  |  |     entry: "./ui-styles/src/scm.scss", | 
					
						
							|  |  |  |     module: { | 
					
						
							|  |  |  |       rules: [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           test: /\.(css|scss|sass)$/i, | 
					
						
							|  |  |  |           use: [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |               loader: MiniCssExtractPlugin.loader | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             "css-loader", | 
					
						
							|  |  |  |             "sass-loader" | 
					
						
							|  |  |  |           ] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           test: /\.(png|svg|jpg|gif|woff2?|eot|ttf)$/, | 
					
						
							|  |  |  |           use: ["file-loader"] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     plugins: [ | 
					
						
							|  |  |  |       new MiniCssExtractPlugin({ | 
					
						
							|  |  |  |         filename: "ui-styles.css", | 
					
						
							|  |  |  |         ignoreOrder: false | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     optimization: { | 
					
						
							|  |  |  |       minimizer: [new OptimizeCSSAssetsPlugin({})] | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     output: { | 
					
						
							| 
									
										
										
										
											2020-12-22 14:53:45 +01:00
										 |  |  |       path: path.join(root, "build", "webapp", "assets"), | 
					
						
							| 
									
										
										
										
											2019-11-20 14:47:47 +01:00
										 |  |  |       filename: "ui-styles.bundle.js" | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2021-01-13 09:08:50 +01:00
										 |  |  |     mode, | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |     context: path.resolve(root), | 
					
						
							|  |  |  |     entry: { | 
					
						
							|  |  |  |       polyfills: "./ui-polyfill/src/index.js" | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     output: { | 
					
						
							| 
									
										
										
										
											2020-12-22 14:53:45 +01:00
										 |  |  |       path: path.resolve(root, "build", "webapp", "assets"), | 
					
						
							| 
									
										
										
										
											2019-10-14 16:00:50 +02:00
										 |  |  |       filename: "[name].bundle.js" | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | ]; |