@@ -16,8 +16,7 @@ var tplAnnotations = /\/\*+\s*@jsx\-tpl\s+([\w\-]+)\s*\*\//g,
1616function convert ( js , html , callback ) {
1717 parseHtml ( html , function ( err , body ) {
1818 if ( err ) {
19- callback ( err ) ;
20- return ;
19+ return callback ( err ) ;
2120 }
2221
2322 var templates = { } ;
@@ -35,7 +34,7 @@ function convert(js, html, callback) {
3534 domUtils . removeElement ( node ) ;
3635 } ) ;
3736
38- var _return = search ( renderReturnSelector , js ) [ 0 ] ,
37+ var _return = search ( renderReturnSelector , js ) ,
3938 _props = search ( renderReturnSelector + ' > obj > prop' , js ) ,
4039 props = { } ;
4140
@@ -51,14 +50,33 @@ function convert(js, html, callback) {
5150 props [ name ] = value ;
5251 } ) ;
5352
54- var template = clearAttrQuotes ( domUtils . getOuterHTML ( body ) )
55- . replace ( renderAnnotations , function ( x , name ) {
56- return props [ name ] ;
57- } ) ;
53+ var template = clearAttrQuotes ( domUtils . getOuterHTML ( body ) ) ;
54+
55+ try {
56+ template = template
57+ . replace ( renderAnnotations , function ( x , name ) {
58+ if ( ! props . hasOwnProperty ( name ) ) {
59+ throw new Error ( 'Template "' + name + '" not exists' ) ;
60+ }
61+ return props [ name ] ;
62+ } )
63+ ;
64+ }
65+ catch ( e ) {
66+ return callback ( e ) ;
67+ }
5868
59- js = insert ( js , _return . start , _return . end , format ( 'return (%s);' , template ) ) ;
69+ if ( _return . length === 0 ) {
70+ return callback ( new Error ( 'React.createClass return: option not found' ) ) ;
71+ }
72+ else if ( _return . length > 2 ) {
73+ return callback ( new Error ( 'More then one React.createClass return: option' ) ) ;
74+ }
75+ else {
76+ js = insert ( js , _return . start , _return . end , format ( 'return (%s);' , template ) ) ;
77+ }
6078
61- callback ( js ) ;
79+ return callback ( err , js ) ;
6280 } ) ;
6381}
6482
0 commit comments