| 
									
										
										
										
											2020-05-14 06:56:18 +00:00
										 |  |  | // @ts-nocheck
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  | const path = require("path"); | 
					
						
							|  |  |  | const webpack = require("webpack"); | 
					
						
							| 
									
										
										
										
											2020-08-07 07:16:23 +00:00
										 |  |  | const { getRevision, getVersion, getAllResourceImages } = require("./buildutils"); | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  | const lzString = require("lz-string"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const TerserPlugin = require("terser-webpack-plugin"); | 
					
						
							|  |  |  | const StringReplacePlugin = require("string-replace-webpack-plugin"); | 
					
						
							|  |  |  | const UnusedFilesPlugin = require("unused-files-webpack-plugin").UnusedFilesWebpackPlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = ({ | 
					
						
							|  |  |  |     enableAssert = false, | 
					
						
							|  |  |  |     environment, | 
					
						
							|  |  |  |     es6 = false, | 
					
						
							|  |  |  |     standalone = false, | 
					
						
							|  |  |  |     isBrowser = true, | 
					
						
							|  |  |  |     mobileApp = false, | 
					
						
							|  |  |  | }) => { | 
					
						
							|  |  |  |     const globalDefs = { | 
					
						
							|  |  |  |         assert: enableAssert ? "window.assert" : "false && window.assert", | 
					
						
							|  |  |  |         assertAlways: "window.assert", | 
					
						
							|  |  |  |         abstract: "window.assert(false, 'abstract method called');", | 
					
						
							|  |  |  |         G_IS_DEV: "false", | 
					
						
							|  |  |  |         G_IS_RELEASE: environment === "prod" ? "true" : "false", | 
					
						
							|  |  |  |         G_IS_STANDALONE: standalone ? "true" : "false", | 
					
						
							|  |  |  |         G_IS_BROWSER: isBrowser ? "true" : "false", | 
					
						
							|  |  |  |         G_IS_MOBILE_APP: mobileApp ? "true" : "false", | 
					
						
							|  |  |  |         G_TRACKING_ENDPOINT: JSON.stringify( | 
					
						
							|  |  |  |             lzString.compressToEncodedURIComponent("https://tracking.shapez.io/v1") | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         G_APP_ENVIRONMENT: JSON.stringify(environment), | 
					
						
							|  |  |  |         G_HAVE_ASSERT: enableAssert ? "true" : "false", | 
					
						
							|  |  |  |         G_BUILD_TIME: "" + new Date().getTime(), | 
					
						
							| 
									
										
										
										
											2020-08-07 07:16:23 +00:00
										 |  |  |         G_BUILD_COMMIT_HASH: JSON.stringify(getRevision()), | 
					
						
							|  |  |  |         G_BUILD_VERSION: JSON.stringify(getVersion()), | 
					
						
							|  |  |  |         G_ALL_UI_IMAGES: JSON.stringify(getAllResourceImages()), | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-13 09:56:42 +00:00
										 |  |  |     const minifyNames = environment === "prod"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |     return { | 
					
						
							|  |  |  |         mode: "production", | 
					
						
							|  |  |  |         entry: { | 
					
						
							|  |  |  |             "bundle.js": [path.resolve(__dirname, "..", "src", "js", "main.js")], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         node: { | 
					
						
							|  |  |  |             fs: "empty", | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         output: { | 
					
						
							|  |  |  |             filename: "bundle.js", | 
					
						
							|  |  |  |             path: path.resolve(__dirname, "..", "build"), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         context: path.resolve(__dirname, ".."), | 
					
						
							|  |  |  |         stats: { | 
					
						
							|  |  |  |             // Examine all modules
 | 
					
						
							|  |  |  |             maxModules: Infinity, | 
					
						
							|  |  |  |             // Display bailout reasons
 | 
					
						
							|  |  |  |             optimizationBailout: true, | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-05-15 07:09:37 +00:00
										 |  |  |         // devtool: "source-map",
 | 
					
						
							|  |  |  |         devtool: false, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |         resolve: { | 
					
						
							|  |  |  |             alias: { | 
					
						
							|  |  |  |                 "global-compression": path.resolve(__dirname, "..", "src", "js", "core", "lzstring.js"), | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         optimization: { | 
					
						
							|  |  |  |             minimize: true, | 
					
						
							|  |  |  |             // namedModules: true,
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             noEmitOnErrors: true, | 
					
						
							|  |  |  |             removeAvailableModules: true, | 
					
						
							|  |  |  |             removeEmptyChunks: true, | 
					
						
							|  |  |  |             mergeDuplicateChunks: true, | 
					
						
							|  |  |  |             flagIncludedChunks: true, | 
					
						
							|  |  |  |             occurrenceOrder: true, | 
					
						
							|  |  |  |             providedExports: true, | 
					
						
							|  |  |  |             usedExports: true, | 
					
						
							|  |  |  |             concatenateModules: true, | 
					
						
							|  |  |  |             sideEffects: true, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             minimizer: [ | 
					
						
							|  |  |  |                 new TerserPlugin({ | 
					
						
							|  |  |  |                     parallel: true, | 
					
						
							| 
									
										
										
										
											2020-05-15 07:09:37 +00:00
										 |  |  |                     sourceMap: false, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                     cache: false, | 
					
						
							|  |  |  |                     terserOptions: { | 
					
						
							|  |  |  |                         ecma: es6 ? 6 : 5, | 
					
						
							|  |  |  |                         parse: {}, | 
					
						
							|  |  |  |                         module: true, | 
					
						
							|  |  |  |                         toplevel: true, | 
					
						
							| 
									
										
										
										
											2020-06-13 09:56:42 +00:00
										 |  |  |                         keep_classnames: !minifyNames, | 
					
						
							|  |  |  |                         keep_fnames: !minifyNames, | 
					
						
							|  |  |  |                         keep_fargs: !minifyNames, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                         safari10: true, | 
					
						
							|  |  |  |                         compress: { | 
					
						
							|  |  |  |                             arguments: false, // breaks
 | 
					
						
							|  |  |  |                             drop_console: false, | 
					
						
							|  |  |  |                             global_defs: globalDefs, | 
					
						
							| 
									
										
										
										
											2020-06-13 09:56:42 +00:00
										 |  |  |                             keep_fargs: !minifyNames, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                             keep_infinity: true, | 
					
						
							|  |  |  |                             passes: 2, | 
					
						
							|  |  |  |                             module: true, | 
					
						
							|  |  |  |                             pure_funcs: [ | 
					
						
							| 
									
										
										
										
											2020-06-27 08:51:52 +00:00
										 |  |  |                                 "Math.radians", | 
					
						
							|  |  |  |                                 "Math.degrees", | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                                 "Math.round", | 
					
						
							|  |  |  |                                 "Math.ceil", | 
					
						
							|  |  |  |                                 "Math.floor", | 
					
						
							|  |  |  |                                 "Math.sqrt", | 
					
						
							|  |  |  |                                 "Math.hypot", | 
					
						
							|  |  |  |                                 "Math.abs", | 
					
						
							|  |  |  |                                 "Math.max", | 
					
						
							|  |  |  |                                 "Math.min", | 
					
						
							|  |  |  |                                 "Math.sin", | 
					
						
							|  |  |  |                                 "Math.cos", | 
					
						
							|  |  |  |                                 "Math.tan", | 
					
						
							|  |  |  |                                 "Math.sign", | 
					
						
							|  |  |  |                                 "Math.pow", | 
					
						
							|  |  |  |                                 "Math.atan2", | 
					
						
							|  |  |  |                             ], | 
					
						
							|  |  |  |                             toplevel: true, | 
					
						
							|  |  |  |                             unsafe_math: true, | 
					
						
							|  |  |  |                             unsafe_arrows: false, | 
					
						
							|  |  |  |                             warnings: true, | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                         mangle: { | 
					
						
							|  |  |  |                             eval: true, | 
					
						
							| 
									
										
										
										
											2020-06-13 09:56:42 +00:00
										 |  |  |                             keep_classnames: !minifyNames, | 
					
						
							|  |  |  |                             keep_fnames: !minifyNames, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                             module: true, | 
					
						
							|  |  |  |                             toplevel: true, | 
					
						
							|  |  |  |                             safari10: true, | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                         output: { | 
					
						
							|  |  |  |                             comments: false, | 
					
						
							|  |  |  |                             ascii_only: true, | 
					
						
							|  |  |  |                             beautify: false, | 
					
						
							|  |  |  |                             braces: false, | 
					
						
							|  |  |  |                             ecma: es6 ? 6 : 5, | 
					
						
							|  |  |  |                             preamble: | 
					
						
							| 
									
										
										
										
											2020-06-13 09:56:42 +00:00
										 |  |  |                                 "/* shapez.io Codebase - Copyright 2020 Tobias Springer - " + | 
					
						
							| 
									
										
										
										
											2020-08-07 07:16:23 +00:00
										 |  |  |                                 getVersion() + | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                                 " @ " + | 
					
						
							| 
									
										
										
										
											2020-08-07 07:16:23 +00:00
										 |  |  |                                 getRevision() + | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                                 " */", | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                     }, | 
					
						
							|  |  |  |                 }), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         performance: { | 
					
						
							|  |  |  |             maxEntrypointSize: 5120000, | 
					
						
							|  |  |  |             maxAssetSize: 5120000, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         plugins: [ | 
					
						
							|  |  |  |             new webpack.DefinePlugin(globalDefs), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             new UnusedFilesPlugin({ | 
					
						
							|  |  |  |                 failOnUnused: false, | 
					
						
							|  |  |  |                 cwd: path.join(__dirname, "..", "src", "js"), | 
					
						
							|  |  |  |                 patterns: ["../src/js/**/*.js"], | 
					
						
							|  |  |  |             }), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         module: { | 
					
						
							|  |  |  |             rules: [ | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.json$/, | 
					
						
							|  |  |  |                     enforce: "pre", | 
					
						
							|  |  |  |                     use: ["./gulp/loader.compressjson"], | 
					
						
							|  |  |  |                     type: "javascript/auto", | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 { test: /\.(png|jpe?g|svg)$/, loader: "ignore-loader" }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.js$/, | 
					
						
							|  |  |  |                     enforce: "pre", | 
					
						
							|  |  |  |                     exclude: /node_modules/, | 
					
						
							|  |  |  |                     use: [ | 
					
						
							|  |  |  |                         { | 
					
						
							|  |  |  |                             loader: "webpack-strip-block", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 start: "typehints:start", | 
					
						
							|  |  |  |                                 end: "typehints:end", | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                         { | 
					
						
							|  |  |  |                             loader: "webpack-strip-block", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 start: "dev:start", | 
					
						
							|  |  |  |                                 end: "dev:end", | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         }, | 
					
						
							| 
									
										
										
										
											2020-06-28 09:44:30 +00:00
										 |  |  |                         { | 
					
						
							|  |  |  |                             loader: "webpack-strip-block", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 start: "wires:start", | 
					
						
							|  |  |  |                                 end: "wires:end", | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         }, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                     ], | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.js$/, | 
					
						
							|  |  |  |                     use: [ | 
					
						
							|  |  |  |                         // "thread-loader",
 | 
					
						
							|  |  |  |                         { | 
					
						
							|  |  |  |                             loader: "babel-loader?cacheDirectory", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 configFile: require.resolve( | 
					
						
							|  |  |  |                                     es6 ? "./babel-es6.config.js" : "./babel.config.js" | 
					
						
							|  |  |  |                                 ), | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                         "uglify-template-string-loader", // Finally found this plugin
 | 
					
						
							|  |  |  |                         StringReplacePlugin.replace({ | 
					
						
							|  |  |  |                             replacements: [ | 
					
						
							|  |  |  |                                 { pattern: /globalConfig\.tileSize/g, replacement: () => "32" }, | 
					
						
							|  |  |  |                                 { pattern: /globalConfig\.halfTileSize/g, replacement: () => "16" }, | 
					
						
							|  |  |  |                                 { | 
					
						
							|  |  |  |                                     pattern: /globalConfig\.beltSpeedItemsPerSecond/g, | 
					
						
							| 
									
										
										
										
											2020-05-17 13:56:00 +00:00
										 |  |  |                                     replacement: () => "2.0", | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                                 }, | 
					
						
							|  |  |  |                                 { pattern: /globalConfig\.debug/g, replacement: () => "''" }, | 
					
						
							|  |  |  |                             ], | 
					
						
							|  |  |  |                         }), | 
					
						
							|  |  |  |                     ], | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.worker\.js$/, | 
					
						
							| 
									
										
										
										
											2020-05-15 07:09:37 +00:00
										 |  |  |                     use: [ | 
					
						
							|  |  |  |                         { | 
					
						
							|  |  |  |                             loader: "worker-loader", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 fallback: false, | 
					
						
							|  |  |  |                                 inline: true, | 
					
						
							|  |  |  |                             }, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                         }, | 
					
						
							| 
									
										
										
										
											2020-05-15 07:09:37 +00:00
										 |  |  |                         { | 
					
						
							|  |  |  |                             loader: "babel-loader?cacheDirectory", | 
					
						
							|  |  |  |                             options: { | 
					
						
							|  |  |  |                                 configFile: require.resolve( | 
					
						
							|  |  |  |                                     es6 ? "./babel-es6.config.js" : "./babel.config.js" | 
					
						
							|  |  |  |                                 ), | 
					
						
							|  |  |  |                             }, | 
					
						
							|  |  |  |                         }, | 
					
						
							|  |  |  |                     ], | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |                 }, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.md$/, | 
					
						
							|  |  |  |                     use: ["html-loader", "markdown-loader"], | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2020-05-16 10:43:11 +00:00
										 |  |  |                 { | 
					
						
							|  |  |  |                     test: /\.ya?ml$/, | 
					
						
							|  |  |  |                     type: "json", // Required by Webpack v4
 | 
					
						
							|  |  |  |                     use: "yaml-loader", | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2020-05-09 14:45:23 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | }; |