ocrmnav
Version:
DevStack - The Complete Developer Toolkit - Virtual file system, workflow automation, and more than 65+ other development tools / features in one seamless extension. Cutting down dev times never before seen.
710 lines (546 loc) • 24 kB
JavaScript
exports.id = 134;
exports.ids = [134];
exports.modules = {
/***/ 1537:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ uniteSets)
/* harmony export */ });
/**
* Unite two or more sets
*
* @param {Iterable<string>[]} args
* @see {@link https://github.com/microsoft/TypeScript/issues/57228|GitHub}
*/
function uniteSets(...args) {
return new Set([...args].reduce((result, set) => [...result, ...set], []));
}
/***/ }),
/***/ 1665:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ getStrippedSelectorSource)
/* harmony export */ });
/* harmony import */ var postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1666);
const { isComment } = postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__;
/**
* Get the source of a selector, excluding surrounding whitespace and comments.
*
* @param {import('postcss-selector-parser').Selector} node
*
* @returns {{selector: string, index: number, endIndex: number}}
*/
function getStrippedSelectorSource(node) {
const firstIndex = node.nodes.findIndex((x) => !isComment(x));
const lastIndex = node.nodes.findLastIndex((x) => !isComment(x));
const first = node.nodes[firstIndex];
let last = node.nodes[lastIndex];
if (!first || !last) {
const selector = node.toString().trim();
const index = node.sourceIndex ?? 0;
const endIndex = index + selector.length;
return {
selector,
index,
endIndex,
};
}
last = last.rawSpaceAfter.length ? last.clone() : last;
last.rawSpaceAfter = '';
let selector = node.nodes.slice(firstIndex, lastIndex).map(String).join('');
selector += last.toString();
selector = selector.trim();
const index = first.sourceIndex ?? 0;
const endIndex = index + selector.length;
return {
selector,
index,
endIndex,
};
}
/***/ }),
/***/ 1698:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ parseSelector)
/* harmony export */ });
/* harmony import */ var postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1666);
/**
* @param {string} selector
* @param {import('stylelint').PostcssResult} result
* @param {import('postcss').Node} node
* @param {(root: import('postcss-selector-parser').Root) => void} [callback] - Deprecated. It will be removed in the future.
* @returns {import('postcss-selector-parser').Root | undefined}
*/
function parseSelector(selector, result, node, callback) {
if (!selector) return undefined;
try {
// TODO: Remove `callback` in the future. See #7647.
if (callback) {
// @ts-expect-error -- TS2322: Type 'string' is not assignable to type 'Root'.
return postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__(callback).processSync(selector);
}
return postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__().astSync(selector);
} catch (err) {
result.warn(`Cannot parse selector (${err})`, { node, stylelintType: 'parseError' });
return undefined;
}
}
/***/ }),
/***/ 1727:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _csstools_selector_specificity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1728);
/* harmony import */ var _utils_typeGuards_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(886);
/* harmony import */ var _utils_findAtRuleContext_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1729);
/* harmony import */ var _utils_flattenNestedSelectorsForRule_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1730);
/* harmony import */ var _utils_getStrippedSelectorSource_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1665);
/* harmony import */ var _utils_isStandardSyntaxRule_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1568);
/* harmony import */ var _utils_nodeContextLookup_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1732);
/* harmony import */ var _utils_normalizeSelector_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1733);
/* harmony import */ var _utils_optionsMatches_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(869);
/* harmony import */ var _reference_selectors_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1734);
/* harmony import */ var _utils_report_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(945);
/* harmony import */ var _utils_ruleMessages_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(950);
/* harmony import */ var _utils_validateOptions_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(873);
const ruleName = 'no-descending-specificity';
const messages = (0,_utils_ruleMessages_mjs__WEBPACK_IMPORTED_MODULE_11__["default"])(ruleName, {
expected: (b, a, line) => {
return `Expected selector "${b}" to come before selector "${a}", at line ${line}`;
},
});
const meta = {
url: 'https://stylelint.io/user-guide/rules/no-descending-specificity',
};
/** @typedef {{ selector: string, specificity: import('@csstools/selector-specificity').Specificity, line: number }} Entry */
/** @type {import('stylelint').CoreRules[ruleName]} */
const rule = (primary, secondaryOptions) => {
return (root, result) => {
const validOptions = (0,_utils_validateOptions_mjs__WEBPACK_IMPORTED_MODULE_12__["default"])(
result,
ruleName,
{
actual: primary,
},
{
optional: true,
actual: secondaryOptions,
possible: {
ignore: ['selectors-within-list'],
},
},
);
if (!validOptions) {
return;
}
const ignoreSelectorsWithinList = (0,_utils_optionsMatches_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])(
secondaryOptions,
'ignore',
'selectors-within-list',
);
const selectorContextLookup = (0,_utils_nodeContextLookup_mjs__WEBPACK_IMPORTED_MODULE_6__["default"])();
root.walkRules((ruleNode) => {
// Ignore nested property `foo: {};`
if (!(0,_utils_isStandardSyntaxRule_mjs__WEBPACK_IMPORTED_MODULE_5__["default"])(ruleNode)) {
return;
}
// Ignores selectors within list of selectors
if (ignoreSelectorsWithinList && ruleNode.selectors.length > 1) {
return;
}
// Ignore rules that do not directly contain declarations
if (!hasDeclaration(ruleNode)) {
return;
}
/** @type {Map<string, Entry[]>} */
const comparisonContext = selectorContextLookup.getContext(
ruleNode,
(0,_utils_findAtRuleContext_mjs__WEBPACK_IMPORTED_MODULE_2__["default"])(ruleNode),
);
// Resolve any nested selectors before checking
(0,_utils_flattenNestedSelectorsForRule_mjs__WEBPACK_IMPORTED_MODULE_3__["default"])(ruleNode, result).forEach(({ selector, resolvedSelectors }) => {
resolvedSelectors.each((resolvedSelector) => {
checkSelector(resolvedSelector, selector, ruleNode, comparisonContext);
});
});
});
/**
* @param {import('postcss-selector-parser').Selector} resolvedSelectorNode
* @param {import('postcss-selector-parser').Selector} selectorNode
* @param {import('postcss').Rule} ruleNode
* @param {Map<string, Entry[]>} comparisonContext
*/
function checkSelector(resolvedSelectorNode, selectorNode, ruleNode, comparisonContext) {
const referenceSelector = lastCompoundSelectorWithoutPseudoClasses(resolvedSelectorNode);
if (!referenceSelector) return;
const specificity = (0,_csstools_selector_specificity__WEBPACK_IMPORTED_MODULE_0__.selectorSpecificity)(resolvedSelectorNode);
const entry = {
selector: resolvedSelectorNode.toString().trim(),
specificity,
line: ruleNode.source?.start?.line ?? 1,
};
const priorComparableSelectors = comparisonContext.get(referenceSelector);
if (!priorComparableSelectors) {
comparisonContext.set(referenceSelector, [entry]);
return;
}
for (const priorEntry of priorComparableSelectors) {
if ((0,_csstools_selector_specificity__WEBPACK_IMPORTED_MODULE_0__.compare)(specificity, priorEntry.specificity) < 0) {
const {
index,
endIndex,
selector: selectorStr,
} = (0,_utils_getStrippedSelectorSource_mjs__WEBPACK_IMPORTED_MODULE_4__["default"])(selectorNode);
(0,_utils_report_mjs__WEBPACK_IMPORTED_MODULE_10__["default"])({
ruleName,
result,
node: ruleNode,
message: messages.expected,
messageArgs: [selectorStr, priorEntry.selector, priorEntry.line],
index,
endIndex,
});
break;
}
}
priorComparableSelectors.push(entry);
}
};
};
/**
* @param {import('postcss-selector-parser').Selector} selectorNode
* @returns {string | undefined}
*/
function lastCompoundSelectorWithoutPseudoClasses(selectorNode) {
if (selectorNode.nodes.length === 0) return undefined;
selectorNode = (0,_utils_normalizeSelector_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])(selectorNode.clone());
const nodesByCombinator = selectorNode.split((node) => node.type === 'combinator');
const nodesAfterLastCombinator = nodesByCombinator[nodesByCombinator.length - 1];
if (!nodesAfterLastCombinator) return undefined;
const nodesWithoutPseudoClasses = nodesAfterLastCombinator.filter((node) => {
return (
node.type !== 'pseudo' ||
node.value.startsWith('::') ||
_reference_selectors_mjs__WEBPACK_IMPORTED_MODULE_9__.pseudoElements.has(node.value.replaceAll(':', ''))
);
});
if (nodesWithoutPseudoClasses.length === 0) return undefined;
return nodesWithoutPseudoClasses.join('');
}
/**
* Specificity only has an effect on declarations.
* We only want to check rules that contain declarations either directly or in nested at-rules.
*
* @param {import('postcss').Container} node
* @returns {boolean}
*/
function hasDeclaration(node) {
if (!node.nodes) return false;
return node.some((child) => {
return (0,_utils_typeGuards_mjs__WEBPACK_IMPORTED_MODULE_1__.isDeclaration)(child) || ((0,_utils_typeGuards_mjs__WEBPACK_IMPORTED_MODULE_1__.isAtRule)(child) && hasDeclaration(child));
});
}
rule.ruleName = ruleName;
rule.messages = messages;
rule.meta = meta;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (rule);
/***/ }),
/***/ 1728:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ compare: () => (/* binding */ compare),
/* harmony export */ selectorSpecificity: () => (/* binding */ selectorSpecificity),
/* harmony export */ specificityOfMostSpecificListItem: () => (/* binding */ specificityOfMostSpecificListItem)
/* harmony export */ });
/* harmony import */ var postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1666);
function compare(e,t){return e.a===t.a?e.b===t.b?e.c-t.c:e.b-t.b:e.a-t.a}function selectorSpecificity(t,s){const i=s?.customSpecificity?.(t);if(i)return i;if(!t)return{a:0,b:0,c:0};let c=0,n=0,o=0;if("universal"==t.type)return{a:0,b:0,c:0};if("id"===t.type)c+=1;else if("tag"===t.type)o+=1;else if("class"===t.type)n+=1;else if("attribute"===t.type)n+=1;else if(isPseudoElement(t))switch(t.value.toLowerCase()){case"::slotted":if(o+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return t.nodes&&1===t.nodes.length&&"selector"===t.nodes[0].type&&selectorNodeContainsNothingOrOnlyUniversal(t.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:o+=1}else if(postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isPseudoClass(t))switch(t.value.toLowerCase()){case":-webkit-any":case":any":default:n+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(n+=1,t.nodes&&t.nodes.length>0){const i=t.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===e.value.toLowerCase()));if(i>-1){const a=postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.selector({nodes:[],value:""});t.nodes[0].nodes.slice(i+1).forEach((e=>{a.append(e.clone())}));const r=[a];t.nodes.length>1&&r.push(...t.nodes.slice(1));const l=specificityOfMostSpecificListItem(r,s);c+=l.a,n+=l.b,o+=l.c}}break;case":local":case":global":t.nodes&&t.nodes.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));break;case":host":case":host-context":if(n+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":active-view-transition":case":active-view-transition-type":return{a:0,b:1,c:0}}else postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isContainer(t)&&t.nodes?.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));return{a:c,b:n,c:o}}function specificityOfMostSpecificListItem(e,t){let s={a:0,b:0,c:0};return e.forEach((e=>{const i=selectorSpecificity(e,t);compare(i,s)<0||(s=i)})),s}function isPseudoElement(t){return postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isPseudoElement(t)}function selectorNodeContainsNothingOrOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const t=e.nodes.filter((e=>"comment"!==e.type));return 0===t.length||1===t.length&&"universal"===t[0].type}
/***/ }),
/***/ 1729:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ findAtRuleContext)
/* harmony export */ });
/* harmony import */ var _typeGuards_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(886);
/**
* Find the at-rule in which a rule is nested.
*
* Returns `null` if the rule is not nested within an at-rule.
*
* @param {import('postcss').Rule} rule
* @returns {null | import('postcss').AtRule}
*/
function findAtRuleContext(rule) {
const parent = rule.parent;
if (!parent) {
return null;
}
if ((0,_typeGuards_mjs__WEBPACK_IMPORTED_MODULE_0__.isAtRule)(parent)) {
return parent;
}
if ((0,_typeGuards_mjs__WEBPACK_IMPORTED_MODULE_0__.isRule)(parent)) {
return findAtRuleContext(parent);
}
return null;
}
/***/ }),
/***/ 1730:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ flattenNestedSelectorsForRule)
/* harmony export */ });
/* harmony import */ var postcss_resolve_nested_selector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1731);
/* harmony import */ var postcss_selector_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1666);
/* harmony import */ var _getRuleSelector_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1521);
/* harmony import */ var _isStandardSyntaxSelector_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1569);
/* harmony import */ var _parseSelector_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1698);
/** @import { Selector, Root } from 'postcss-selector-parser' */
/** @import { Rule } from 'postcss' */
/** @import { PostcssResult } from 'stylelint' */
/**
* Flatten the selectors of the current rule against it's parent rules and at-rules.
*
* The selectors for the current rule are assumed to be standard CSS selectors.
*
* @typedef {{selector: Selector, resolvedSelectors: Root, nested: boolean}} FlattenedSelector
*
* @param {Rule} rule
* @param {PostcssResult} result
* @returns {Array<FlattenedSelector>}
*/
function flattenNestedSelectorsForRule(rule, result) {
const ownAST = (0,_parseSelector_mjs__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_getRuleSelector_mjs__WEBPACK_IMPORTED_MODULE_2__["default"])(rule), result, rule);
if (!ownAST) return [];
/** @type {Array<FlattenedSelector>} */
const flattenedSelectors = [];
for (const selectorAST of ownAST.nodes) {
const selector = selectorAST.toString();
const resolvedSelectors = postcss_resolve_nested_selector__WEBPACK_IMPORTED_MODULE_0__(selector, rule);
if (resolvedSelectors.length === 1 && resolvedSelectors[0] === selector) {
flattenedSelectors.push({
selector: selectorAST,
resolvedSelectors: postcss_selector_parser__WEBPACK_IMPORTED_MODULE_1__.root({
value: '',
nodes: [selectorAST],
}),
nested: false,
});
continue;
}
for (const resolvedSelector of resolvedSelectors) {
if (!(0,_isStandardSyntaxSelector_mjs__WEBPACK_IMPORTED_MODULE_3__["default"])(resolvedSelector)) return [];
const resolvedRoot = (0,_parseSelector_mjs__WEBPACK_IMPORTED_MODULE_4__["default"])(resolvedSelector, result, rule);
if (!resolvedRoot) {
continue;
}
flattenedSelectors.push({
selector: selectorAST,
resolvedSelectors: resolvedRoot,
nested: true,
});
}
}
return flattenedSelectors;
}
/***/ }),
/***/ 1731:
/***/ ((module) => {
module.exports = function resolveNestedSelector(selector, node) {
var parent = node.parent;
var parentIsNestAtRule = parent.type === 'atrule' && parent.name === 'nest';
if (parent.type === 'root') return [selector];
if (parent.type !== 'rule' && !parentIsNestAtRule) return resolveNestedSelector(selector, parent);
var parentSelectors = (parentIsNestAtRule)
? split(parent.params, ',', false).map((x) => x.trim())
: parent.selectors;
var resolvedSelectors = parentSelectors.reduce(function(result, parentSelector) {
if (selector.indexOf('&') !== -1) {
var newlyResolvedSelectors = resolveNestedSelector(parentSelector, parent).map(function(resolvedParentSelector) {
return split(selector, '&', true).join(resolvedParentSelector);
});
return result.concat(newlyResolvedSelectors);
}
var combinedSelector = [ parentSelector, selector ].join(' ');
return result.concat(resolveNestedSelector(combinedSelector, parent));
}, []);
return resolvedSelectors;
}
var blockPairs = {
'(': ')',
'[': ']',
'{': '}'
};
function split(string, separator, splitFunctions) {
var array = [];
var current = '';
var split = false;
var blockClose = [];
var inQuote = false;
var prevQuote = '';
var escape = false;
for (var letter of string) {
if (escape) {
escape = false;
} else if (letter === '\\') {
escape = true;
} else if (inQuote) {
if (letter === prevQuote) {
inQuote = false;
}
} else if (letter === '"' || letter === "'") {
inQuote = true;
prevQuote = letter;
} else if (letter === '(' || letter === '[' || letter === '{') {
blockClose.push(blockPairs[letter]);
} else if (letter === blockClose[blockClose.length - 1]) {
blockClose.pop();
} else if (blockClose.length === 0 || (splitFunctions && blockClose.every((x) => x === ')'))) {
if (letter === separator) split = true;
}
if (split) {
array.push(current);
current = '';
split = false;
} else {
current += letter;
}
}
array.push(current);
return array;
}
/***/ }),
/***/ 1732:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ nodeContextLookup)
/* harmony export */ });
/**
* Create a collection of Maps that serve to contextualize a given node.
* This is useful to ensure that you only compare nodes that share a certain
* context.
*
* All nodes are initially contextualized by their input source.
* From there, you can contextualize them however you want.
*
* For a usage example, see `selector-no-descending-specificity`.
*/
function nodeContextLookup() {
const contextMap = new Map();
return {
/**
* @param {import('postcss').Node} node
* @param {any[]} subContexts
* @returns {Map<any, any>}
*/
getContext(node, ...subContexts) {
if (!node.source) throw new Error('The node source must be present');
const nodeSource = node.source.input.from;
const baseContext = creativeGetMap(contextMap, nodeSource);
return subContexts.reduce((result, context) => creativeGetMap(result, context), baseContext);
},
};
}
/**
* @param {Map<any, any>} someMap
* @param {any} someThing
*/
function creativeGetMap(someMap, someThing) {
if (!someMap.has(someThing)) {
someMap.set(someThing, new Map());
}
return someMap.get(someThing);
}
/***/ }),
/***/ 1733:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ normalizeSelector)
/* harmony export */ });
/* harmony import */ var postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1666);
/** @import { Container, Node, Root, Selector } from 'postcss-selector-parser' */
/**
* Normalize a selector so that it can be more easily compared to other selectors.
*
* @template {Root | Selector} T
* @param {T} node
* @returns {T}
*/
function normalizeSelector(node) {
normalizeSelectorNodeWhitespaceAndComments(node);
node.walk(normalizeSelectorNodeWhitespaceAndComments);
normalizeSelectorNodesOrder(node);
return node;
}
/**
* @param {Node} node
*/
function normalizeSelectorNodeWhitespaceAndComments(node) {
if (postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isComment(node)) {
node.remove();
return;
}
node.rawSpaceBefore = '';
node.rawSpaceAfter = '';
node.spaces.before = '';
node.spaces.after = '';
if (postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isAttribute(node)) {
delete node.spaces.insensitive;
delete node.spaces.operator;
delete node.spaces.attribute;
delete node.spaces.value;
delete node.raws.spaces;
}
}
/**
* @param {Node} node
*/
function normalizeSelectorNodesOrder(node) {
if (!postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isContainer(node)) return;
// Need to sort inside out, not outside in.
// As the parents needs to sorted with their children already in the right order.
node.each(normalizeSelectorNodesOrder);
if (postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isRoot(node) || postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isPseudoClass(node) || postcss_selector_parser__WEBPACK_IMPORTED_MODULE_0__.isPseudoElement(node)) {
const nodes = node.nodes.map((childNode) => {
// Make sure to only stringify the node once.
return { node: childNode, string: childNode.toString() };
});
nodes.sort((a, b) => a.string.localeCompare(b.string));
const uniqueNodes = new Set();
const nodesIndices = new Map();
nodes.forEach((x, i) => {
if (uniqueNodes.has(x.string)) return;
uniqueNodes.add(x.string);
nodesIndices.set(x.node, i);
});
node.nodes = node.nodes
.filter((childNode) => {
return nodesIndices.has(childNode);
})
.sort((a, b) => {
return nodesIndices.get(a) - nodesIndices.get(b);
});
}
}
/***/ })
};
;
//# sourceMappingURL=134.extension.js.map