UNPKG

babel-plugin-string-minify

Version:
76 lines (60 loc) 1.91 kB
'use strict'; module.exports = function babelPluginminify(babel) { var t = babel.types; return { visitor: { CallExpression: function CallExpression(path) { var node = path.node; if (t.isIdentifier(node.callee, { name: 'minify' })) { if (t.isTemplateLiteral(node.arguments[0])) { transform(node.arguments[0].quasis); return path.replaceWith(node.arguments[0]); } else if (t.isTaggedTemplateExpression(node.arguments[0])) { transform(node.arguments[0].quasi.quasis); return path.replaceWith(node.arguments[0]); } } }, TaggedTemplateExpression: function TaggedTemplateExpression(path) { var node = path.node; if (t.isIdentifier(node.tag, { name: 'minify' })) { transform(node.quasi.quasis); return path.replaceWith(node.quasi); } } } }; }; function transform(quasis) { var elements = quasis.filter(function (element) { return element.type === 'TemplateElement'; }); rtrim(elements[elements.length - 1]); if (elements.length) { // let size = Math.min(...matches.map(value => value.length - 1)); var pattern = new RegExp('\n[\t ]*', 'g'); ['raw', 'cooked'].forEach(function (type) { elements.forEach(function (element) { element.value[type] = element.value[type].replace(pattern, ''); }); }); } ltrim(elements[0]); } function ltrim(element) { var pattern = /^\r?\n/; if (pattern.test(element.value.raw)) { element.value.raw = element.value.raw.replace(pattern, ''); element.value.cooked = element.value.cooked.replace(pattern, ''); } return element; } function rtrim(element) { var match = void 0; if (match = element.value.raw.match(/\r?\n([\t ]*)$/)) { var pattern = new RegExp('\r?\n[\t ]{' + match[1].length + '}$'); element.value.raw = element.value.raw.replace(pattern, ''); element.value.cooked = element.value.cooked.replace(pattern, ''); } return element; }