UNPKG

babel-plugin-minify-template-strings

Version:

Remove all leading/trailing white-space & newline characters from multiline template strings

84 lines (66 loc) 2.18 kB
'use strict'; function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } module.exports = function babelPluginDedent(babel) { var t = babel.types; return { visitor: { CallExpression: function CallExpression(path) { var node = path.node; if (t.isIdentifier(node.callee, { name: 'html' })) { 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: 'html' })) { transform(node.quasi.quasis); return path.replaceWith(node.quasi); } } } }; }; function transform(quasis) { var elements = quasis.filter(function (element) { return element.type === 'TemplateElement'; }); var matches = []; rtrim(elements[elements.length - 1]); elements.forEach(function (element) { var match = void 0; if (match = element.value.raw.match(/\n[\t ]*/g)) { matches.push.apply(matches, _toConsumableArray(match)); } }); if (matches.length > 0) { var pattern = new RegExp('[\t ]*[\r?\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 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; }