@@ -164,19 +164,65 @@ function crawl(objIn, objOut, schema, list, base, path) {
164164 var valIn = objIn [ k ] ,
165165 valOut = objOut [ k ] ;
166166
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 ;
170171
171172 if ( ! isInSchema ( schema , k ) ) {
172173 list . push ( format ( 'schema' , base , p ) ) ;
173174 }
174175 else if ( isPlainObject ( valIn ) && isPlainObject ( valOut ) ) {
175176 crawl ( valIn , valOut , nestedSchema , list , base , p ) ;
176177 }
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+ }
177224 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 ] ] ,
180226 indexList = [ ] ;
181227
182228 var j , _p ;
0 commit comments