This repository was archived by the owner on Aug 24, 2019. It is now read-only.
File tree Expand file tree Collapse file tree 2 files changed +35
-3
lines changed
Expand file tree Collapse file tree 2 files changed +35
-3
lines changed Original file line number Diff line number Diff line change @@ -3,7 +3,6 @@ import parse from 'h2x-parse'
33import generate from 'h2x-generate'
44import traverse from 'h2x-traverse'
55
6-
76const reduceVisitors = ( visitors , opts ) => {
87 Object . keys ( visitors ) . forEach ( key => {
98 const visitor = visitors [ key ]
@@ -31,9 +30,9 @@ const mergePlugins = plugins =>
3130
3231export { traverse , generate }
3332
34- export function transform ( code , { plugins = [ ] } = { } ) {
33+ export function transform ( code , { plugins = [ ] , state = { } } = { } ) {
3534 const ast = parse ( code )
3635 const { visitor, generator } = mergePlugins ( plugins )
37- traverse ( ast , visitor )
36+ traverse ( ast , visitor , state )
3837 return generate ( ast , generator )
3938}
Original file line number Diff line number Diff line change @@ -31,4 +31,37 @@ describe('transform', () => {
3131 const result = transform ( code , { plugins : [ simpleJsx ] } )
3232 expect ( result ) . toBe ( `<div />\n` )
3333 } )
34+
35+ it ( 'should support state' , ( ) => {
36+ class JSXNode {
37+ static [ NODE_TYPE ] = 'JSXElement'
38+
39+ constructor ( name ) {
40+ this . name = name
41+ }
42+ }
43+
44+ const simpleJsx = ( ) => ( {
45+ visitor : {
46+ HTMLElement : {
47+ enter ( path , state ) {
48+ state . tags . push ( path . node . tagName )
49+ path . replace ( new JSXNode ( 'div' ) )
50+ } ,
51+ } ,
52+ } ,
53+ generator : {
54+ JSXElement : {
55+ enter ( path , generator ) {
56+ generator . writeLine ( `<${ path . node . name } />` )
57+ } ,
58+ } ,
59+ } ,
60+ } )
61+ const state = { tags : [ ] }
62+ const code = `<div></div>`
63+ const result = transform ( code , { plugins : [ simpleJsx ] , state } )
64+ expect ( result ) . toBe ( `<div />\n` )
65+ expect ( state . tags ) . toEqual ( [ 'DIV' ] )
66+ } )
3467} )
You can’t perform that action at this time.
0 commit comments