custom-app
Version:
ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������
121 lines (89 loc) • 4.24 kB
JavaScript
;
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;