11const cssResolve = require ( 'style-resolve' ) . sync
22const staticEval = require ( 'static-eval' )
3+ const parse = require ( 'fast-json-parse' )
34const mapLimit = require ( 'map-limit' )
45const through = require ( 'through2' )
56const falafel = require ( 'falafel' )
7+ const findup = require ( 'findup' )
68const xtend = require ( 'xtend' )
79const path = require ( 'path' )
810const fs = require ( 'fs' )
@@ -18,12 +20,10 @@ function transform (filename, options) {
1820
1921 const opts = xtend ( options || {
2022 basedir : process . cwd ( ) ,
21- use : [ ] ,
23+ transform : [ ] ,
2224 out : ''
2325 } )
2426
25- opts . use = [ ] . concat ( opts . use || [ ] ) . concat ( opts . u || [ ] )
26-
2727 const bufs = [ ]
2828 const transformStream = through ( write , end )
2929 return transformStream
@@ -54,19 +54,25 @@ function transform (filename, options) {
5454 return
5555 }
5656
57- try {
58- const tmpAst = falafel ( src , { ecmaVersion : 8 } , identifyModuleName )
59- ast = falafel ( tmpAst . toString ( ) , { ecmaVersion : 8 } , extractNodes )
60- } catch ( err ) {
61- return self . emit ( 'error' , err )
62- }
63-
64- // transform all detected nodes and
65- // close stream when done
66- mapLimit ( nodes , Infinity , iterate , function ( err ) {
57+ findTransforms ( filename , function ( err , transforms ) {
6758 if ( err ) return self . emit ( 'error' , err )
68- self . push ( ast . toString ( ) )
69- self . push ( null )
59+
60+ opts . transform = transforms . concat ( opts . transform || [ ] ) . concat ( opts . t || [ ] )
61+
62+ try {
63+ const tmpAst = falafel ( src , { ecmaVersion : 8 } , identifyModuleName )
64+ ast = falafel ( tmpAst . toString ( ) , { ecmaVersion : 8 } , extractNodes )
65+ } catch ( err ) {
66+ return self . emit ( 'error' , err )
67+ }
68+
69+ // transform all detected nodes and
70+ // close stream when done
71+ mapLimit ( nodes , Infinity , iterate , function ( err ) {
72+ if ( err ) return self . emit ( 'error' , err )
73+ self . push ( ast . toString ( ) )
74+ self . push ( null )
75+ } )
7076 } )
7177
7278 function identifyModuleName ( node ) {
@@ -164,6 +170,27 @@ function transform (filename, options) {
164170 } )
165171 }
166172 }
173+
174+ function findTransforms ( filename , done ) {
175+ findup ( filename , 'package.json' , function ( err , pathname ) {
176+ // no package.json found - just run local transforms
177+ if ( err ) return done ( null , [ ] )
178+
179+ var filename = path . join ( pathname , 'package.json' )
180+ fs . readFile ( filename , function ( err , file ) {
181+ if ( err ) return done ( err )
182+ var parsed = parse ( file )
183+ if ( parsed . err ) return done ( parsed . err )
184+ var json = parsed . value
185+ var d = json . sheetify
186+ if ( ! d ) return done ( null , [ ] )
187+ var t = d . transform
188+ if ( ! t || ! Array . isArray ( t ) ) return done ( null , [ ] )
189+
190+ return done ( null , t )
191+ } )
192+ } )
193+ }
167194}
168195
169196function cooked ( node ) { return node . value . cooked }
0 commit comments