1- const postcss = require ( 'postcss' ) ;
21const valueParser = require ( 'postcss-value-parser' ) ;
32
43const path = require ( 'path' ) ;
@@ -8,60 +7,71 @@ const sort = require('fast-sort');
87const SORTERS = [ 'asc' , 'desc' ] ;
98const DEFAULT_SORTER = 'asc' ;
109
11- module . exports = postcss . plugin ( 'postcss-import-ext-glob' , ( opts = { } ) => {
12- const sorter = SORTERS . indexOf ( opts . sort ) > - 1
13- ? opts . sort
14- : DEFAULT_SORTER ;
10+ module . exports = ( opts = { } ) => {
11+ const sorter = SORTERS . indexOf ( opts . sort ) !== - 1 ? opts . sort : DEFAULT_SORTER ;
1512
16- return ( root , result ) => {
17- const promisesList = [ ] ;
13+ return {
14+ postcssPlugin : 'postcss-import-ext-glob' ,
15+ Once ( root , { AtRule, result } ) {
16+ const promisesList = [ ] ;
1817
19- root . walkAtRules ( 'import-glob' , rule => {
20- promisesList . push ( new Promise ( resolve => {
21- const globList = [ ] ;
22- const params = valueParser ( rule . params ) . nodes ;
18+ root . walkAtRules ( 'import-glob' , ( rule ) => {
19+ promisesList . push (
20+ new Promise ( ( resolve ) => {
21+ const globList = [ ] ;
2322
24- const dirname = typeof rule . source . input . file === 'string'
25- ? path . dirname ( rule . source . input . file )
26- : __dirname ;
23+ const params = valueParser ( rule . params ) . nodes ;
2724
28- for ( const param of params ) {
29- if ( param . type === 'string' ) {
30- globList . push ( path . join ( dirname , param . value ) ) ;
31- }
32- }
25+ const dirName =
26+ typeof rule . source . input . file === 'string'
27+ ? path . dirname ( rule . source . input . file )
28+ : __dirname ;
3329
34- if ( globList . length ) {
35- fg ( globList )
36- . then ( entries => {
37- if ( ! entries . length ) {
38- result . warn (
39- `No file found for @import-glob ${ rule . params } ` ,
40- { node : rule }
41- ) ;
30+ for ( const param of params ) {
31+ if ( param . type === 'string' ) {
32+ globList . push ( path . join ( dirName , param . value ) ) ;
4233 }
34+ }
4335
44- const sortedEntries = sort ( entries ) [ sorter ] ( ) ;
36+ if ( globList . length ) {
37+ fg ( globList ) . then ( ( entries ) => {
38+ if ( ! entries . length ) {
39+ result . warn ( `No file found for @import-glob ${ rule . params } ` , {
40+ node : rule ,
41+ } ) ;
42+ }
4543
46- for ( const entry of sortedEntries ) {
47- root . insertBefore ( rule , {
48- name : 'import' ,
49- params : `"${ entry } "` ,
50- source : rule . source
44+ const sortedEntries = sort ( entries ) [ sorter ] ( ) ;
45+
46+ sortedEntries . forEach ( ( entry ) => {
47+ rule . before (
48+ new AtRule ( {
49+ name : 'import' ,
50+ params : `"${ entry } "` ,
51+ source : rule . source ,
52+ } )
53+ ) ;
5154 } ) ;
52- }
53- rule . remove ( ) ;
54- resolve ( ) ;
55- } ) ;
56- } else {
57- throw rule . error (
58- `No string found with rule @import-glob ${ rule . params } ` ,
59- { plugin : 'postcss-import-ext-glob' }
60- ) ;
61- }
62- } ) ) ;
63- } ) ;
6455
65- return Promise . all ( promisesList ) ;
56+ rule . remove ( ) ;
57+
58+ resolve ( ) ;
59+ } ) ;
60+ } else {
61+ throw rule . error (
62+ `No string found with rule @import-glob ${ rule . params } ` ,
63+ {
64+ word : rule . params ,
65+ }
66+ ) ;
67+ }
68+ } )
69+ ) ;
70+ } ) ;
71+
72+ return Promise . all ( promisesList ) ;
73+ } ,
6674 } ;
67- } ) ;
75+ } ;
76+
77+ module . exports . postcss = true ;
0 commit comments