@@ -164,19 +164,65 @@ function crawl(objIn, objOut, schema, list, base, path) {
164
164
var valIn = objIn [ k ] ,
165
165
valOut = objOut [ k ] ;
166
166
167
- var nestedSchema = getNestedSchema ( schema , k ) ,
168
- isInfoArray = ( nestedSchema || { } ) . valType === 'info_array' ,
169
- isColorscale = ( nestedSchema || { } ) . valType === 'colorscale' ;
167
+ var nestedSchema = getNestedSchema ( schema , k ) ;
168
+ var isInfoArray = ( nestedSchema || { } ) . valType === 'info_array' ;
169
+ var isColorscale = ( nestedSchema || { } ) . valType === 'colorscale' ;
170
+ var items = ( nestedSchema || { } ) . items ;
170
171
171
172
if ( ! isInSchema ( schema , k ) ) {
172
173
list . push ( format ( 'schema' , base , p ) ) ;
173
174
}
174
175
else if ( isPlainObject ( valIn ) && isPlainObject ( valOut ) ) {
175
176
crawl ( valIn , valOut , nestedSchema , list , base , p ) ;
176
177
}
178
+ else if ( isInfoArray && isArray ( valIn ) ) {
179
+ if ( valIn . length > valOut . length ) {
180
+ list . push ( format ( 'unused' , base , p . concat ( valOut . length ) ) ) ;
181
+ }
182
+ var len = valOut . length ;
183
+ var arrayItems = Array . isArray ( items ) ;
184
+ if ( arrayItems ) len = Math . min ( len , items . length ) ;
185
+ var m , n , item , valInPart , valOutPart ;
186
+ if ( nestedSchema . dimensions === 2 ) {
187
+ for ( n = 0 ; n < len ; n ++ ) {
188
+ if ( isArray ( valIn [ n ] ) ) {
189
+ if ( valIn [ n ] . length > valOut [ n ] . length ) {
190
+ list . push ( format ( 'unused' , base , p . concat ( n , valOut [ n ] . length ) ) ) ;
191
+ }
192
+ var len2 = valOut [ n ] . length ;
193
+ for ( m = 0 ; m < ( arrayItems ? Math . min ( len2 , items [ n ] . length ) : len2 ) ; m ++ ) {
194
+ item = arrayItems ? items [ n ] [ m ] : items ;
195
+ valInPart = valIn [ n ] [ m ] ;
196
+ valOutPart = valOut [ n ] [ m ] ;
197
+ if ( ! Lib . validate ( valInPart , item ) ) {
198
+ list . push ( format ( 'value' , base , p . concat ( n , m ) , valInPart ) ) ;
199
+ }
200
+ else if ( valOutPart !== valInPart && valOutPart !== + valInPart ) {
201
+ list . push ( format ( 'dynamic' , base , p . concat ( n , m ) , valInPart , valOutPart ) ) ;
202
+ }
203
+ }
204
+ }
205
+ else {
206
+ list . push ( format ( 'array' , base , p . concat ( n ) , valIn [ n ] ) ) ;
207
+ }
208
+ }
209
+ }
210
+ else {
211
+ for ( n = 0 ; n < len ; n ++ ) {
212
+ item = arrayItems ? items [ n ] : items ;
213
+ valInPart = valIn [ n ] ;
214
+ valOutPart = valOut [ n ] ;
215
+ if ( ! Lib . validate ( valInPart , item ) ) {
216
+ list . push ( format ( 'value' , base , p . concat ( n ) , valInPart ) ) ;
217
+ }
218
+ else if ( valOutPart !== valInPart && valOutPart !== + valInPart ) {
219
+ list . push ( format ( 'dynamic' , base , p . concat ( n ) , valInPart , valOutPart ) ) ;
220
+ }
221
+ }
222
+ }
223
+ }
177
224
else if ( nestedSchema . items && ! isInfoArray && isArray ( valIn ) ) {
178
- var items = nestedSchema . items ,
179
- _nestedSchema = items [ Object . keys ( items ) [ 0 ] ] ,
225
+ var _nestedSchema = items [ Object . keys ( items ) [ 0 ] ] ,
180
226
indexList = [ ] ;
181
227
182
228
var j , _p ;
0 commit comments