Update linter packages

- Updates stylelint to 13.8.0
- Updates ESLint to 7.14.0
- Updates @typescript-eslint to 4.9.0

DISABLE_THIRD_PARTY_CHECK=NPM update
R=jacktfranklin@chromium.org

Change-Id: I207e204607ede782710e042c17d6510c7f696905
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2566806
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
diff --git a/node_modules/postcss-selector-parser/API.md b/node_modules/postcss-selector-parser/API.md
index ceee157..6aa1f14 100644
--- a/node_modules/postcss-selector-parser/API.md
+++ b/node_modules/postcss-selector-parser/API.md
@@ -684,7 +684,7 @@
 ```js
 {
   attribute: "href",
-  operatator: "=",
+  operator: "=",
   value: "test",
   spaces: {
     before: '',
diff --git a/node_modules/postcss-selector-parser/CHANGELOG.md b/node_modules/postcss-selector-parser/CHANGELOG.md
index 8aeec16..ef9c5a2 100644
--- a/node_modules/postcss-selector-parser/CHANGELOG.md
+++ b/node_modules/postcss-selector-parser/CHANGELOG.md
@@ -1,3 +1,13 @@
+# 6.0.4
+
+- Fixed: ts errors
+
+# 6.0.3
+
+- Fixed: replace node built-in "util" module with "util-deprecate"
+- Fixed: handle uppercase pseudo elements
+- Fixed: do not create invalid combinator before comment
+
 # 6.0.2
 
 - Fixed an issue with parsing and stringifying an empty attribute value
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/classes.js b/node_modules/postcss-selector-parser/dist/__tests__/classes.js
index 003d6b3..28526a5 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/classes.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/classes.js
@@ -213,4 +213,14 @@
   t.deepEqual(tree.nodes[0].nodes[0].value, '𝌆');
   t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
   t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\1D306');
+});
+(0, _helpers.test)('class selector with escaping (35)', '.not-pseudo\\:focus', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'not-pseudo:focus');
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
+  t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'not-pseudo\\:focus');
+});
+(0, _helpers.test)('class selector with escaping (36)', '.not-pseudo\\:\\:focus', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'not-pseudo::focus');
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
+  t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'not-pseudo\\:\\:focus');
 });
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/comments.js b/node_modules/postcss-selector-parser/dist/__tests__/comments.js
index 83463b5..d317e8a 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/comments.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/comments.js
@@ -35,4 +35,47 @@
   t.deepEqual(classname.type, 'class', 'should have a tag');
   t.deepEqual(classname.spaces.after, ' ');
   t.deepEqual(classname.raws.spaces.after, ' /* comment 3 */');
+});
+(0, _helpers.test)('comments in selector list', 'h2, /*test*/ h4', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
+  t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
+  t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
+  t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
+  t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, ' ');
+  t.deepEqual(tree.nodes[1].nodes[1].type, 'tag');
+  t.deepEqual(tree.nodes[1].nodes[1].value, 'h4');
+});
+(0, _helpers.test)('comments in selector list (2)', 'h2,/*test*/h4', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
+  t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, '');
+  t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
+  t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
+  t.deepEqual(tree.nodes[1].nodes[1].type, 'tag');
+  t.deepEqual(tree.nodes[1].nodes[1].value, 'h4');
+  t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, '');
+});
+(0, _helpers.test)('comments in selector list (3)', 'h2/*test*/, h4', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
+  t.deepEqual(tree.nodes[0].nodes[1].rawSpaceBefore, '');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'comment');
+  t.deepEqual(tree.nodes[0].nodes[1].value, '/*test*/');
+  t.deepEqual(tree.nodes[1].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[1].nodes[0].value, 'h4');
+  t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
+});
+(0, _helpers.test)('comments in selector list (4)', 'h2, /*test*/ /*test*/ h4', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'h2');
+  t.deepEqual(tree.nodes[1].nodes[0].rawSpaceBefore, ' ');
+  t.deepEqual(tree.nodes[1].nodes[0].type, 'comment');
+  t.deepEqual(tree.nodes[1].nodes[0].value, '/*test*/');
+  t.deepEqual(tree.nodes[1].nodes[1].rawSpaceBefore, ' ');
+  t.deepEqual(tree.nodes[1].nodes[1].type, 'comment');
+  t.deepEqual(tree.nodes[1].nodes[1].value, '/*test*/');
+  t.deepEqual(tree.nodes[1].nodes[2].rawSpaceBefore, ' ');
+  t.deepEqual(tree.nodes[1].nodes[2].type, 'tag');
+  t.deepEqual(tree.nodes[1].nodes[2].value, 'h4');
 });
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/guards.js b/node_modules/postcss-selector-parser/dist/__tests__/guards.js
index b2045ca..1f2412b 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/guards.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/guards.js
@@ -91,6 +91,15 @@
     t.false(_.default.isNamespace(n));
   });
 });
+(0, _helpers.test)('special pseudo element guard (uppercase)', ':BEFORE:AFTER', function (t, tree) {
+  [node(tree), node(tree, 1)].forEach(function (n) {
+    t.true(_.default.isPseudo(n));
+    t.false(_.default.isPseudoClass(n));
+    t.true(_.default.isPseudoElement(n));
+    t.true(_.default.isContainer(n));
+    t.false(_.default.isNamespace(n));
+  });
+});
 (0, _helpers.test)('string guard', '"string"', function (t, tree) {
   var n = node(tree);
   t.true(_.default.isNode(n));
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/id.js b/node_modules/postcss-selector-parser/dist/__tests__/id.js
index 73386f6..87dc746 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/id.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/id.js
@@ -6,6 +6,12 @@
   t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
   t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
 });
+(0, _helpers.test)('id selector with universal', '*#z98y ', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].value, '*');
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
+  t.deepEqual(tree.nodes[0].nodes[1].value, 'z98y');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
+});
 (0, _helpers.test)('id hack', '#one#two', function (t, tree) {
   t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
   t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js b/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js
index 599e64d..d9786f2 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/nonstandard.js
@@ -19,20 +19,28 @@
   t.deepEqual(tree.nodes[0].nodes[1].value, '*');
 });
 (0, _helpers.test)('sass escapes', '.#{$classname}', function (t, tree) {
-  t.deepEqual(tree.nodes[0].nodes.map(function (n) {
-    return n.type;
-  }), ["class"]);
+  t.deepEqual(tree.nodes[0].nodes[0].type, "class");
   t.deepEqual(tree.nodes[0].nodes[0].value, "#{$classname}");
 });
 (0, _helpers.test)('sass escapes (2)', '[lang=#{$locale}]', function (t, tree) {
-  t.deepEqual(tree.nodes[0].nodes.map(function (n) {
-    return n.type;
-  }), ["attribute"]);
+  t.deepEqual(tree.nodes[0].nodes[0].type, "attribute");
+  t.deepEqual(tree.nodes[0].nodes[0].attribute, "lang");
+  t.deepEqual(tree.nodes[0].nodes[0].operator, "=");
   t.deepEqual(tree.nodes[0].nodes[0].value, "#{$locale}");
 });
 (0, _helpers.test)('placeholder', '%foo', function (t, tree) {
-  t.deepEqual(tree.nodes[0].nodes.map(function (n) {
-    return n.type;
-  }), ["tag"]);
+  t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
   t.deepEqual(tree.nodes[0].nodes[0].value, "%foo");
+});
+(0, _helpers.test)('styled selector', '${Step}', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
+  t.deepEqual(tree.nodes[0].nodes[0].value, "${Step}");
+});
+(0, _helpers.test)('styled selector (2)', '${Step}:nth-child(odd)', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, "tag");
+  t.deepEqual(tree.nodes[0].nodes[0].value, "${Step}");
+  t.deepEqual(tree.nodes[0].nodes[1].type, "pseudo");
+  t.deepEqual(tree.nodes[0].nodes[1].value, ":nth-child");
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, "tag");
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, "odd");
 });
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js b/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js
index d316a0c..2dd64b1 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/pseudos.js
@@ -95,4 +95,71 @@
   t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
   t.deepEqual(tree.nodes[1].nodes[0].value, ':--foobar');
   t.deepEqual(tree.nodes[1].nodes[0].type, 'pseudo');
+});
+(0, _helpers.test)('current pseudo class', ':current(p, li, dt, dd)', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[0].value, ':current');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].value, 'p');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].value, 'li');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].value, 'dt');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].value, 'dd');
+});
+(0, _helpers.test)('is pseudo class', ':is(p, li, dt, dd)', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[0].value, ':is');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[0].nodes[0].value, 'p');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[1].nodes[0].value, 'li');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[2].nodes[0].value, 'dt');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].nodes[3].nodes[0].value, 'dd');
+});
+(0, _helpers.test)('is pseudo class with namespace', '*|*:is(:hover, :focus) ', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
+  t.deepEqual(tree.nodes[0].nodes[0].namespace, '*');
+  t.deepEqual(tree.nodes[0].nodes[0].value, '*');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].value, ':is');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':hover');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[1].nodes[0].value, ':focus');
+});
+(0, _helpers.test)('has pseudo class', 'a:has(> img)', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].value, ':has');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'combinator');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, '>');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[1].value, 'img');
+});
+(0, _helpers.test)('where pseudo class', 'a:where(:not(:hover))', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'a');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].value, ':where');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':not');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].value, ':hover');
+});
+(0, _helpers.test)('nested pseudo classes', "section:not( :has(h1, h2 ) )", function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[0].value, 'section');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].value, ':not');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].type, 'pseudo');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].value, ':has');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[0].nodes[0].value, 'h1');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[1].nodes[0].type, 'tag');
+  t.deepEqual(tree.nodes[0].nodes[1].nodes[0].nodes[0].nodes[1].nodes[0].value, 'h2');
 });
\ No newline at end of file
diff --git a/node_modules/postcss-selector-parser/dist/__tests__/universal.js b/node_modules/postcss-selector-parser/dist/__tests__/universal.js
index 019c003..c1d39b0 100644
--- a/node_modules/postcss-selector-parser/dist/__tests__/universal.js
+++ b/node_modules/postcss-selector-parser/dist/__tests__/universal.js
@@ -11,6 +11,16 @@
   t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
   t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
 });
+(0, _helpers.test)('universal selector with descendant combinator', '* *', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
+  t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
+});
+(0, _helpers.test)('universal selector with descendant combinator and extraneous non-combinating whitespace', '*         *', function (t, tree) {
+  t.deepEqual(tree.nodes[0].nodes[0].type, 'universal');
+  t.deepEqual(tree.nodes[0].nodes[1].type, 'combinator');
+  t.deepEqual(tree.nodes[0].nodes[2].type, 'universal');
+});
 (0, _helpers.test)('extraneous non-combinating whitespace', '  *   ,  *   ', function (t, tree) {
   t.deepEqual(tree.nodes[0].nodes[0].value, '*');
   t.deepEqual(tree.nodes[0].nodes[0].spaces.before, '  ');
diff --git a/node_modules/postcss-selector-parser/dist/parser.js b/node_modules/postcss-selector-parser/dist/parser.js
index 927d18a..4133ad1 100644
--- a/node_modules/postcss-selector-parser/dist/parser.js
+++ b/node_modules/postcss-selector-parser/dist/parser.js
@@ -885,7 +885,9 @@
   _proto.space = function space() {
     var content = this.content(); // Handle space before and after the selector
 
-    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
+    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {
+      return node.type === 'comment';
+    })) {
       this.spaces = this.optionalSpace(content);
       this.position++;
     } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
diff --git a/node_modules/postcss-selector-parser/dist/selectors/attribute.js b/node_modules/postcss-selector-parser/dist/selectors/attribute.js
index 8d9c280..3212d90 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/attribute.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/attribute.js
@@ -22,8 +22,7 @@
 
 function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
 
-var _require = require("util"),
-    deprecate = _require.deprecate;
+var deprecate = require("util-deprecate");
 
 var WRAPPED_IN_QUOTES = /^('|")(.*)\1$/;
 var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead.");
diff --git a/node_modules/postcss-selector-parser/dist/selectors/className.js b/node_modules/postcss-selector-parser/dist/selectors/className.js
index d79247d..76145bc 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/className.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/className.js
@@ -35,8 +35,8 @@
 
   var _proto = ClassName.prototype;
 
-  _proto.toString = function toString() {
-    return [this.rawSpaceBefore, String('.' + this.stringifyProperty("value")), this.rawSpaceAfter].join('');
+  _proto.valueToString = function valueToString() {
+    return '.' + _Node.prototype.valueToString.call(this);
   };
 
   _createClass(ClassName, [{
diff --git a/node_modules/postcss-selector-parser/dist/selectors/guards.js b/node_modules/postcss-selector-parser/dist/selectors/guards.js
index 8cf7bcf..aa76912 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/guards.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/guards.js
@@ -48,7 +48,7 @@
 exports.isUniversal = isUniversal;
 
 function isPseudoElement(node) {
-  return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value === ":before" || node.value === ":after");
+  return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after");
 }
 
 function isPseudoClass(node) {
diff --git a/node_modules/postcss-selector-parser/dist/selectors/id.js b/node_modules/postcss-selector-parser/dist/selectors/id.js
index d93afad..541beeb 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/id.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/id.js
@@ -26,8 +26,8 @@
 
   var _proto = ID.prototype;
 
-  _proto.toString = function toString() {
-    return [this.rawSpaceBefore, String('#' + this.stringifyProperty("value")), this.rawSpaceAfter].join('');
+  _proto.valueToString = function valueToString() {
+    return '#' + _Node.prototype.valueToString.call(this);
   };
 
   return ID;
diff --git a/node_modules/postcss-selector-parser/dist/selectors/namespace.js b/node_modules/postcss-selector-parser/dist/selectors/namespace.js
index 6cc6a27..c12233a 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/namespace.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/namespace.js
@@ -36,8 +36,8 @@
     }
   };
 
-  _proto.toString = function toString() {
-    return [this.rawSpaceBefore, this.qualifiedName(this.stringifyProperty("value")), this.rawSpaceAfter].join('');
+  _proto.valueToString = function valueToString() {
+    return this.qualifiedName(_Node.prototype.valueToString.call(this));
   };
 
   _createClass(Namespace, [{
diff --git a/node_modules/postcss-selector-parser/dist/selectors/node.js b/node_modules/postcss-selector-parser/dist/selectors/node.js
index 9236311..f959846 100644
--- a/node_modules/postcss-selector-parser/dist/selectors/node.js
+++ b/node_modules/postcss-selector-parser/dist/selectors/node.js
@@ -160,7 +160,7 @@
     }
   }
   /**
-   * 
+   *
    * @param {number} line The number (starting with 1)
    * @param {number} column The column number (starting with 1)
    */
@@ -194,8 +194,12 @@
     return this.raws && this.raws[name] || this[name];
   };
 
+  _proto.valueToString = function valueToString() {
+    return String(this.stringifyProperty("value"));
+  };
+
   _proto.toString = function toString() {
-    return [this.rawSpaceBefore, String(this.stringifyProperty("value")), this.rawSpaceAfter].join('');
+    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');
   };
 
   _createClass(Node, [{
diff --git a/node_modules/postcss-selector-parser/package.json b/node_modules/postcss-selector-parser/package.json
index 59ac86c..843e9b4 100644
--- a/node_modules/postcss-selector-parser/package.json
+++ b/node_modules/postcss-selector-parser/package.json
@@ -20,7 +20,8 @@
   "dependencies": {
     "cssesc": "^3.0.0",
     "indexes-of": "^1.0.1",
-    "uniq": "^1.0.1"
+    "uniq": "^1.0.1",
+    "util-deprecate": "^1.0.2"
   },
   "devDependencies": {
     "@babel/cli": "^7.2.3",
@@ -40,7 +41,8 @@
     "minimist": "^1.2.0",
     "nyc": "^13.3.0",
     "postcss": "^7.0.14",
-    "semver": "^5.6.0"
+    "semver": "^5.6.0",
+    "typescript": "^4.0.3"
   },
   "engines": {
     "node": ">=4"
@@ -66,11 +68,11 @@
   "scripts": {
     "lintfix": "eslint --fix src",
     "prepare": "del-cli dist && BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/",
-    "pretest": "eslint src",
+    "pretest": "eslint src && tsc --noEmit postcss-selector-parser.d.ts",
     "report": "nyc report --reporter=html",
     "test": "nyc ava src/__tests__/*.js",
     "testone": "ava"
   },
   "types": "postcss-selector-parser.d.ts",
-  "version": "6.0.2"
+  "version": "6.0.4"
 }
diff --git a/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts b/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts
index 52bdb77..383e222 100644
--- a/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts
+++ b/node_modules/postcss-selector-parser/postcss-selector-parser.d.ts
@@ -14,6 +14,9 @@
  */
 export = parser;
 
+// A type that's T but not U.
+type Diff<T, U> = T extends U ? never : T;
+
 // TODO: Conditional types in TS 1.8 will really clean this up.
 declare function parser(): parser.Processor<never>;
 declare function parser<Transform>(processor: parser.AsyncProcessor<Transform>): parser.Processor<Transform, never>;
@@ -203,11 +206,14 @@
     interface ContainerOptions extends NodeOptions {
         nodes?: Array<Node>;
     }
-    interface Container<Value extends string | undefined = string> extends Base<Value> {
-        nodes: Array<Node>;
-        append(selector: Selector): Container;
-        prepend(selector: Selector): Container;
-        at(index: number): Node;
+    interface Container<
+        Value extends string | undefined = string,
+        Child extends Node = Node
+    > extends Base<Value> {
+        nodes: Array<Child>;
+        append(selector: Selector): this;
+        prepend(selector: Selector): this;
+        at(index: number): Child;
         /**
          * Return the most specific node at the line and column number given.
          * The source location is based on the original parsed location, locations aren't
@@ -221,33 +227,74 @@
          * @param line The line number of the node to find. (1-based index)
          * @param col  The column number of the node to find. (1-based index)
          */
-        atPosition(line: number, column: number): Node;
-        index(child: Node): number;
-        readonly first: Node;
-        readonly last: Node;
+        atPosition(line: number, column: number): Child;
+        index(child: Child): number;
+        readonly first: Child;
+        readonly last: Child;
         readonly length: number;
-        removeChild(child: Node): Container;
+        removeChild(child: Child): this;
         removeAll(): Container;
         empty(): Container;
-        insertAfter(oldNode: Node, newNode: Node): Container;
-        insertBefore(oldNode: Node, newNode: Node): Container;
-        each(callback: (node: Node) => boolean | void): boolean | undefined;
-        walk(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkAttributes(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkClasses(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkCombinators(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkComments(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkIds(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkNesting(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkPseudos(callback: (node: Node) => boolean | void): boolean | undefined;
-        walkTags(callback: (node: Node) => boolean | void): boolean | undefined;
-        split(callback: (node: Node) => boolean): [Node[], Node[]];
-        map(callback: (node: Node) => Node): Node[];
-        reduce<T>(callback: (node: Node) => Node, memo: T): T;
-        every(callback: (node: Node) => boolean): boolean;
-        some(callback: (node: Node) => boolean): boolean;
-        filter(callback: (node: Node) => boolean): Node[];
-        sort(callback: (nodeA: Node, nodeB: Node) => number): Node[];
+        insertAfter(oldNode: Child, newNode: Child): this;
+        insertBefore(oldNode: Child, newNode: Child): this;
+        each(callback: (node: Child) => boolean | void): boolean | undefined;
+        walk(
+            callback: (node: Node) => boolean | void
+        ): boolean | undefined;
+        walkAttributes(
+            callback: (node: Attribute) => boolean | void
+        ): boolean | undefined;
+        walkClasses(
+            callback: (node: ClassName) => boolean | void
+        ): boolean | undefined;
+        walkCombinators(
+            callback: (node: Combinator) => boolean | void
+        ): boolean | undefined;
+        walkComments(
+            callback: (node: Comment) => boolean | void
+        ): boolean | undefined;
+        walkIds(
+            callback: (node: Identifier) => boolean | void
+        ): boolean | undefined;
+        walkNesting(
+            callback: (node: Nesting) => boolean | void
+        ): boolean | undefined;
+        walkPseudos(
+            callback: (node: Pseudo) => boolean | void
+        ): boolean | undefined;
+        walkTags(callback: (node: Tag) => boolean | void): boolean | undefined;
+        split(callback: (node: Child) => boolean): [Child[], Child[]];
+        map<T>(callback: (node: Child) => T): T[];
+        reduce(
+            callback: (
+                previousValue: Child,
+                currentValue: Child,
+                currentIndex: number,
+                array: readonly Child[]
+            ) => Child
+        ): Child;
+        reduce(
+            callback: (
+                previousValue: Child,
+                currentValue: Child,
+                currentIndex: number,
+                array: readonly Child[]
+            ) => Child,
+            initialValue: Child
+        ): Child;
+        reduce<T>(
+            callback: (
+                previousValue: T,
+                currentValue: Child,
+                currentIndex: number,
+                array: readonly Child[]
+            ) => T,
+            initialValue: T
+        ): T;
+        every(callback: (node: Child) => boolean): boolean;
+        some(callback: (node: Child) => boolean): boolean;
+        filter(callback: (node: Child) => boolean): Child[];
+        sort(callback: (nodeA: Child, nodeB: Child) => number): Child[];
         toString(): string;
     }
     function isContainer(node: any): node is Root | Selector | Pseudo;
@@ -273,7 +320,7 @@
     }
     function isNamespace(node: any): node is Attribute | Tag;
 
-    interface Root extends Container<undefined> {
+    interface Root extends Container<undefined, Selector> {
         type: "root";
         /**
          * Raises an error, if the processor is invoked on
@@ -285,9 +332,10 @@
     function root(opts: ContainerOptions): Root;
     function isRoot(node: any): node is Root;
 
-    interface Selector extends Container {
+    interface _Selector<S> extends Container<string, Diff<Node, S>> {
         type: "selector";
     }
+    type Selector = _Selector<Selector>;
     function selector(opts: ContainerOptions): Selector;
     function isSelector(node: any): node is Selector;
 
@@ -439,7 +487,7 @@
     function attribute(opts: AttributeOptions): Attribute;
     function isAttribute(node: any): node is Attribute;
 
-    interface Pseudo extends Container {
+    interface Pseudo extends Container<string, Selector> {
         type: "pseudo";
     }
     function pseudo(opts: ContainerOptions): Pseudo;