Files
nuki_hub/lib/MycilaWebSerial/portal/finalize.js
iranl 43ac62a22d Add Webserial (#444)
* Webserial

* Webserial
2024-08-09 16:35:42 +07:00

66 lines
2.2 KiB
JavaScript

let path = require('path');
let fs = require('fs');
const {minify} = require('html-minifier-terser');
let gzipAsync = require('@gfx/zopfli').gzipAsync;
const SAVE_PATH = '../src';
function chunkArray(myArray, chunk_size) {
let index = 0;
let arrayLength = myArray.length;
let tempArray = [];
for (index = 0; index < arrayLength; index += chunk_size) {
let myChunk = myArray.slice(index, index + chunk_size);
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(){
const indexHtml = fs.readFileSync(path.resolve(__dirname, './index.html')).toString();
const indexHtmlMinify = await minify(indexHtml, {
collapseWhitespace: true,
removeComments: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
useShortDoctype: true,
minifyCSS: true,
minifyJS: true,
sortAttributes: true, // 不会改变生成的html长度 但会优化压缩后体积
sortClassName: true, // 不会改变生成的html长度 但会优化压缩后体积
});
console.log(`[finalize.js] Minified index.html | Original Size: ${(indexHtml.length / 1024).toFixed(2) }KB | Minified Size: ${(indexHtmlMinify.length / 1024).toFixed(2) }KB`);
try{
const GZIPPED_INDEX = await gzipAsync(indexHtmlMinify, { numiterations: 15 });
const FILE =
`
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
const uint32_t WEBSERIAL_HTML_SIZE = ${GZIPPED_INDEX.length};
const uint8_t WEBSERIAL_HTML[] PROGMEM = {
${ addLineBreaks(GZIPPED_INDEX) }
};
`;
fs.writeFileSync(path.resolve(__dirname, SAVE_PATH+'/MycilaWebSerialPage.h'), FILE);
console.log(`[finalize.js] Compressed Bundle into MycilaWebSerialPage.h header file | Total Size: ${(GZIPPED_INDEX.length / 1024).toFixed(2) }KB`)
}catch(err){
return console.error(err);
}
})();