| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | 
							- /* eslint-disable  */
 
- // Merges webpack.common config with this production config
 
- const merge = require('webpack-merge');
 
- const common = require('./webpack.common.js');
 
- const webpack = require('webpack');
 
- const CleanWebpackPlugin = require('clean-webpack-plugin');
 
- // Optimisations and Compression
 
- const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 
- const TerserPlugin = require('terser-webpack-plugin');
 
- const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
 
- const CompressionPlugin = require('compression-webpack-plugin');
 
- const fs = require('fs');
 
- const glob = require('glob');
 
- var WebpackOnBuildPlugin = require('on-build-webpack');
 
- const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
 
- const path = require('path')
 
- const ExtractTextPlugin = require('extract-text-webpack-plugin')
 
- const PurgecssPlugin = require('purgecss-webpack-plugin')
 
- // Optional
 
- const FaviconsWebpackPlugin = require('favicons-webpack-plugin');
 
- const PATHS = {
 
-     src: path.join(__dirname, 'src')
 
-   }
 
- module.exports = merge(common, {
 
-     mode: 'production',
 
-     stats: 'errors-only',
 
-     optimization: {
 
-         minimizer: [
 
-             new TerserPlugin({
 
-                 test: /\.js(\?.*)?$/i,
 
-                 exclude: /node_modules/,
 
-                 cache: true,
 
-                 parallel: 4,
 
-                 sourceMap: true,
 
-             }),
 
-             new OptimizeCSSAssetsPlugin({})
 
-         ],
 
-         runtimeChunk: 'single',
 
-         splitChunks: {
 
-             chunks: 'all',
 
-             // maxInitialRequests: Infinity,
 
-             // minSize: 0,
 
-             cacheGroups: {
 
-                 vendor: {
 
-                     test: /node_modules/, // you may add "vendor.js" here if you want to
 
-                     name: "node-modules",
 
-                     chunks: "initial",
 
-                     enforce: true
 
-                 },
 
-             }
 
-         },
 
-     },
 
-     plugins: [
 
-         new MiniCssExtractPlugin({
 
-             filename: 'css/[name].[hash:6].css',
 
-             chunkFilename: 'css/[name].[contenthash].css',
 
-         }),
 
-         new ExtractTextPlugin('[name].css?[hash]'),
 
-     new PurgecssPlugin({
 
-       paths: glob.sync(`${PATHS.src}/*`),
 
-       whitelist: ['whitelisted']
 
-     }),
 
-         new CleanWebpackPlugin(),
 
-         new CompressionPlugin({
 
-             test: /\.(js|css|html|svg)$/,
 
-             filename: '[path].br[query]',
 
-             algorithm: 'brotliCompress',
 
-             compressionOptions: { level: 11 },
 
-             threshold: 100,
 
-             minRatio: 0.8,
 
-             deleteOriginalAssets: false
 
-         }),
 
-         new CompressionPlugin({
 
-             filename: '[path].gz[query]',
 
-             algorithm: 'gzip',
 
-             test: /\.js$|\.css$|\.html$/,
 
-             threshold: 100,
 
-             minRatio: 0.8,
 
-         }),
 
-         // new FaviconsWebpackPlugin({
 
-         //     // Your source logo
 
-         //     logo: './src/assets/images/200px-ControllerAppIcon.png',
 
-         //     // // The prefix for all image files (might be a folder or a name)
 
-         //     //prefix: 'assets/icons_[hash:6]/',
 
-         //     prefix: 'icons_[hash:6]/',
 
-         //     // // Emit all stats of the generated icons
 
-         //     //emitStats: false,
 
-         //     // // The name of the json containing all favicon information
 
-         //     // statsFilename: 'iconstats-[hash].json',
 
-         //     // // Generate a cache file with control hashes and
 
-         //     // // don't rebuild the favicons until those hashes change
 
-         //     persistentCache: true,
 
-         //     // // Inject the html into the html-webpack-plugin
 
-         //     inject: true,
 
-         //     // // favicon background color (see https://github.com/haydenbleasel/favicons#usage)
 
-         //     background: '#fff',
 
-         //     // // which icons should be generated (see https://github.com/haydenbleasel/favicons#usage)
 
-         //      icons: {
 
-         //     //   android: false,
 
-         //     //   appleIcon: false,
 
-         //        favicons: true
 
-         //     //   firefox: true,
 
-         //     //   windows: false
 
-         //     }
 
-         // }),
 
-         new WebpackOnBuildPlugin(function(stats) {
 
-             var getDirectories = function (src, callback) {
 
-                 glob(`${src}/**/*(*.gz|favicon-32x32.png)`, callback);
 
-                 };
 
-             console.log('Cleaning up previous builds');
 
-             glob(`../../../build/*.S`, function (err, list) {                  
 
-                 if (err) {
 
-                     console.error('Error', err);
 
-                 } else {
 
-                     list.forEach(fileName=>{
 
-                         try {
 
-                             console.log(`Purging old binary file ${fileName} from C project.`);
 
-                             fs.unlinkSync(fileName)
 
-                             //file removed
 
-                             } catch(ferr) {
 
-                             console.error(ferr)
 
-                             }
 
-                     });
 
-                 }
 
-             }
 
-             );
 
-             console.log('Generating C include files from webpack build output');
 
-             getDirectories('./webpack/dist', function (err, list) {
 
-                 if (err) {
 
-                     console.log('Error', err);
 
-                 } else {
 
-                     const regex = /^(.*\/)([^\/]*)$/
 
-                     const relativeRegex = /((\w+(?<!dist)\/){0,1}[^\/]*)$/
 
-                     const makePathRegex = /([^\.].*)$/
 
-                     let exportDefHead=
 
-                     '/***********************************\n'+
 
-                     'webpack_headers\n'+
 
-                     stats+'\n'+
 
-                     '***********************************/\n'+
 
-                     '#pragma once\n'+
 
-                     '#include <inttypes.h>\n'+
 
-                     'extern const char * resource_lookups[];\n'+
 
-                     'extern const uint8_t * resource_map_start[];\n'+
 
-                     'extern const uint8_t * resource_map_end[];\n';
 
-                     let exportDef=  '// Automatically generated. Do not edit manually!.\n'+
 
-                                     '#include <inttypes.h>\n';
 
-                     let lookupDef='const char * resource_lookups[] = {\n';
 
-                     let lookupMapStart='const uint8_t * resource_map_start[] = {\n';
 
-                     let lookupMapEnd='const uint8_t * resource_map_end[] = {\n';
 
-                     let cMake='';
 
-                     list.forEach(fileName=>{
 
-                             let exportName=fileName.match(regex)[2].replace(/[\. \-]/gm,'_');
 
-                             let relativeName=fileName.match(relativeRegex)[1];
 
-                             exportDef+=	'extern const uint8_t _'+exportName+'_start[] asm("_binary_'+exportName+'_start");\n'+
 
-                                     'extern const uint8_t _'+exportName+'_end[] asm("_binary_'+exportName+'_end");\n';
 
-                             lookupDef+='\t"/'+relativeName+'",\n';
 
-                             lookupMapStart+='\t_'+ exportName+'_start,\n';
 
-                             lookupMapEnd+= '\t_'+ exportName+'_end,\n';
 
-                             cMake+='target_add_binary_data( __idf_wifi-manager ./webapp'+fileName.match(makePathRegex)[1]+' BINARY)\n';
 
-                     });
 
-                     lookupDef+='""\n};\n';
 
-                     lookupMapStart=lookupMapStart.substring(0,lookupMapStart.length-2)+'\n};\n';
 
-                     lookupMapEnd=lookupMapEnd.substring(0,lookupMapEnd.length-2)+'\n};\n';
 
-                     try {
 
-                         fs.writeFileSync('webapp.cmake', cMake);
 
-                         fs.writeFileSync('webpack.c', exportDef+lookupDef+lookupMapStart+lookupMapEnd);
 
-                         fs.writeFileSync('webpack.h', exportDefHead);
 
-                         //file written successfully
 
-                         } catch (e) {
 
-                         console.error(e);
 
-                         }        
 
-                 }
 
-             });
 
-             console.log('Post build completed.');
 
-         }),
 
-         new BundleAnalyzerPlugin()               
 
-     ]
 
- });
 
 
  |