| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- var U2 = require("uglify-js");
- let htmlMinify = require('html-minifier').minify;
- var CleanCSS = require('clean-css');
- defaultOptions = {
- collapseWhitespace: true,
- minifyCSS:true,
- }
- module.exports = function (code, options){
- let mergedOptions = {...defaultOptions, ...options}
- const ast = U2.parse(code)
- let cssOptions = false;
- if (mergedOptions.minifyCSS){
- cssOptions = typeof mergedOptions.minifyCSS == 'object' ? mergedOptions.minifyCSS:{}
- }
- // Accumulate lit-html tempaltes nodes in this array
- const lit_html_templates = [];
- ast.walk(new U2.TreeWalker( (node)=>{
- if (node instanceof U2.AST_Template && node.tag && ['html','css','svg'].includes(node.tag.name)){
- lit_html_templates.push(node);
- }
- }))
- for (let i = lit_html_templates.length; --i >= 0 ;) {
- var node = lit_html_templates[i];
- const templateContent = node.strings.map(s=>s.replace(/[\n|\r]/gm, ' ')).join('${}')
- let output
- if(node.tag.name =="html"){
- output = htmlMinify(templateContent, mergedOptions);
- } else if(node.tag.name == "css" && cssOptions){
- output = new CleanCSS(cssOptions).minify(templateContent).styles;
- } else if(node.tag.name == "svg"){
- // Todo implement svgo optimisation
- output = htmlMinify(templateContent, mergedOptions);
- }
- node.strings = output.split("${}");
- }
- return ast.print_to_string({ beautify: false });;
- }
|