123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.minifyCookedValues = exports.minifyRawValues = exports.minifyCooked = exports.minifyRaw = exports.compressSymbols = exports.stripLineComment = void 0;
- var _difference = _interopRequireDefault(require("lodash/difference"));
- var _placeholderUtils = require("../css/placeholderUtils");
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var injectUniquePlaceholders = function injectUniquePlaceholders(strArr) {
- var i = 0;
- return strArr.reduce(function (str, val, index, arr) {
- return str + val + (index < arr.length - 1 ? (0, _placeholderUtils.makePlaceholder)(i++) : '');
- }, '');
- };
- var makeMultilineCommentRegex = function makeMultilineCommentRegex(newlinePattern) {
- return new RegExp('\\/\\*[^!](.|' + newlinePattern + ')*?\\*\\/', 'g');
- };
- var lineCommentStart = /\/\//g;
- var symbolRegex = /(\s*[;:{},]\s*)/g; // Counts occurences of substr inside str
- var countOccurences = function countOccurences(str, substr) {
- return str.split(substr).length - 1;
- }; // Joins substrings until predicate returns true
- var reduceSubstr = function reduceSubstr(substrs, join, predicate) {
- var length = substrs.length;
- var res = substrs[0];
- if (length === 1) {
- return res;
- }
- for (var i = 1; i < length; i++) {
- if (predicate(res)) {
- break;
- }
- res += join + substrs[i];
- }
- return res;
- }; // Joins at comment starts when it's inside a string or parantheses
- // effectively removing line comments
- var stripLineComment = function stripLineComment(line) {
- return reduceSubstr(line.split(lineCommentStart), '//', function (str) {
- return !str.endsWith(':') && // NOTE: This is another guard against urls, if they're not inside strings or parantheses.
- countOccurences(str, "'") % 2 === 0 && countOccurences(str, '"') % 2 === 0 && countOccurences(str, '(') === countOccurences(str, ')');
- });
- };
- exports.stripLineComment = stripLineComment;
- var compressSymbols = function compressSymbols(code) {
- return code.split(symbolRegex).reduce(function (str, fragment, index) {
- // Even-indices are non-symbol fragments
- if (index % 2 === 0) {
- return str + fragment;
- } // Only manipulate symbols outside of strings
- if (countOccurences(str, "'") % 2 === 0 && countOccurences(str, '"') % 2 === 0) {
- return str + fragment.trim();
- }
- return str + fragment;
- }, '');
- }; // Detects lines that are exclusively line comments
- exports.compressSymbols = compressSymbols;
- var isLineComment = function isLineComment(line) {
- return line.trim().startsWith('//');
- }; // Creates a minifier with a certain linebreak pattern
- var minify = function minify(linebreakPattern) {
- var linebreakRegex = new RegExp(linebreakPattern + '\\s*', 'g');
- var multilineCommentRegex = makeMultilineCommentRegex(linebreakPattern);
- return function (code) {
- var newCode = code.replace(multilineCommentRegex, '\n') // Remove multiline comments
- .split(linebreakRegex) // Split at newlines
- .filter(function (line) {
- return line.length > 0 && !isLineComment(line);
- }) // Removes lines containing only line comments
- .map(stripLineComment) // Remove line comments inside text
- .join(' '); // Rejoin all lines
- var eliminatedExpressionIndices = (0, _difference.default)(code.match(_placeholderUtils.placeholderRegex), newCode.match(_placeholderUtils.placeholderRegex)).map(function (x) {
- return parseInt(x.match(/\d+/)[0], 10);
- });
- return [compressSymbols(newCode), eliminatedExpressionIndices];
- };
- };
- var minifyRaw = minify('(?:\\\\r|\\\\n|\\r|\\n)');
- exports.minifyRaw = minifyRaw;
- var minifyCooked = minify('[\\r\\n]');
- exports.minifyCooked = minifyCooked;
- var minifyRawValues = function minifyRawValues(rawValues) {
- return (0, _placeholderUtils.splitByPlaceholders)(minifyRaw(injectUniquePlaceholders(rawValues)), false);
- };
- exports.minifyRawValues = minifyRawValues;
- var minifyCookedValues = function minifyCookedValues(cookedValues) {
- return (0, _placeholderUtils.splitByPlaceholders)(minifyCooked(injectUniquePlaceholders(cookedValues)), false);
- };
- exports.minifyCookedValues = minifyCookedValues;
|