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 });; }