summaryrefslogtreecommitdiff
path: root/node_modules/postcss-merge-rules
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/postcss-merge-rules
parent3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff)
node: updatemain
Diffstat (limited to 'node_modules/postcss-merge-rules')
-rw-r--r--node_modules/postcss-merge-rules/LICENSE-MIT22
-rw-r--r--node_modules/postcss-merge-rules/README.md105
-rw-r--r--node_modules/postcss-merge-rules/package.json47
-rw-r--r--node_modules/postcss-merge-rules/src/index.js448
-rw-r--r--node_modules/postcss-merge-rules/src/lib/ensureCompatibility.js231
-rw-r--r--node_modules/postcss-merge-rules/types/index.d.ts23
-rw-r--r--node_modules/postcss-merge-rules/types/index.d.ts.map1
-rw-r--r--node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts72
-rw-r--r--node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts.map1
9 files changed, 0 insertions, 950 deletions
diff --git a/node_modules/postcss-merge-rules/LICENSE-MIT b/node_modules/postcss-merge-rules/LICENSE-MIT
deleted file mode 100644
index fd0e863a..00000000
--- a/node_modules/postcss-merge-rules/LICENSE-MIT
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) Ben Briggs <beneb.info@gmail.com> (http://beneb.info)
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/postcss-merge-rules/README.md b/node_modules/postcss-merge-rules/README.md
deleted file mode 100644
index ab93f9a7..00000000
--- a/node_modules/postcss-merge-rules/README.md
+++ /dev/null
@@ -1,105 +0,0 @@
-# [postcss][postcss]-merge-rules
-
-> Merge CSS rules with PostCSS.
-
-## Install
-
-With [npm](https://npmjs.org/package/postcss-merge-rules) do:
-
-```
-npm install postcss-merge-rules --save
-```
-
-## Examples
-
-This module will attempt to merge *adjacent* CSS rules:
-
-### By declarations
-
-#### Input
-
-```css
-a {
- color: blue;
- font-weight: bold
-}
-
-p {
- color: blue;
- font-weight: bold
-}
-```
-
-#### Output
-
-```css
-a,p {
- color: blue;
- font-weight: bold
-}
-```
-
-### By selectors
-
-#### Input
-
-```css
-a {
- color: blue
-}
-
-a {
- font-weight: bold
-}
-```
-
-#### Output
-
-```css
-a {
- color: blue;
- font-weight: bold
-}
-```
-
-### By partial declarations
-
-#### Input
-
-```css
-a {
- font-weight: bold
-}
-
-p {
- color: blue;
- font-weight: bold
-}
-```
-
-#### Output
-
-```css
-a,p {
- font-weight: bold
-}
-
-p {
- color: blue
-}
-```
-
-## Usage
-
-See the [PostCSS documentation](https://github.com/postcss/postcss#usage) for
-examples for your environment.
-
-## Contributors
-
-See [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md).
-
-## License
-
-MIT © [Ben Briggs](http://beneb.info)
-
-[postcss]: https://github.com/postcss/postcss
diff --git a/node_modules/postcss-merge-rules/package.json b/node_modules/postcss-merge-rules/package.json
deleted file mode 100644
index 904f06c1..00000000
--- a/node_modules/postcss-merge-rules/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "postcss-merge-rules",
- "version": "6.1.1",
- "description": "Merge CSS rules with PostCSS.",
- "types": "types/index.d.ts",
- "main": "src/index.js",
- "files": [
- "LICENSE-MIT",
- "src",
- "types"
- ],
- "keywords": [
- "css",
- "optimise",
- "postcss",
- "postcss-plugin"
- ],
- "license": "MIT",
- "homepage": "https://github.com/cssnano/cssnano",
- "author": {
- "name": "Ben Briggs",
- "email": "beneb.info@gmail.com",
- "url": "http://beneb.info"
- },
- "repository": "cssnano/cssnano",
- "dependencies": {
- "browserslist": "^4.23.0",
- "caniuse-api": "^3.0.0",
- "postcss-selector-parser": "^6.0.16",
- "cssnano-utils": "^4.0.2"
- },
- "bugs": {
- "url": "https://github.com/cssnano/cssnano/issues"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "devDependencies": {
- "@types/caniuse-api": "^3.0.6",
- "postcss": "^8.4.37",
- "postcss-simple-vars": "^7.0.1",
- "postcss-discard-comments": "^6.0.2"
- },
- "peerDependencies": {
- "postcss": "^8.4.31"
- }
-} \ No newline at end of file
diff --git a/node_modules/postcss-merge-rules/src/index.js b/node_modules/postcss-merge-rules/src/index.js
deleted file mode 100644
index 686f880d..00000000
--- a/node_modules/postcss-merge-rules/src/index.js
+++ /dev/null
@@ -1,448 +0,0 @@
-'use strict';
-const { dirname } = require('path');
-const browserslist = require('browserslist');
-const { sameParent } = require('cssnano-utils');
-const {
- ensureCompatibility,
- sameVendor,
- noVendor,
-} = require('./lib/ensureCompatibility');
-
-/**
- * @param {import('postcss').Declaration} a
- * @param {import('postcss').Declaration} b
- * @return {boolean}
- */
-function declarationIsEqual(a, b) {
- return (
- a.important === b.important && a.prop === b.prop && a.value === b.value
- );
-}
-
-/**
- * @param {import('postcss').Declaration[]} array
- * @param {import('postcss').Declaration} decl
- * @return {number}
- */
-function indexOfDeclaration(array, decl) {
- return array.findIndex((d) => declarationIsEqual(d, decl));
-}
-
-/**
- * Returns filtered array of matched or unmatched declarations
- * @param {import('postcss').Declaration[]} a
- * @param {import('postcss').Declaration[]} b
- * @param {boolean} [not=false]
- * @return {import('postcss').Declaration[]}
- */
-function intersect(a, b, not) {
- return a.filter((c) => {
- const index = indexOfDeclaration(b, c) !== -1;
- return not ? !index : index;
- });
-}
-
-/**
- * @param {import('postcss').Declaration[]} a
- * @param {import('postcss').Declaration[]} b
- * @return {boolean}
- */
-function sameDeclarationsAndOrder(a, b) {
- if (a.length !== b.length) {
- return false;
- }
- return a.every((d, index) => declarationIsEqual(d, b[index]));
-}
-
-/**
- * @param {import('postcss').Rule} ruleA
- * @param {import('postcss').Rule} ruleB
- * @param {string[]=} browsers
- * @param {Map<string, boolean>=} compatibilityCache
- * @return {boolean}
- */
-function canMerge(ruleA, ruleB, browsers, compatibilityCache) {
- const a = ruleA.selectors;
- const b = ruleB.selectors;
-
- const selectors = a.concat(b);
-
- if (!ensureCompatibility(selectors, browsers, compatibilityCache)) {
- return false;
- }
-
- const parent = sameParent(
- /** @type {any} */ (ruleA),
- /** @type {any} */ (ruleB)
- );
- if (
- parent &&
- ruleA.parent &&
- ruleA.parent.type === 'atrule' &&
- /** @type {import('postcss').AtRule} */ (ruleA.parent).name.includes(
- 'keyframes'
- )
- ) {
- return false;
- }
- if (ruleA.some(isRuleOrAtRule) || ruleB.some(isRuleOrAtRule)) {
- return false;
- }
- return parent && (selectors.every(noVendor) || sameVendor(a, b));
-}
-
-/**
- * @param {import('postcss').ChildNode} node
- * @return {boolean}
- */
-function isRuleOrAtRule(node) {
- return node.type === 'rule' || node.type === 'atrule';
-}
-/**
- * @param {import('postcss').ChildNode} node
- * @return {node is import('postcss').Declaration}
- */
-function isDeclaration(node) {
- return node.type === 'decl';
-}
-/**
- * @param {import('postcss').Rule} rule
- * @return {import('postcss').Declaration[]}
- */
-function getDecls(rule) {
- return rule.nodes.filter(isDeclaration);
-}
-
-/** @type {(...rules: import('postcss').Rule[]) => string} */
-const joinSelectors = (...rules) => rules.map((s) => s.selector).join();
-
-/**
- * @param {...import('postcss').Rule} rules
- * @return {number}
- */
-function ruleLength(...rules) {
- return rules.map((r) => (r.nodes.length ? String(r) : '')).join('').length;
-}
-
-/**
- * @param {string} prop
- * @return {{prefix: string?, base:string?, rest:string[]}}
- */
-function splitProp(prop) {
- // Treat vendor prefixed properties as if they were unprefixed;
- // moving them when combined with non-prefixed properties can
- // cause issues. e.g. moving -webkit-background-clip when there
- // is a background shorthand definition.
-
- const parts = prop.split('-');
- if (prop[0] !== '-') {
- return {
- prefix: '',
- base: parts[0],
- rest: parts.slice(1),
- };
- }
- // Don't split css variables
- if (prop[1] === '-') {
- return {
- prefix: null,
- base: null,
- rest: [prop],
- };
- }
- // Found prefix
- return {
- prefix: parts[1],
- base: parts[2],
- rest: parts.slice(3),
- };
-}
-
-/**
- * @param {string} propA
- * @param {string} propB
- * @return {boolean}
- */
-function isConflictingProp(propA, propB) {
- if (propA === propB) {
- // Same specificity
- return true;
- }
- const a = splitProp(propA);
- const b = splitProp(propB);
- // Don't resort css variables
- if (!a.base && !b.base) {
- return true;
- }
-
- // Different base and none is `place`;
- if (a.base !== b.base && a.base !== 'place' && b.base !== 'place') {
- return false;
- }
-
- // Conflict if rest-count mismatches
- if (a.rest.length !== b.rest.length) {
- return true;
- }
-
- /* Do not merge conflicting border properties */
- if (a.base === 'border') {
- const allRestProps = new Set([...a.rest, ...b.rest]);
- if (
- allRestProps.has('image') ||
- allRestProps.has('width') ||
- allRestProps.has('color') ||
- allRestProps.has('style')
- ) {
- return true;
- }
- }
- // Conflict if rest parameters are equal (same but unprefixed)
- return a.rest.every((s, index) => b.rest[index] === s);
-}
-
-/**
- * @param {import('postcss').Rule} first
- * @param {import('postcss').Rule} second
- * @return {boolean} merged
- */
-function mergeParents(first, second) {
- // Null check for detached rules
- if (!first.parent || !second.parent) {
- return false;
- }
-
- // Check if parents share node
- if (first.parent === second.parent) {
- return false;
- }
-
- // sameParent() already called by canMerge()
-
- second.remove();
- first.parent.append(second);
- return true;
-}
-
-/**
- * @param {import('postcss').Rule} first
- * @param {import('postcss').Rule} second
- * @return {import('postcss').Rule} mergedRule
- */
-function partialMerge(first, second) {
- let intersection = intersect(getDecls(first), getDecls(second));
- if (intersection.length === 0) {
- return second;
- }
- let nextRule = second.next();
- if (!nextRule) {
- // Grab next cousin
- /** @type {any} */
- const parentSibling =
- /** @type {import('postcss').Container<import('postcss').ChildNode>} */ (
- second.parent
- ).next();
- nextRule = parentSibling && parentSibling.nodes && parentSibling.nodes[0];
- }
- if (nextRule && nextRule.type === 'rule' && canMerge(second, nextRule)) {
- let nextIntersection = intersect(getDecls(second), getDecls(nextRule));
- if (nextIntersection.length > intersection.length) {
- mergeParents(second, nextRule);
- first = second;
- second = nextRule;
- intersection = nextIntersection;
- }
- }
-
- const firstDecls = getDecls(first);
- // Filter out intersections with later conflicts in First
- intersection = intersection.filter((decl, intersectIndex) => {
- const indexOfDecl = indexOfDeclaration(firstDecls, decl);
- const nextConflictInFirst = firstDecls
- .slice(indexOfDecl + 1)
- .filter((d) => isConflictingProp(d.prop, decl.prop));
- if (nextConflictInFirst.length === 0) {
- return true;
- }
- const nextConflictInIntersection = intersection
- .slice(intersectIndex + 1)
- .filter((d) => isConflictingProp(d.prop, decl.prop));
- if (nextConflictInFirst.length !== nextConflictInIntersection.length) {
- return false;
- }
- return nextConflictInFirst.every((d, index) =>
- declarationIsEqual(d, nextConflictInIntersection[index])
- );
- });
-
- // Filter out intersections with previous conflicts in Second
- const secondDecls = getDecls(second);
- intersection = intersection.filter((decl) => {
- const nextConflictIndex = secondDecls.findIndex((d) =>
- isConflictingProp(d.prop, decl.prop)
- );
- if (nextConflictIndex === -1) {
- return false;
- }
- if (!declarationIsEqual(secondDecls[nextConflictIndex], decl)) {
- return false;
- }
- if (
- decl.prop.toLowerCase() !== 'direction' &&
- decl.prop.toLowerCase() !== 'unicode-bidi' &&
- secondDecls.some(
- (declaration) => declaration.prop.toLowerCase() === 'all'
- )
- ) {
- return false;
- }
- secondDecls.splice(nextConflictIndex, 1);
- return true;
- });
-
- if (intersection.length === 0) {
- // Nothing to merge
- return second;
- }
-
- const receivingBlock = second.clone();
- receivingBlock.selector = joinSelectors(first, second);
- receivingBlock.nodes = [];
-
- /** @type {import('postcss').Container<import('postcss').ChildNode>} */ (
- second.parent
- ).insertBefore(second, receivingBlock);
-
- const firstClone = first.clone();
- const secondClone = second.clone();
-
- /**
- * @param {function(import('postcss').Declaration):void} callback
- * @this void
- * @return {function(import('postcss').Declaration)}
- */
- function moveDecl(callback) {
- return (decl) => {
- if (indexOfDeclaration(intersection, decl) !== -1) {
- callback.call(this, decl);
- }
- };
- }
- firstClone.walkDecls(
- moveDecl((decl) => {
- decl.remove();
- receivingBlock.append(decl);
- })
- );
- secondClone.walkDecls(moveDecl((decl) => decl.remove()));
- const merged = ruleLength(firstClone, receivingBlock, secondClone);
- const original = ruleLength(first, second);
- if (merged < original) {
- first.replaceWith(firstClone);
- second.replaceWith(secondClone);
- [firstClone, receivingBlock, secondClone].forEach((r) => {
- if (r.nodes.length === 0) {
- r.remove();
- }
- });
- if (!secondClone.parent) {
- return receivingBlock;
- }
- return secondClone;
- } else {
- receivingBlock.remove();
- return second;
- }
-}
-
-/**
- * @param {string[]} browsers
- * @param {Map<string, boolean>} compatibilityCache
- * @return {function(import('postcss').Rule)}
- */
-function selectorMerger(browsers, compatibilityCache) {
- /** @type {import('postcss').Rule | null} */
- let cache = null;
- return function (rule) {
- // Prime the cache with the first rule, or alternately ensure that it is
- // safe to merge both declarations before continuing
- if (!cache || !canMerge(rule, cache, browsers, compatibilityCache)) {
- cache = rule;
- return;
- }
- // Ensure that we don't deduplicate the same rule; this is sometimes
- // caused by a partial merge
- if (cache === rule) {
- cache = rule;
- return;
- }
-
- // Parents merge: check if the rules have same parents, but not same parent nodes
- mergeParents(cache, rule);
-
- // Merge when declarations are exactly equal
- // e.g. h1 { color: red } h2 { color: red }
- if (sameDeclarationsAndOrder(getDecls(rule), getDecls(cache))) {
- rule.selector = joinSelectors(cache, rule);
- cache.remove();
- cache = rule;
- return;
- }
- // Merge when both selectors are exactly equal
- // e.g. a { color: blue } a { font-weight: bold }
- if (cache.selector === rule.selector) {
- const cached = getDecls(cache);
- rule.walk((node) => {
- if (node.type === 'decl' && indexOfDeclaration(cached, node) !== -1) {
- node.remove();
- return;
- }
- /** @type {import('postcss').Rule} */ (cache).append(node);
- });
- rule.remove();
- return;
- }
- // Partial merge: check if the rule contains a subset of the last; if
- // so create a joined selector with the subset, if smaller.
- cache = partialMerge(cache, rule);
- };
-}
-
-/**
- * @typedef {{ overrideBrowserslist?: string | string[] }} AutoprefixerOptions
- * @typedef {Pick<browserslist.Options, 'stats' | 'path' | 'env'>} BrowserslistOptions
- * @typedef {AutoprefixerOptions & BrowserslistOptions} Options
- */
-
-/**
- * @type {import('postcss').PluginCreator<Options>}
- * @param {Options} opts
- * @return {import('postcss').Plugin}
- */
-function pluginCreator(opts = {}) {
- return {
- postcssPlugin: 'postcss-merge-rules',
-
- /**
- * @param {import('postcss').Result & {opts: BrowserslistOptions & {file?: string}}} result
- */
- prepare(result) {
- const { stats, env, from, file } = result.opts || {};
- const browsers = browserslist(opts.overrideBrowserslist, {
- stats: opts.stats || stats,
- path: opts.path || dirname(from || file || __filename),
- env: opts.env || env,
- });
-
- const compatibilityCache = new Map();
- return {
- OnceExit(css) {
- css.walkRules(selectorMerger(browsers, compatibilityCache));
- },
- };
- },
- };
-}
-
-pluginCreator.postcss = true;
-module.exports = pluginCreator;
diff --git a/node_modules/postcss-merge-rules/src/lib/ensureCompatibility.js b/node_modules/postcss-merge-rules/src/lib/ensureCompatibility.js
deleted file mode 100644
index e8f60f09..00000000
--- a/node_modules/postcss-merge-rules/src/lib/ensureCompatibility.js
+++ /dev/null
@@ -1,231 +0,0 @@
-'use strict';
-const { isSupported } = require('caniuse-api');
-const selectorParser = require('postcss-selector-parser');
-
-const simpleSelectorRe = /^#?[-._a-z0-9 ]+$/i;
-
-const cssSel2 = 'css-sel2';
-const cssSel3 = 'css-sel3';
-const cssGencontent = 'css-gencontent';
-const cssFirstLetter = 'css-first-letter';
-const cssFirstLine = 'css-first-line';
-const cssInOutOfRange = 'css-in-out-of-range';
-const formValidation = 'form-validation';
-
-const vendorPrefix =
- /-(ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)-/;
-
-const level2Sel = new Set(['=', '~=', '|=']);
-const level3Sel = new Set(['^=', '$=', '*=']);
-
-/**
- * @param {string} selector
- * @return {RegExpMatchArray | null}
- */
-function filterPrefixes(selector) {
- return selector.match(vendorPrefix);
-}
-
-/**
- * Internet Explorer use :-ms-input-placeholder.
- * Microsoft Edge use ::-ms-input-placeholder.
- *
- * @type {(selector: string) => number}
- */
-const findMsInputPlaceholder = (selector) =>
- ~selector.search(/-ms-input-placeholder/i);
-
-/**
- * @param {string[]} selectorsA
- * @param {string[]} selectorsB
- * @return {boolean}
- */
-function sameVendor(selectorsA, selectorsB) {
- /** @type {(selectors: string[]) => string} */
- let same = (selectors) => selectors.map(filterPrefixes).join();
- /** @type {(selectors: string[]) => string | undefined} */
- let findMsVendor = (selectors) => selectors.find(findMsInputPlaceholder);
- return (
- same(selectorsA) === same(selectorsB) &&
- !(findMsVendor(selectorsA) && findMsVendor(selectorsB))
- );
-}
-
-/**
- * @param {string} selector
- * @return {boolean}
- */
-function noVendor(selector) {
- return !vendorPrefix.test(selector);
-}
-
-const pseudoElements = {
- ':active': cssSel2,
- ':after': cssGencontent,
- ':any-link': 'css-any-link',
- ':before': cssGencontent,
- ':checked': cssSel3,
- ':default': 'css-default-pseudo',
- ':dir': 'css-dir-pseudo',
- ':disabled': cssSel3,
- ':empty': cssSel3,
- ':enabled': cssSel3,
- ':first-child': cssSel2,
- ':first-letter': cssFirstLetter,
- ':first-line': cssFirstLine,
- ':first-of-type': cssSel3,
- ':focus': cssSel2,
- ':focus-within': 'css-focus-within',
- ':focus-visible': 'css-focus-visible',
- ':has': 'css-has',
- ':hover': cssSel2,
- ':in-range': cssInOutOfRange,
- ':indeterminate': 'css-indeterminate-pseudo',
- ':invalid': formValidation,
- ':is': 'css-matches-pseudo',
- ':lang': cssSel2,
- ':last-child': cssSel3,
- ':last-of-type': cssSel3,
- ':link': cssSel2,
- ':matches': 'css-matches-pseudo',
- ':not': cssSel3,
- ':nth-child': cssSel3,
- ':nth-last-child': cssSel3,
- ':nth-last-of-type': cssSel3,
- ':nth-of-type': cssSel3,
- ':only-child': cssSel3,
- ':only-of-type': cssSel3,
- ':optional': 'css-optional-pseudo',
- ':out-of-range': cssInOutOfRange,
- ':placeholder-shown': 'css-placeholder-shown',
- ':required': formValidation,
- ':root': cssSel3,
- ':target': cssSel3,
- '::after': cssGencontent,
- '::backdrop': 'dialog',
- '::before': cssGencontent,
- '::first-letter': cssFirstLetter,
- '::first-line': cssFirstLine,
- '::marker': 'css-marker-pseudo',
- '::placeholder': 'css-placeholder',
- '::selection': 'css-selection',
- ':valid': formValidation,
- ':visited': cssSel2,
-};
-
-/**
- * @param {string} selector
- * @return {boolean}
- */
-function isCssMixin(selector) {
- return selector[selector.length - 1] === ':';
-}
-
-/**
- * @param {string} selector
- * @return {boolean}
- */
-function isHostPseudoClass(selector) {
- return selector.includes(':host');
-}
-
-const isSupportedCache = new Map();
-
-// Move to util in future
-/**
- * @param {string} feature
- * @param {string[] | undefined} browsers
- */
-function isSupportedCached(feature, browsers) {
- const key = JSON.stringify({ feature, browsers });
- let result = isSupportedCache.get(key);
-
- if (!result) {
- result = isSupported(feature, /** @type {string[]} */ (browsers));
- isSupportedCache.set(key, result);
- }
-
- return result;
-}
-
-/**
- * @param {string[]} selectors
- * @param{string[]=} browsers
- * @param{Map<string,boolean>=} compatibilityCache
- * @return {boolean}
- */
-function ensureCompatibility(selectors, browsers, compatibilityCache) {
- // Should not merge mixins
- if (selectors.some(isCssMixin)) {
- return false;
- }
-
- // Should not merge :host selector https://github.com/angular/angular-cli/issues/18672
- if (selectors.some(isHostPseudoClass)) {
- return false;
- }
- return selectors.every((selector) => {
- if (simpleSelectorRe.test(selector)) {
- return true;
- }
- if (compatibilityCache && compatibilityCache.has(selector)) {
- return compatibilityCache.get(selector);
- }
- let compatible = true;
- selectorParser((ast) => {
- ast.walk((node) => {
- const { type, value } = node;
- if (type === 'pseudo') {
- const entry =
- pseudoElements[/** @type {keyof pseudoElements} */ (value)];
- if (!entry && noVendor(value)) {
- compatible = false;
- }
- if (entry && compatible) {
- compatible = isSupportedCached(entry, browsers);
- }
- }
- if (type === 'combinator') {
- if (value.includes('~')) {
- compatible = isSupportedCached(cssSel3, browsers);
- }
- if (value.includes('>') || value.includes('+')) {
- compatible = isSupportedCached(cssSel2, browsers);
- }
- }
- if (type === 'attribute' && node.attribute) {
- // [foo]
- if (!node.operator) {
- compatible = isSupportedCached(cssSel2, browsers);
- }
- if (value) {
- // [foo="bar"], [foo~="bar"], [foo|="bar"]
- if (level2Sel.has(/** @type {string} */ (node.operator))) {
- compatible = isSupportedCached(cssSel2, browsers);
- }
- // [foo^="bar"], [foo$="bar"], [foo*="bar"]
- if (level3Sel.has(/** @type {string} */ (node.operator))) {
- compatible = isSupportedCached(cssSel3, browsers);
- }
- }
-
- // [foo="bar" i]
- if (node.insensitive) {
- compatible = isSupportedCached('css-case-insensitive', browsers);
- }
- }
- if (!compatible) {
- // If this node was not compatible,
- // break out early from walking the rest
- return false;
- }
- });
- }).processSync(selector);
- if (compatibilityCache) {
- compatibilityCache.set(selector, compatible);
- }
- return compatible;
- });
-}
-
-module.exports = { sameVendor, noVendor, pseudoElements, ensureCompatibility };
diff --git a/node_modules/postcss-merge-rules/types/index.d.ts b/node_modules/postcss-merge-rules/types/index.d.ts
deleted file mode 100644
index 9d7777f9..00000000
--- a/node_modules/postcss-merge-rules/types/index.d.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-export = pluginCreator;
-/**
- * @typedef {{ overrideBrowserslist?: string | string[] }} AutoprefixerOptions
- * @typedef {Pick<browserslist.Options, 'stats' | 'path' | 'env'>} BrowserslistOptions
- * @typedef {AutoprefixerOptions & BrowserslistOptions} Options
- */
-/**
- * @type {import('postcss').PluginCreator<Options>}
- * @param {Options} opts
- * @return {import('postcss').Plugin}
- */
-declare function pluginCreator(opts?: Options): import('postcss').Plugin;
-declare namespace pluginCreator {
- export { postcss, AutoprefixerOptions, BrowserslistOptions, Options };
-}
-type Options = AutoprefixerOptions & BrowserslistOptions;
-declare var postcss: true;
-type AutoprefixerOptions = {
- overrideBrowserslist?: string | string[];
-};
-type BrowserslistOptions = Pick<browserslist.Options, 'stats' | 'path' | 'env'>;
-import browserslist = require("browserslist");
-//# sourceMappingURL=index.d.ts.map \ No newline at end of file
diff --git a/node_modules/postcss-merge-rules/types/index.d.ts.map b/node_modules/postcss-merge-rules/types/index.d.ts.map
deleted file mode 100644
index 9d8590f9..00000000
--- a/node_modules/postcss-merge-rules/types/index.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";AA0ZA;;;;GAIG;AAEH;;;;GAIG;AACH,sCAHW,OAAO,GACN,OAAO,SAAS,EAAE,MAAM,CAyBnC;;;;eA/BY,mBAAmB,GAAG,mBAAmB;;2BAFzC;IAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE;2BAC5C,KAAK,oBAAoB,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC"} \ No newline at end of file
diff --git a/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts b/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts
deleted file mode 100644
index 5fe9eea7..00000000
--- a/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * @param {string[]} selectorsA
- * @param {string[]} selectorsB
- * @return {boolean}
- */
-export function sameVendor(selectorsA: string[], selectorsB: string[]): boolean;
-/**
- * @param {string} selector
- * @return {boolean}
- */
-export function noVendor(selector: string): boolean;
-export const pseudoElements: {
- ':active': string;
- ':after': string;
- ':any-link': string;
- ':before': string;
- ':checked': string;
- ':default': string;
- ':dir': string;
- ':disabled': string;
- ':empty': string;
- ':enabled': string;
- ':first-child': string;
- ':first-letter': string;
- ':first-line': string;
- ':first-of-type': string;
- ':focus': string;
- ':focus-within': string;
- ':focus-visible': string;
- ':has': string;
- ':hover': string;
- ':in-range': string;
- ':indeterminate': string;
- ':invalid': string;
- ':is': string;
- ':lang': string;
- ':last-child': string;
- ':last-of-type': string;
- ':link': string;
- ':matches': string;
- ':not': string;
- ':nth-child': string;
- ':nth-last-child': string;
- ':nth-last-of-type': string;
- ':nth-of-type': string;
- ':only-child': string;
- ':only-of-type': string;
- ':optional': string;
- ':out-of-range': string;
- ':placeholder-shown': string;
- ':required': string;
- ':root': string;
- ':target': string;
- '::after': string;
- '::backdrop': string;
- '::before': string;
- '::first-letter': string;
- '::first-line': string;
- '::marker': string;
- '::placeholder': string;
- '::selection': string;
- ':valid': string;
- ':visited': string;
-};
-/**
- * @param {string[]} selectors
- * @param{string[]=} browsers
- * @param{Map<string,boolean>=} compatibilityCache
- * @return {boolean}
- */
-export function ensureCompatibility(selectors: string[], browsers?: string[] | undefined, compatibilityCache?: Map<string, boolean> | undefined): boolean;
-//# sourceMappingURL=ensureCompatibility.d.ts.map \ No newline at end of file
diff --git a/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts.map b/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts.map
deleted file mode 100644
index 2c2ae719..00000000
--- a/node_modules/postcss-merge-rules/types/lib/ensureCompatibility.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ensureCompatibility.d.ts","sourceRoot":"","sources":["../../src/lib/ensureCompatibility.js"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,uCAJW,MAAM,EAAE,cACR,MAAM,EAAE,GACP,OAAO,CAWlB;AAED;;;GAGG;AACH,mCAHW,MAAM,GACL,OAAO,CAIlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDE;AAqCF;;;;;GAKG;AACH,+CALW,MAAM,EAAE,aACT,MAAM,EAAE,mCACR,IAAI,MAAM,EAAC,OAAO,CAAC,eACjB,OAAO,CA0ElB"} \ No newline at end of file