* @fileoverview A small wrapper around
* third_party/node/node_modules/html-minifier, allowing processing an explicit
* list of input files, which is not supported by the built-in CLI of
* html-minifier.
*/
const minify =
require(
'../../third_party/node/node_modules/html-minifier/src/htmlminifier.js')
.minify;
const path = require('path');
const fs = require('fs/promises');
const REGEX = /^<style>(?<content>[\s\S]+)<\/style>$/;
async function processFile(inputFile, outputFile) {
let contents = await fs.readFile(inputFile, {encoding: 'utf8'});
if (inputFile.endsWith('.css')) {
contents = `<style>${contents}</style>`;
}
let result = minify(contents, {
removeComments: true,
minifyCSS: true,
});
if (inputFile.endsWith('.css')) {
const match = result.match(REGEX);
result = match.groups['content'];
}
await fs.mkdir(path.dirname(outputFile), {recursive: true});
return fs.writeFile(outputFile, result, {enconding: 'utf8'});
}
function main() {
const args = {
inputDir: process.argv[2],
outputDir: process.argv[3],
inputFiles: process.argv.slice(4),
}
for (const f of args.inputFiles) {
processFile(path.join(args.inputDir, f), path.join(args.outputDir, f));
}
}
main();