const { gzipAsync } = require('@gfx/zopfli'); const FS = require('fs'); const path = require('path'); const SAVE_PATH = '../src'; const BUNDLE_JS = FS.readFileSync(path.resolve(__dirname, './dist/js/app.js')); const INDEX_HTML = ` WebSerial
`; function chunkArray(myArray, chunk_size){ var index = 0; var arrayLength = myArray.length; var tempArray = []; for (index = 0; index < arrayLength; index += chunk_size) { myChunk = myArray.slice(index, index+chunk_size); // Do something if you want with the group tempArray.push(myChunk); } return tempArray; } function addLineBreaks(buffer){ let data = ''; let chunks = chunkArray(buffer, 30); chunks.forEach((chunk, index) => { data += chunk.join(','); if(index+1 !== chunks.length){ data+=',\n'; } }); return data; } (async function(){ try{ const GZIPPED_INDEX = await gzipAsync(INDEX_HTML, { numiterations: 15 }); const FILE = ` #ifndef _webserial_webapge_h #define _webserial_webpage_h const uint32_t WEBSERIAL_HTML_SIZE = ${GZIPPED_INDEX.length}; const uint8_t WEBSERIAL_HTML[] PROGMEM = { ${ addLineBreaks(GZIPPED_INDEX) } }; #endif `; FS.writeFileSync(path.resolve(__dirname, SAVE_PATH+'/webserial_webpage.h'), FILE); console.log(`[COMPRESS.js] Compressed Bundle into webpage.h header file | Total Size: ${(GZIPPED_INDEX.length / 1024).toFixed(2) }KB`) }catch(err){ return console.error(err); } })();