1- 'use strict' ;
2-
3- // external tooling
4- const postcss = require ( 'postcss' ) ;
5- const transform = require ( 'postcss-nesting/lib/transform' ) ;
1+ import postcss from 'postcss' ;
2+ import nesting from 'postcss-nesting' ;
63
74// extend at-rule match
85const extendMatch = / ^ ( e x t e n d ) $ / i;
@@ -11,13 +8,13 @@ const extendMatch = /^(extend)$/i;
118const functionalSelectorMatch = / ( ^ | [ ^ \w - ] ) ( % [ _ a - z A - Z ] + [ _ a - z A - Z 0 - 9 - ] * ) ( [ ^ \w - ] | $ ) / i;
129
1310// plugin
14- module . exports = postcss . plugin ( 'postcss-extend-rule' , ( rawopts ) => {
11+ export default postcss . plugin ( 'postcss-extend-rule' , rawopts => {
1512 // options ( onFunctionalSelector, onRecursiveExtend, onUnusedExtend)
1613 const opts = Object ( rawopts ) ;
1714
1815 return ( root , result ) => {
1916 // for each extend at-rule
20- root . walkAtRules ( extendMatch , ( extendAtRule ) => {
17+ root . walkAtRules ( extendMatch , extendAtRule => {
2118 // do not revisit visited extend at-rules
2219 if ( ! extendAtRule . __extendAtRuleVisited ) {
2320 extendAtRule . __extendAtRuleVisited = true ;
@@ -35,7 +32,7 @@ module.exports = postcss.plugin('postcss-extend-rule', (rawopts) => {
3532
3633 // transform any nesting at-rules
3734 extendingRules . forEach (
38- ( extendingRule ) => {
35+ extendingRule => {
3936 transform ( extendingRule ) ;
4037
4138 extendingRule . walk ( transform ) ;
@@ -67,7 +64,7 @@ module.exports = postcss.plugin('postcss-extend-rule', (rawopts) => {
6764 }
6865 } ) ;
6966
70- root . walkRules ( functionalSelectorMatch , ( functionalRule ) => {
67+ root . walkRules ( functionalSelectorMatch , functionalRule => {
7168 // manage encountered functional selectors
7269 const functionalSelectorMessage = `Encountered functional selector "${ functionalRule . selector } "` ;
7370
@@ -82,17 +79,25 @@ module.exports = postcss.plugin('postcss-extend-rule', (rawopts) => {
8279 } ;
8380} ) ;
8481
82+ function transform ( node ) {
83+ return nesting ( ) ( {
84+ walk ( transformer ) {
85+ return transformer ( node )
86+ }
87+ } ) ;
88+ }
89+
8590function getExtendingRules ( selectorIdMatch , extendAtRule ) {
8691 // extending rules
8792 const extendingRules = [ ] ;
8893
8994 // for each rule found from root of the extend at-rule with a matching selector identifier
90- extendAtRule . root ( ) . walkRules ( selectorIdMatch , ( matchingRule ) => {
95+ extendAtRule . root ( ) . walkRules ( selectorIdMatch , matchingRule => {
9196 // nesting selectors for the selectors matching the selector identifier
9297 const nestingSelectors = matchingRule . selectors . filter (
93- ( selector ) => selectorIdMatch . test ( selector )
98+ selector => selectorIdMatch . test ( selector )
9499 ) . map (
95- ( selector ) => selector . replace ( selectorIdMatch , '$1&$3' )
100+ selector => selector . replace ( selectorIdMatch , '$1&$3' )
96101 ) . join ( ',' ) ;
97102
98103 // matching rule’s cloned nodes
@@ -127,7 +132,7 @@ function getExtendingRules(selectorIdMatch, extendAtRule) {
127132function getSelectorIdMatch ( selectorIds ) {
128133 // escape the contents of the selector id to avoid being parsed as regex
129134 const escapedSelectorIds = postcss . list . comma ( selectorIds ) . map (
130- ( selectorId ) => selectorId . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, '\\$&' )
135+ selectorId => selectorId . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, '\\$&' )
131136 ) . join ( '|' ) ;
132137
133138 // selector unattached to an existing selector
0 commit comments