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