1
1
// Babel plugin to transform class names into cssobj localized
2
2
3
+ // imports
3
4
var util = require ( 'util' )
4
5
var converter = require ( 'cssobj-converter' )
5
6
var yaml = require ( 'js-yaml' )
7
+ var objutil = require ( 'objutil' )
8
+ var syntaxJsx = require ( 'babel-plugin-syntax-jsx' )
9
+
10
+ // constants
6
11
var templateDelimiter = '_cssobj_template_delimiter_'
7
12
8
- function transformObjecctToFunction ( babel , code ) {
13
+ // helpers
14
+ function transformObjecctToFunction ( babel , code , option ) {
9
15
var result = babel . transform ( '!' + code , {
10
- plugins : [ './transform-plugins' ]
16
+ plugins : [ [ './transform-plugins' , option ] ]
11
17
} )
12
18
// console.log(result.code)
13
19
// result.ast.program have: .cssobjConfig, .cssobjImports
@@ -17,15 +23,17 @@ function transformObjecctToFunction (babel, code) {
17
23
module . exports = function ( babel ) {
18
24
var t = babel . types
19
25
return {
20
- inherits : require ( 'babel-plugin-syntax-jsx' ) ,
26
+ inherits : syntaxJsx ,
21
27
visitor : {
22
- Program ( path ) {
23
- // console.log(util.inspect(path, {showHidden: false, depth: 5}))
24
- } ,
25
28
TaggedTemplateExpression ( path , state ) {
26
29
var root = path . hub . file
27
30
var source = root . code
28
- var cssobjName = state . cssobjName || ( state . opts && state . opts . cssobjName )
31
+ var option = state . opts // babel5: state===opts
32
+ option = objutil . defaults ( option , {
33
+ names : {
34
+ cssobj : { name : 'cssobj' , path : 'cssobj' }
35
+ }
36
+ } )
29
37
var node = path . node
30
38
// console.log(node)
31
39
var yamlRe = / \n \s * - - - \s * \n /
@@ -61,7 +69,7 @@ module.exports = function (babel) {
61
69
return v + exps . shift ( )
62
70
} )
63
71
. join ( '' )
64
- cssobjConfigNode = transformObjecctToFunction ( babel , cssobjConfig )
72
+ cssobjConfigNode = transformObjecctToFunction ( babel , cssobjConfig , option )
65
73
root . path . unshiftContainer ( 'body' , cssobjConfigNode . ast . program . cssobjImports )
66
74
config = cssobjConfigNode . code . substr ( 1 ) . replace ( / ; + $ / , '' )
67
75
}
@@ -80,12 +88,14 @@ module.exports = function (babel) {
80
88
. join ( '' )
81
89
// got css object
82
90
// console.log(objStr)
91
+ var cssobjNS = option . names [ 'cssobj' ]
92
+ var cssobjName = cssobjNS . name || 'cssobj'
83
93
root . path . unshiftContainer ( 'body' , t . importDeclaration (
84
- [ t . importDefaultSpecifier ( t . identifier ( 'cssobj' ) ) ] ,
85
- t . stringLiteral ( 'cssobj' )
94
+ [ t . importDefaultSpecifier ( t . identifier ( cssobjName ) ) ] ,
95
+ t . stringLiteral ( cssobjNS . path || 'cssobj' )
86
96
) )
87
97
88
- path . replaceWithSourceString ( `cssobj (${ config } , ${ objStr } )` )
98
+ path . replaceWithSourceString ( `${ cssobjName } (${ config } , ${ objStr } )` )
89
99
}
90
100
} ,
91
101
CallExpression ( path , state ) {
0 commit comments