summaryrefslogtreecommitdiff
path: root/node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:10:59 +0800
committerlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:41:44 +0800
commitfc87c009806dcc98867f6b58efe29b042aa01dee (patch)
tree8f59b3f4a5b66e9dfef2d40c8d318e258a521228 /node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
parent3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff)
node: updatemain
Diffstat (limited to 'node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js')
-rw-r--r--node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js273
1 files changed, 0 insertions, 273 deletions
diff --git a/node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js b/node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
deleted file mode 100644
index dff393a9..00000000
--- a/node_modules/clean-css/lib/optimizer/level-2/is-mergeable.js
+++ /dev/null
@@ -1,273 +0,0 @@
-var Marker = require('../../tokenizer/marker');
-var split = require('../../utils/split');
-
-var DEEP_SELECTOR_PATTERN = /\/deep\//;
-var DOUBLE_COLON_PATTERN = /^::/;
-var VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/;
-
-var NOT_PSEUDO = ':not';
-var PSEUDO_CLASSES_WITH_ARGUMENTS = [
- ':dir',
- ':lang',
- ':not',
- ':nth-child',
- ':nth-last-child',
- ':nth-last-of-type',
- ':nth-of-type'
-];
-var RELATION_PATTERN = /[>+~]/;
-var UNMIXABLE_PSEUDO_CLASSES = [
- ':after',
- ':before',
- ':first-letter',
- ':first-line',
- ':lang'
-];
-var UNMIXABLE_PSEUDO_ELEMENTS = [
- '::after',
- '::before',
- '::first-letter',
- '::first-line'
-];
-
-var Level = {
- DOUBLE_QUOTE: 'double-quote',
- SINGLE_QUOTE: 'single-quote',
- ROOT: 'root'
-};
-
-function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
- var singleSelectors = split(selector, Marker.COMMA);
- var singleSelector;
- var i, l;
-
- for (i = 0, l = singleSelectors.length; i < l; i++) {
- singleSelector = singleSelectors[i];
-
- if (singleSelector.length === 0
- || isDeepSelector(singleSelector)
- || isVendorPrefixed(singleSelector)
- || (singleSelector.indexOf(Marker.COLON) > -1
- && !areMergeable(
- singleSelector,
- extractPseudoFrom(singleSelector),
- mergeablePseudoClasses,
- mergeablePseudoElements,
- multiplePseudoMerging
- ))) {
- return false;
- }
- }
-
- return true;
-}
-
-function isDeepSelector(selector) {
- return DEEP_SELECTOR_PATTERN.test(selector);
-}
-
-function isVendorPrefixed(selector) {
- return VENDOR_PREFIXED_PATTERN.test(selector);
-}
-
-function extractPseudoFrom(selector) {
- var list = [];
- var character;
- var buffer = [];
- var level = Level.ROOT;
- var roundBracketLevel = 0;
- var isQuoted;
- var isEscaped;
- var isPseudo = false;
- var isRelation;
- var wasColon = false;
- var index;
- var len;
-
- for (index = 0, len = selector.length; index < len; index++) {
- character = selector[index];
-
- isRelation = !isEscaped && RELATION_PATTERN.test(character);
- isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE;
-
- if (isEscaped) {
- buffer.push(character);
- } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) {
- buffer.push(character);
- level = Level.DOUBLE_QUOTE;
- } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
- buffer.push(character);
- level = Level.ROOT;
- } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) {
- buffer.push(character);
- level = Level.SINGLE_QUOTE;
- } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
- buffer.push(character);
- level = Level.ROOT;
- } else if (isQuoted) {
- buffer.push(character);
- } else if (character == Marker.OPEN_ROUND_BRACKET) {
- buffer.push(character);
- roundBracketLevel++;
- } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) {
- buffer.push(character);
- list.push(buffer.join(''));
- roundBracketLevel--;
- buffer = [];
- isPseudo = false;
- } else if (character == Marker.CLOSE_ROUND_BRACKET) {
- buffer.push(character);
- roundBracketLevel--;
- } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) {
- list.push(buffer.join(''));
- buffer = [];
- buffer.push(character);
- } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) {
- buffer = [];
- buffer.push(character);
- isPseudo = true;
- } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) {
- list.push(buffer.join(''));
- buffer = [];
- isPseudo = false;
- } else if (isRelation && roundBracketLevel === 0 && isPseudo) {
- list.push(buffer.join(''));
- buffer = [];
- isPseudo = false;
- } else {
- buffer.push(character);
- }
-
- isEscaped = character == Marker.BACK_SLASH;
- wasColon = character == Marker.COLON;
- }
-
- if (buffer.length > 0 && isPseudo) {
- list.push(buffer.join(''));
- }
-
- return list;
-}
-
-function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
- return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements)
- && needArguments(matches)
- && (matches.length < 2 || !someIncorrectlyChained(selector, matches))
- && (matches.length < 2 || multiplePseudoMerging && allMixable(matches));
-}
-
-function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) {
- var match;
- var name;
- var i, l;
-
- for (i = 0, l = matches.length; i < l; i++) {
- match = matches[i];
- name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
- ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))
- : match;
-
- if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) {
- return false;
- }
- }
-
- return true;
-}
-
-function needArguments(matches) {
- var match;
- var name;
- var bracketOpensAt;
- var hasArguments;
- var i, l;
-
- for (i = 0, l = matches.length; i < l; i++) {
- match = matches[i];
-
- bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET);
- hasArguments = bracketOpensAt > -1;
- name = hasArguments
- ? match.substring(0, bracketOpensAt)
- : match;
-
- if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) {
- return false;
- }
-
- if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) {
- return false;
- }
- }
-
- return true;
-}
-
-function someIncorrectlyChained(selector, matches) {
- var positionInSelector = 0;
- var match;
- var matchAt;
- var nextMatch;
- var nextMatchAt;
- var name;
- var nextName;
- var areChained;
- var i, l;
-
- for (i = 0, l = matches.length; i < l; i++) {
- match = matches[i];
- nextMatch = matches[i + 1];
-
- if (!nextMatch) {
- break;
- }
-
- matchAt = selector.indexOf(match, positionInSelector);
- nextMatchAt = selector.indexOf(match, matchAt + 1);
- positionInSelector = nextMatchAt;
- areChained = matchAt + match.length == nextMatchAt;
-
- if (areChained) {
- name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
- ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))
- : match;
- nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
- ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET))
- : nextMatch;
-
- if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) {
- return true;
- }
- }
- }
-
- return false;
-}
-
-function allMixable(matches) {
- var unmixableMatches = 0;
- var match;
- var i, l;
-
- for (i = 0, l = matches.length; i < l; i++) {
- match = matches[i];
-
- if (isPseudoElement(match)) {
- unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0;
- } else {
- unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0;
- }
-
- if (unmixableMatches > 1) {
- return false;
- }
- }
-
- return true;
-}
-
-function isPseudoElement(pseudo) {
- return DOUBLE_COLON_PATTERN.test(pseudo);
-}
-
-module.exports = isMergeable;