Skip to content

Commit 0db9932

Browse files
authored
wrap calls to selector parser in try/catch (#698)
* wrap calls to selector parser in try/catch * Update plugins/css-blank-pseudo/src/index.ts
1 parent d2fd91f commit 0db9932

File tree

43 files changed

+235
-83
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+235
-83
lines changed

plugins/css-blank-pseudo/.tape.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ postcssTape(plugin)({
3030
disablePolyfillReadyClass: true
3131
}
3232
},
33+
'invalid-selector': {
34+
message: 'warns on invalid selectors',
35+
warnings: 1
36+
},
3337
'examples/example': {
3438
message: 'minimal example',
3539
},

plugins/css-blank-pseudo/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Unreleased (major)
44

55
- Updated: Support for Node v14+ (major).
6+
- Fix: Do not throw when a selector is invalid, show a warning instead.
67

78
### 4.1.1 (August, 23, 2022)
89

plugins/css-blank-pseudo/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ const creator: PluginCreator<pluginOptions> = (opts?: pluginOptions) => {
4848

4949
try {
5050
selectorAST = parser().astSync(selector);
51-
} catch (_) {
52-
rule.warn(result, `Failed to parse selector : ${selector}`);
53-
return selector;
51+
} catch (err) {
52+
rule.warn(result, `Failed to parse selector : "${selector}" with message: "${err.message}"`);
53+
return [selector];
5454
}
5555

5656
if (typeof selectorAST === 'undefined') {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo : bar:blank {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
foo : bar:blank {}

plugins/css-has-pseudo/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Unreleased (major)
44

55
- Updated: Support for Node v14+ (major).
6+
- Fix: Do not throw when a selector is invalid, show a warning instead.
67

78
### 4.0.1 (August 23, 2022)
89

plugins/css-has-pseudo/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ const creator: PluginCreator<{ preserve?: boolean, specificityMatchingName?: str
3030
let selectorAST;
3131
try {
3232
selectorAST = parser().astSync(selector);
33-
} catch (_) {
34-
rule.warn(result, `Failed to parse selector : ${selector}`);
33+
} catch (err) {
34+
rule.warn(result, `Failed to parse selector : "${selector}" with message: "${err.message}"`);
3535
return selector;
3636
}
3737

plugins/postcss-attribute-case-insensitive/.tape.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ postcssTape(plugin)({
55
basic: {
66
message: "supports basic usage",
77
},
8+
'invalid-selector': {
9+
message: 'warns on invalid selectors',
10+
warnings: 1
11+
},
812
'examples/example': {
913
message: 'minimal example',
1014
},

plugins/postcss-attribute-case-insensitive/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Unreleased (major)
44

55
- Updated: Support for Node v14+ (major).
6+
- Fix: Do not throw when a selector is invalid, show a warning instead.
67

78
### 5.0.2 (July 8, 2022)
89

plugins/postcss-attribute-case-insensitive/src/index.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { PluginCreator } from 'postcss';
2-
import selectorParser, { Container } from 'postcss-selector-parser';
2+
import selectorParser from 'postcss-selector-parser';
3+
import type { Container } from 'postcss-selector-parser';
34

45
function nodeIsInsensitiveAttribute(node) {
56
return node.type === 'attribute' && node.insensitive;
@@ -88,9 +89,18 @@ function transform(selectors) {
8889
const creator: PluginCreator<never> = () => {
8990
return {
9091
postcssPlugin: 'postcss-attribute-case-insensitive',
91-
Rule(rule) {
92+
Rule(rule, { result }) {
9293
if (rule.selector.includes('i]')) {
93-
const modifiedSelector = selectorParser(transform).processSync(rule.selector);
94+
95+
let modifiedSelector = rule.selector;
96+
97+
try {
98+
modifiedSelector = selectorParser(transform).processSync(rule.selector);
99+
} catch (err) {
100+
rule.warn(result, `Failed to parse selector : "${rule.selector}" with message: "${err.message}"`);
101+
return;
102+
}
103+
94104
if (modifiedSelector === rule.selector) {
95105
return;
96106
}

0 commit comments

Comments
 (0)