@@ -15,6 +15,9 @@ const readFile = filepath =>
1515 } ) ;
1616 } ) ;
1717
18+ const getTokens = result =>
19+ result . messages . find ( d => d . type === "icss" ) . exportTokens ;
20+
1821const defaultFetch = ( importee , importerDir , processor ) => {
1922 const ext = path . extname ( importee ) ;
2023 if ( ext !== ".css" ) {
@@ -25,7 +28,21 @@ const defaultFetch = (importee, importerDir, processor) => {
2528 const from = path . resolve ( importerDir , importee ) ;
2629 return readFile ( from )
2730 . then ( content => processor . process ( content , { from } ) )
28- . then ( result => result . messages . find ( d => d . type === "icss" ) . exportTokens ) ;
31+ . then ( result =>
32+ Object . assign ( { } , getTokens ( result ) , { default : result . css } )
33+ ) ;
34+ } ;
35+
36+ const importParamsPattern = / ^ ( \w + ) ( .+ ) ? / ;
37+
38+ const importToken = ( params , tokens ) => {
39+ const matches = importParamsPattern . exec ( params ) ;
40+ if ( matches ) {
41+ const content = tokens [ matches [ 1 ] ] ;
42+ const media = matches [ 2 ] ;
43+ return media ? `@media ${ media . trim ( ) } {\n${ content } \n}` : content ;
44+ }
45+ return "" ;
2946} ;
3047
3148module . exports = postcss . plugin ( "postcss-icss" , ( options = { } ) => (
@@ -44,15 +61,24 @@ module.exports = postcss.plugin("postcss-icss", (options = {}) => (
4461 return fetch ( importee , importerDir , result . processor ) . then ( exportTokens => {
4562 const importTokens = icssImports [ key ] ;
4663 return Object . keys ( importTokens ) . reduce ( ( acc , token ) => {
47- acc [ token ] = exportTokens [ importTokens [ token ] ] ;
64+ if ( token === "import" ) {
65+ acc [ token ] = importToken ( importTokens [ token ] , exportTokens ) ;
66+ } else {
67+ acc [ token ] = exportTokens [ importTokens [ token ] ] ;
68+ }
4869 return acc ;
4970 } , { } ) ;
5071 } ) ;
5172 } ) ;
5273
5374 return Promise . all ( promises ) . then ( results => {
75+ const imports = results
76+ . map ( result => result . import )
77+ . filter ( content => Boolean ( content ) )
78+ . join ( "\n" ) ;
5479 const replacements = Object . assign ( { } , ...results ) ;
5580 replaceSymbols ( css , replacements ) ;
81+ css . prepend ( imports ) ;
5682
5783 Object . keys ( icssExports ) . forEach ( key => {
5884 icssExports [ key ] = replaceValueSymbols ( icssExports [ key ] , replacements ) ;
0 commit comments