1
1
if ( typeof require !== 'undefined' ) {
2
- module . exports = PhpjsUtil ;
2
+ module . exports = function phpjsutil ( config ) {
3
+ var self = new PhpjsUtil ( config ) ;
4
+ return self ;
5
+ } ;
3
6
}
4
- function PhpjsUtil ( ) {
7
+
8
+ function PhpjsUtil ( config ) {
9
+ for ( var k in config ) {
10
+ this [ k ] = config [ k ] ;
11
+ }
5
12
}
6
13
7
- PhpjsUtil . _commentBlocks = function ( code ) {
8
- var cnt = 0 ;
9
- var comment = [ ] ;
14
+ PhpjsUtil . prototype . _commentBlocks = function ( code ) {
15
+ var cnt = 0 ;
16
+ var comment = [ ] ;
10
17
var commentBlocks = [ ] ;
11
- var i = 0 ;
12
- var lines = [ ] ;
13
- var raise = false ;
18
+ var i = 0 ;
19
+ var lines = [ ] ;
20
+ var raise = false ;
14
21
for ( i in ( lines = code . replace ( '\r' , '' ) . split ( '\n' ) ) ) {
15
22
// Detect if line is a comment, and return the actual comment
16
23
if ( ( comment = lines [ i ] . match ( / ^ \s * ( \/ \/ | \/ \* | \* ) \s * ( .* ) $ / ) ) ) {
17
24
if ( raise === true ) {
18
- cnt = commentBlocks . length ;
25
+ cnt = commentBlocks . length ;
19
26
raise = false ;
20
27
}
21
28
if ( ! commentBlocks [ cnt ] ) {
@@ -32,14 +39,15 @@ PhpjsUtil._commentBlocks = function(code) {
32
39
return commentBlocks ;
33
40
} ;
34
41
35
- PhpjsUtil . _headKeys = function ( headLines ) {
42
+ PhpjsUtil . prototype . _headKeys = function ( headLines ) {
36
43
var i ;
37
- var keys = { } ;
38
- var match = [ ] ;
44
+ var keys = { } ;
45
+ var match = [ ] ;
39
46
var dmatch = [ ] ;
40
- var key = '' ;
41
- var val = '' ;
42
- var num = 0 ;
47
+ var key = '' ;
48
+ var val = '' ;
49
+ var num = 0 ;
50
+
43
51
for ( i in headLines ) {
44
52
if ( ! ( match = headLines [ i ] . match ( / ^ [ \s \W ] * ( .* ?) \s * : \s * ( .* ) \s * $ / ) ) ) {
45
53
continue ;
@@ -70,70 +78,92 @@ PhpjsUtil._headKeys = function(headLines) {
70
78
return keys ;
71
79
} ;
72
80
73
- PhpjsUtil . _loadDependencies = function ( headKeys , dependencies , cb ) {
74
- var self = this ;
81
+ PhpjsUtil . prototype . contains = function ( array , value ) {
82
+ var i = array . length ;
83
+ while ( i -- ) {
84
+ if ( array [ i ] === value ) {
85
+ return true ;
86
+ }
87
+ }
88
+ return false ;
89
+ } ;
90
+
91
+ PhpjsUtil . prototype . _loadDependencies = function ( name , headKeys , dependencies , cb ) {
92
+ var self = this ;
93
+ var functions = headKeys [ 'depends on' ] || [ ] ;
94
+
95
+ var j ;
96
+ for ( j in self . injectDependencies ) {
97
+ var injectFunction = self . injectDependencies [ j ] ;
98
+ if ( self . contains ( self . injectDependencies , name ) ) {
99
+ continue ;
100
+ }
101
+
102
+ // console.log({injectFunction: injectFunction});
103
+ functions . push ( injectFunction ) ;
104
+ }
75
105
76
- if ( ! headKeys [ 'depends on' ] || ! headKeys [ 'depends on' ] . length ) {
106
+ if ( ! functions || ! functions . length ) {
77
107
if ( cb ) {
78
108
cb ( null , { } ) ;
79
109
}
80
110
}
81
111
112
+ // console.log({functions: functions, headKeys: headKeys, dependencies: dependencies});
82
113
var i ;
83
114
var name ;
84
115
var loaded = 0 ;
85
- for ( i in headKeys [ 'depends on' ] ) {
86
- name = headKeys [ 'depends on' ] [ i ] ;
116
+ for ( i in functions ) {
117
+ name = functions [ i ] ;
87
118
88
119
self . load ( name , function ( err , params ) {
89
120
if ( err ) {
90
121
return cb ( err ) ;
91
122
}
92
123
93
124
dependencies [ name ] = params ;
94
- self . _loadDependencies ( params . headKeys , dependencies ) ;
125
+ self . _loadDependencies ( name , params . headKeys , dependencies ) ;
95
126
96
127
loaded ++ ;
97
-
98
- if ( cb && loaded === headKeys [ 'depends on' ] . length ) {
128
+ if ( cb && loaded === functions . length ) {
99
129
cb ( null , dependencies ) ;
100
130
}
101
131
} ) ;
102
132
}
103
133
} ;
104
134
105
- PhpjsUtil . parse = function ( name , code , cb ) {
135
+ PhpjsUtil . prototype . parse = function ( name , code , cb ) {
106
136
var commentBlocks = this . _commentBlocks ( code ) ;
107
- var head = commentBlocks [ 0 ] . raw . join ( '\n' ) ;
108
- var body = code . replace ( head , '' ) ;
109
-
110
- var headKeys = this . _headKeys ( commentBlocks [ 0 ] . clean ) ;
137
+ var head = commentBlocks [ 0 ] . raw . join ( '\n' ) ;
138
+ var body = code . replace ( head , '' ) ;
139
+ var headKeys = this . _headKeys ( commentBlocks [ 0 ] . clean ) ;
111
140
112
141
// @todo (kvz) If we add function signature, we can use
113
142
// body to generate CommonJs compatible output
114
143
// in the browser.
115
144
116
- this . _loadDependencies ( headKeys , { } , function ( err , dependencies ) {
145
+ this . _loadDependencies ( name , headKeys , { } , function ( err , dependencies ) {
117
146
if ( err ) {
118
147
return cb ( err ) ;
119
148
}
149
+
120
150
cb ( null , {
121
- headKeys : headKeys ,
122
- body : body ,
123
- head : head ,
124
- name : name ,
125
- code : code ,
126
- dependencies : dependencies ,
151
+ headKeys : headKeys ,
152
+ body : body ,
153
+ head : head ,
154
+ name : name ,
155
+ code : code ,
156
+ dependencies : dependencies ,
127
157
commentBlocks : commentBlocks
128
158
} ) ;
129
159
} ) ;
130
160
} ;
131
161
132
- PhpjsUtil . opener = function ( name , cb ) {
162
+ PhpjsUtil . prototype . opener = function ( name , cb ) {
133
163
return cb ( 'Please override with a method that can translate a function-name to code in your environment' ) ;
134
164
} ;
135
165
136
- PhpjsUtil . load = function ( name , cb ) {
166
+ PhpjsUtil . prototype . load = function ( name , cb ) {
137
167
var self = this ;
138
168
self . opener ( name , function ( err , code ) {
139
169
if ( err ) {
@@ -150,10 +180,10 @@ PhpjsUtil.load = function(name, cb) {
150
180
} ) ;
151
181
} ;
152
182
153
- PhpjsUtil . test = function ( params , cb ) {
154
- var i = 0 ;
155
- var j = 0 ;
156
- var d = 0 ;
183
+ PhpjsUtil . prototype . test = function ( params , cb ) {
184
+ var i = 0 ;
185
+ var j = 0 ;
186
+ var d = 0 ;
157
187
var self = this ;
158
188
159
189
@@ -164,11 +194,12 @@ PhpjsUtil.test = function(params, cb) {
164
194
for ( d in params [ 'dependencies' ] ) {
165
195
codes . push ( params [ 'dependencies' ] [ d ] [ 'code' ] ) ;
166
196
}
197
+ console . log ( { codes : codes } ) ;
167
198
168
199
// Reverse stack so dependencies are loaded first
169
200
codes = codes . reverse ( ) ;
170
201
171
- // console.log(codes );
202
+ // console.log({params: params} );
172
203
173
204
// Load code
174
205
eval ( codes . join ( '\n' ) ) ;
@@ -178,9 +209,14 @@ PhpjsUtil.test = function(params, cb) {
178
209
for ( i in params [ 'headKeys' ] [ 'example' ] ) {
179
210
var test = {
180
211
example : params [ 'headKeys' ] [ 'example' ] [ i ] . join ( '\n' ) ,
181
- number : i
212
+ number : i
182
213
} ;
183
214
215
+ if ( ! params [ 'headKeys' ] [ 'returns' ] [ i ] || ! params [ 'headKeys' ] [ 'returns' ] [ i ] . length ) {
216
+ cb ( 'There is no return for example ' + i , test , params ) ;
217
+ continue ;
218
+ }
219
+
184
220
// Needs an eval so types are cast properly, also, expected may
185
221
// contain code
186
222
eval ( 'test.expected = ' + params [ 'headKeys' ] [ 'returns' ] [ i ] . join ( '\n' ) + '' ) ;
@@ -190,13 +226,17 @@ PhpjsUtil.test = function(params, cb) {
190
226
eval ( 'test.result = ' + params [ 'headKeys' ] [ 'example' ] [ i ] [ j ] + '' ) ;
191
227
}
192
228
193
- if ( test . expected !== test . result ) {
194
- var err = 'Expected: ' + JSON . stringify ( test . expected , undefined , 2 ) +
195
- ' but returned: ' + JSON . stringify ( test . result , undefined , 2 ) ;
229
+ var jsonExpected = JSON . stringify ( test . expected , undefined , 2 ) ;
230
+ var jsonResult = JSON . stringify ( test . result , undefined , 2 ) ;
231
+
232
+ if ( jsonExpected !== jsonResult ) {
233
+ var err = 'Expected: ' + jsonExpected +
234
+ ' but returned: ' + jsonResult ;
196
235
cb ( err , test , params ) ;
197
- } else {
198
- cb ( null , test , params ) ;
236
+ continue ;
199
237
}
238
+
239
+ cb ( null , test , params ) ;
240
+ continue ;
200
241
}
201
242
} ;
202
-
0 commit comments