@@ -4,43 +4,44 @@ const declWhitelist = ['extends'],
44 declFilter = new RegExp ( `^(${ declWhitelist . join ( '|' ) } )$` ) ,
55 matchImports = / ^ ( [ \w \s ] + ?) \s + f r o m \s + (?: " ( [ ^ " ] + ) " | ' ( [ ^ ' ] + ) ' ) $ / ;
66
7- const processor = ( css ) => {
8- let imports = { } ;
7+ const processor = postcss . plugin ( 'modules-extract-imports' , function ( options ) {
8+ return ( css ) => {
9+ let imports = { } ;
10+ let importIndex = 0 ;
11+ let createImportedName = options && options . createImportedName || ( ( importName /*, path*/ ) => `__imported_${ importName } _${ importIndex ++ } ` ) ;
912
10- // Find any declaration that supports imports
11- css . eachDecl ( declFilter , ( decl ) => {
12- let matches = decl . value . match ( matchImports ) ;
13- if ( matches ) {
14- let [ /*match*/ , symbols , doubleQuotePath , singleQuotePath ] = matches ;
15- let path = doubleQuotePath || singleQuotePath ;
16- imports [ path ] = imports [ path ] || { } ;
17- let tmpSymbols = symbols . split ( / \s + / )
18- . map ( s => {
19- if ( ! imports [ path ] [ s ] ) {
20- imports [ path ] [ s ] = `__tmp_ ${ s } _ ${ processor . getRandomStr ( ) } ` ;
21- }
22- return imports [ path ] [ s ] ;
23- } ) ;
24- decl . value = tmpSymbols . join ( ' ' ) ;
25- }
26- } ) ;
13+ // Find any declaration that supports imports
14+ css . eachDecl ( declFilter , ( decl ) => {
15+ let matches = decl . value . match ( matchImports ) ;
16+ if ( matches ) {
17+ let [ /*match*/ , symbols , doubleQuotePath , singleQuotePath ] = matches ;
18+ let path = doubleQuotePath || singleQuotePath ;
19+ imports [ path ] = imports [ path ] || { } ;
20+ let tmpSymbols = symbols . split ( / \s + / )
21+ . map ( s => {
22+ if ( ! imports [ path ] [ s ] ) {
23+ imports [ path ] [ s ] = createImportedName ( s , path ) ;
24+ }
25+ return imports [ path ] [ s ] ;
26+ } ) ;
27+ decl . value = tmpSymbols . join ( ' ' ) ;
28+ }
29+ } ) ;
2730
28- // If we've found any imports, insert :import rules
29- Object . keys ( imports ) . reverse ( ) . forEach ( path => {
30- let pathImports = imports [ path ] ;
31- css . prepend ( postcss . rule ( {
32- selector : `:import("${ path } ")` ,
33- after : "\n" ,
34- nodes : Object . keys ( pathImports ) . map ( importedSymbol => postcss . decl ( {
35- prop : importedSymbol ,
36- value : pathImports [ importedSymbol ] ,
37- before : "\n "
38- } ) )
39- } ) ) ;
40- } ) ;
41- } ;
42-
43- processor . defaultRandomStr = ( ) => Math . random ( ) . toString ( 36 ) . substr ( 2 , 8 ) ;
44- processor . getRandomStr = processor . defaultRandomStr ; // Easy to be mocked out
31+ // If we've found any imports, insert :import rules
32+ Object . keys ( imports ) . reverse ( ) . forEach ( path => {
33+ let pathImports = imports [ path ] ;
34+ css . prepend ( postcss . rule ( {
35+ selector : `:import("${ path } ")` ,
36+ after : "\n" ,
37+ nodes : Object . keys ( pathImports ) . map ( importedSymbol => postcss . decl ( {
38+ prop : importedSymbol ,
39+ value : pathImports [ importedSymbol ] ,
40+ before : "\n "
41+ } ) )
42+ } ) ) ;
43+ } ) ;
44+ } ;
45+ } ) ;
4546
4647export default processor ;
0 commit comments