123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import { Compiler } from 'webpack';
- const path = require('path');
- const fs = require('fs');
- const zlib = require("zlib");
- export = SPIFFSUpdate;
- // Define the interface for the plugin options
- interface SPIFFSUpdateOptions {
- sourceFiles?: string[];
- targetFiles?: string[];
- compress?: boolean;
- }
- class SPIFFSUpdate {
- private sourceFiles: string[];
- private targetFiles: string[];
- private compress: boolean;
- constructor(options: SPIFFSUpdateOptions) {
- this.sourceFiles = options.sourceFiles || []; // Array of proto_path directories
- this.targetFiles = options.targetFiles || []; // Array of proto source files or directories
- this.compress = options.compress || true; // Output directory
- }
- apply(compiler: Compiler) {
- compiler.hooks.afterEmit.tapAsync('GrpcToolsNodeProtocPlugin', (compilation, callback) => {
- try {
- fs.appendFileSync('./dist/index.html.gz',
- zlib.gzipSync(fs.readFileSync('./dist/index.html'),
- {
- chunckSize: 65536,
- level: zlib.constants.Z_BEST_COMPRESSION
- })
- );
-
- // if (options.mode !== "production") return;
- // let buildRootPath = path.join(process.cwd(), '..', '..', '..');
- // let wifiManagerPath = glob.sync(path.join(buildRootPath, 'components/**/wifi-manager*'))[0];
- // let buildCRootPath = glob.sync(buildRootPath)[0];
- // fs.appendFileSync('./dist/index.html.gz',
- // zlib.gzipSync(fs.readFileSync('./dist/index.html'),
- // {
- // chunckSize: 65536,
- // level: zlib.constants.Z_BEST_COMPRESSION
- // }));
- // var getDirectories = function (src, callback) {
- // var searchPath = path.posix.join(src, '/**/*(*.gz|favicon-32x32.png)');
- // console.log(`Post build: Getting file list from ${searchPath}`);
- // glob(searchPath, callback);
- // };
- // var cleanUpPath = path.posix.join(buildCRootPath, '/build/*.S');
- // console.log(`Post build: Cleaning up previous builds in ${cleanUpPath}`);
- // glob(cleanUpPath, function (err, list) {
- // if (err) {
- // console.error('Error', err);
- // } else {
- // list.forEach(fileName => {
- // try {
- // console.log(`Post build: Purging old binary file ${fileName} from C project.`);
- // fs.unlinkSync(fileName)
- // //file removed
- // } catch (ferr) {
- // console.error(ferr)
- // }
- // });
- // }
- // },
- // 'afterEmit'
- // );
- // console.log('Generating C include files from webpack build output');
- // getDirectories('./dist', function (err, list) {
- // console.log(`Post build: found ${list.length} files. Relative path: ${wifiManagerPath}.`);
- // if (err) {
- // console.log('Error', err);
- // } else {
- // let exportDefHead =
- // `/***********************************
- // webpack_headers
- // ${arguments[1]}
- // ***********************************/
- // #pragma once
- // #include <inttypes.h>
- // extern const char * resource_lookups[];
- // extern const uint8_t * resource_map_start[];
- // extern const uint8_t * resource_map_end[];`;
- // 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(foundFile => {
- // let exportName = path.basename(foundFile).replace(/[\. \-]/gm, '_');
- // //take the full path of the file and make it relative to the build directory
- // let cmakeFileName = path.posix.relative(wifiManagerPath, glob.sync(path.resolve(foundFile))[0]);
- // let httpRelativePath = path.posix.join('/', path.posix.relative('dist', foundFile));
- // exportDef += `extern const uint8_t _${exportName}_start[] asm("_binary_${exportName}_start");\nextern const uint8_t _${exportName}_end[] asm("_binary_${exportName}_end");\n`;
- // lookupDef += `\t"${httpRelativePath}",\n`;
- // lookupMapStart += '\t_' + exportName + '_start,\n';
- // lookupMapEnd += '\t_' + exportName + '_end,\n';
- // cMake += `target_add_binary_data( __idf_wifi-manager ${cmakeFileName} BINARY)\n`;
- // console.log(`Post build: adding cmake file reference to ${cmakeFileName} from C project, with web path ${httpRelativePath}.`);
- // });
- // 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.');
- // })
- } catch (error) {
- console.error('Error setting up grpc-tools protoc', error);
- }
- callback();
- });
- }
- }
|