[go: nahoru, domu]

blob: 3ab8f90326465f7ae5497aa606be0761d0e10981 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @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 assert = require('assert');
const fs = require('fs/promises');
const path = require('path');
// Regex to extract the CSS contents out of the HTML string. It matches anything
// that is wrapped by a '<style>...</style>' pair.
const REGEX = /^<style>(?<content>[\s\S]+)<\/style>$/;
async function processFile(inputFile, outputFile) {
// Read file.
let contents = await fs.readFile(inputFile, {encoding: 'utf8'});
if (inputFile.endsWith('.css')) {
// If this is a CSS file, wrap it with a <style> tag first, since
// html-minifier only accepts HTML as input.
contents = `<style>${contents}</style>`;
}
// Pass through html-minifier.
let result = minify(contents, {
removeComments: true,
minifyCSS: true,
});
if (inputFile.endsWith('.css')) {
// If this is a CSS file, remove the <style>...</style> wrapper that was
// added above.
const match = result.match(REGEX);
if (match === null) {
// If this is a '_lit.css' file, allow it to be an empty file, since it is
// handled specially by the parent script, css_to_wrapper.py.
assert.ok(inputFile.endsWith('_lit.css'));
result = '';
} else {
result = match.groups['content'];
}
}
// Save result.
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();