UNPKG

svelteesp32

Version:

Convert Svelte (or any frontend) JS application to serve it from ESP32 webserver (PsychicHttp)

83 lines (82 loc) 3.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_crypto_1 = require("node:crypto"); const node_fs_1 = require("node:fs"); const node_path_1 = __importDefault(require("node:path")); const node_zlib_1 = require("node:zlib"); const mime_types_1 = require("mime-types"); const commandLine_1 = require("./commandLine"); const consoleColor_1 = require("./consoleColor"); const cppCode_1 = require("./cppCode"); const file_1 = require("./file"); const summary = { filecount: 0, size: 0, gzipsize: 0 }; const sources = []; const filesByExtension = []; console.log('Collecting source files'); const files = (0, file_1.getFiles)(); if (files.size === 0) { console.error(`Directory ${commandLine_1.cmdLine.sourcepath} is empty`); process.exit(1); } console.log(); console.log('Translation to header file'); const longestFilename = [...files.keys()].reduce((p, c) => Math.max(c.length, p), 0); for (const [originalFilename, content] of files) { const mimeType = (0, mime_types_1.lookup)(originalFilename) || 'text/plain'; summary.filecount++; const filename = originalFilename.replace(/\\/g, '/'); const dataname = filename.replace(/[!&()+./@{}~-]/g, '_'); let extension = node_path_1.default.extname(filename).toUpperCase(); if (extension.startsWith('.')) extension = extension.slice(1); const group = filesByExtension.find((fe) => fe.extension === extension); if (group) group.count += 1; else filesByExtension.push({ extension, count: 1 }); const md5 = (0, node_crypto_1.createHash)('md5').update(content).digest('hex'); summary.size += content.length; const zipContent = (0, node_zlib_1.gzipSync)(content, { level: 9 }); summary.gzipsize += zipContent.length; const zipRatio = Math.round((zipContent.length / content.length) * 100); if (content.length > 1024 && zipContent.length < content.length * 0.85) { sources.push({ filename, dataname, datanameUpperCase: dataname.toUpperCase(), content, contentGzip: zipContent, isGzip: true, mime: mimeType, md5 }); console.log((0, consoleColor_1.greenLog)(` [${originalFilename}] ${' '.repeat(longestFilename - originalFilename.length)} ✓ gzip used (${content.length} -> ${zipContent.length} = ${zipRatio}%)`)); } else { sources.push({ filename, dataname, datanameUpperCase: dataname.toUpperCase(), content, contentGzip: content, isGzip: false, mime: mimeType, md5 }); console.log((0, consoleColor_1.yellowLog)(` [${originalFilename}] ${' '.repeat(longestFilename - originalFilename.length)} x gzip unused ${content.length <= 1024 ? `(too small) ` : ''}(${content.length} -> ${zipContent.length} = ${zipRatio}%)`)); } } console.log(''); filesByExtension.sort((left, right) => left.extension.localeCompare(right.extension)); const cppFile = (0, cppCode_1.getCppCode)(sources, filesByExtension); (0, node_fs_1.mkdirSync)(node_path_1.default.normalize(node_path_1.default.dirname(commandLine_1.cmdLine.outputfile)), { recursive: true }); (0, node_fs_1.writeFileSync)(commandLine_1.cmdLine.outputfile, cppFile, { flush: true, encoding: 'utf8' }); console.log(`${summary.filecount} files, ${Math.round(summary.size / 1024)}kB original size, ${Math.round(summary.gzipsize / 1024)}kB gzip size`); console.log(`${commandLine_1.cmdLine.outputfile} ${Math.round(cppFile.length / 1024)}kB size`);