Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit 703399e

Browse files
committed
Add support for PostCSS 8
1 parent 5946651 commit 703399e

File tree

3 files changed

+35
-27
lines changed

3 files changed

+35
-27
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ From the [proposal]:
3535
Add [PostCSS Enter Pseudo Class] to your project:
3636

3737
```bash
38-
npm install postcss-pseudo-class-enter --save-dev
38+
npm install postcss postcss-pseudo-class-enter --save-dev
3939
```
4040

4141
Use [PostCSS Enter Pseudo Class] to process your CSS:
4242

4343
```js
44-
const postcssPseudoClassEnter = require('postcss-pseudo-class-enter');
44+
const { default: postcssPseudoClassEnter } = require('postcss-pseudo-class-enter');
4545

4646
postcssPseudoClassEnter.process(YOUR_CSS /*, processOptions, pluginOptions */);
4747
```

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,23 @@
2626
"node": ">=6.0.0"
2727
},
2828
"dependencies": {
29-
"postcss": "^7.0.14",
30-
"postcss-selector-parser": "^5.0.0"
29+
"postcss-selector-parser": "^6.0.4"
3130
},
3231
"devDependencies": {
3332
"@babel/core": "^7.2.2",
3433
"@babel/preset-env": "^7.3.1",
3534
"babel-eslint": "^10.0.1",
3635
"eslint": "^5.12.1",
3736
"eslint-config-dev": "^2.0.0",
38-
"postcss-tape": "^4.0.0",
37+
"postcss": "^8.1.2",
38+
"postcss-tape": "^6.0.0",
3939
"pre-commit": "^1.2.2",
4040
"rollup": "^1.1.2",
4141
"rollup-plugin-babel": "^4.3.2"
4242
},
43+
"peerDependencies": {
44+
"postcss": "^8.1.2"
45+
},
4346
"eslintConfig": {
4447
"extends": "dev",
4548
"parser": "babel-eslint"

src/index.js

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,46 @@
1-
import postcss from 'postcss';
21
import parser from 'postcss-selector-parser';
32

4-
export default postcss.plugin('postcss-pseudo-class-enter', opts => {
3+
const plugin = opts => {
54
// add conditional prefix
65
const pseudoClass = `:${Object(opts).prefix ? `-${opts.prefix}-` : ''}enter`;
76
const pseudoClassRegExp = new RegExp(pseudoClass, 'i');
87

98
// add outline declaration
109
const shouldUseOutline = Object(opts).outline !== null && Object(opts).outline !== undefined;
1110

12-
return root => {
13-
// transform :enter selectors to :focus and :hover
14-
root.walkRules(pseudoClassRegExp, rule => {
15-
const originalSelector = rule.selector;
11+
return {
12+
postcssPlugin: 'postcss-pseudo-class-enter',
13+
Once: root => {
14+
// transform :enter selectors to :focus and :hover
15+
root.walkRules(pseudoClassRegExp, rule => {
16+
const originalSelector = rule.selector;
1617

17-
const modifiedSelector = parser(selectors => {
18-
transform(selectors, pseudoClass);
19-
}).processSync(originalSelector);
18+
const modifiedSelector = parser(selectors => {
19+
transform(selectors, pseudoClass);
20+
}).processSync(originalSelector);
2021

21-
if (originalSelector !== modifiedSelector) {
22-
rule.selector = modifiedSelector;
23-
}
22+
if (originalSelector !== modifiedSelector) {
23+
rule.selector = modifiedSelector;
24+
}
2425

25-
if (shouldUseOutline) {
26-
// check for an existing outline declaration
27-
const hasOutline = rule.nodes.some(decl => decl.prop === 'outline');
26+
if (shouldUseOutline) {
27+
// check for an existing outline declaration
28+
const hasOutline = rule.nodes.some(decl => decl.prop === 'outline');
2829

29-
// if an outline declaration does not exist, prepend it
30-
if (!hasOutline) {
31-
const outlineValue = !opts.outline || opts.outline === true ? 0 : opts.outline;
30+
// if an outline declaration does not exist, prepend it
31+
if (!hasOutline) {
32+
const outlineValue = !opts.outline || opts.outline === true ? 0 : opts.outline;
3233

33-
rule.prepend({ prop: 'outline', value: outlineValue });
34+
rule.prepend({ prop: 'outline', value: outlineValue });
35+
}
3436
}
35-
}
36-
});
37+
});
38+
}
3739
};
38-
});
40+
}
41+
plugin.postcss = true;
42+
43+
export default plugin;
3944

4045
function transform(selectors, pseudoClass) {
4146
selectors.walk(selector => {

0 commit comments

Comments
 (0)