🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Sign inDemoInstall
Socket

postcss-selector-parser

Package Overview
Dependencies
Maintainers
4
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

postcss-selector-parser - npm Package Compare versions

Comparing version

to
6.0.3

2

API.md

@@ -687,3 +687,3 @@ # API Documentation

attribute: "href",
operatator: "=",
operator: "=",
value: "test",

@@ -690,0 +690,0 @@ spaces: {

@@ -0,1 +1,7 @@

# 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

@@ -2,0 +8,0 @@

@@ -216,2 +216,12 @@ "use strict";

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');
});

@@ -38,2 +38,45 @@ "use strict";

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');
});

@@ -94,2 +94,11 @@ "use strict";

});
(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) {

@@ -96,0 +105,0 @@ var n = node(tree);

@@ -9,2 +9,8 @@ "use strict";

});
(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) {

@@ -11,0 +17,0 @@ t.deepEqual(tree.nodes[0].nodes[0].type, 'id');

@@ -22,18 +22,26 @@ "use strict";

(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");
});

@@ -98,2 +98,69 @@ "use strict";

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');
});

@@ -14,2 +14,12 @@ "use strict";

});
(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) {

@@ -16,0 +26,0 @@ t.deepEqual(tree.nodes[0].nodes[0].value, '*');

@@ -888,3 +888,5 @@ "use strict";

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);

@@ -891,0 +893,0 @@ this.position++;

@@ -25,4 +25,3 @@ "use strict";

var _require = require("util"),
deprecate = _require.deprecate;
var deprecate = require("util-deprecate");

@@ -29,0 +28,0 @@ var WRAPPED_IN_QUOTES = /^('|")(.*)\1$/;

@@ -38,4 +38,4 @@ "use strict";

_proto.toString = function toString() {
return [this.rawSpaceBefore, String('.' + this.stringifyProperty("value")), this.rawSpaceAfter].join('');
_proto.valueToString = function valueToString() {
return '.' + _Node.prototype.valueToString.call(this);
};

@@ -42,0 +42,0 @@

@@ -51,3 +51,3 @@ "use strict";

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");
}

@@ -54,0 +54,0 @@

@@ -29,4 +29,4 @@ "use strict";

_proto.toString = function toString() {
return [this.rawSpaceBefore, String('#' + this.stringifyProperty("value")), this.rawSpaceAfter].join('');
_proto.valueToString = function valueToString() {
return '#' + _Node.prototype.valueToString.call(this);
};

@@ -33,0 +33,0 @@

@@ -39,4 +39,4 @@ "use strict";

_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));
};

@@ -43,0 +43,0 @@

@@ -163,3 +163,3 @@ "use strict";

/**
*
*
* @param {number} line The number (starting with 1)

@@ -198,4 +198,8 @@ * @param {number} column The column number (starting with 1)

_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('');
};

@@ -202,0 +206,0 @@

{
"name": "postcss-selector-parser",
"version": "6.0.2",
"version": "6.0.3",
"devDependencies": {

@@ -44,3 +44,4 @@ "@babel/cli": "^7.2.3",

"indexes-of": "^1.0.1",
"uniq": "^1.0.1"
"uniq": "^1.0.1",
"util-deprecate": "^1.0.2"
},

@@ -47,0 +48,0 @@ "license": "MIT",

@@ -17,2 +17,5 @@ // Type definitions for postcss-selector-parser 2.2.3

// 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.

@@ -207,7 +210,10 @@ declare function parser(): parser.Processor<never>;

}
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;
/**

@@ -226,29 +232,70 @@ * Return the most specific node at the line and column number given.

*/
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;

@@ -279,3 +326,3 @@ }

interface Root extends Container<undefined> {
interface Root extends Container<undefined, Selector> {
type: "root";

@@ -292,3 +339,3 @@ /**

interface Selector extends Container {
interface Selector extends Container<string, Diff<Node, Selector>> {
type: "selector";

@@ -447,3 +494,3 @@ }

interface Pseudo extends Container {
interface Pseudo extends Container<string, Selector> {
type: "pseudo";

@@ -450,0 +497,0 @@ }