@@ -109,6 +109,9 @@ function resolveEnd(end, size) {
109
109
function resolveIndex ( index , size , defaultIndex ) {
110
110
return index === undefined ? defaultIndex : index < 0 ? Math . max ( 0 , size + index ) : size === undefined ? index : Math . min ( size , index ) ;
111
111
}
112
+ function isArrayLike ( value ) {
113
+ return value && typeof value . length === 'number' ;
114
+ }
112
115
var imul = typeof Math . imul === 'function' && Math . imul ( 0xffffffff , 2 ) === - 2 ? Math . imul : function imul ( a , b ) {
113
116
a = a | 0 ;
114
117
b = b | 0 ;
@@ -511,15 +514,13 @@ var $Iterable = Iterable;
511
514
} ,
512
515
getIn : function ( searchKeyPath , notSetValue ) {
513
516
var nested = this ;
514
- if ( searchKeyPath ) {
515
- var iter = getIterator ( searchKeyPath ) || getIterator ( $Iterable ( searchKeyPath ) ) ;
516
- var step ;
517
- while ( ! ( step = iter . next ( ) ) . done ) {
518
- var key = step . value ;
519
- nested = nested && nested . get ? nested . get ( key , NOT_SET ) : NOT_SET ;
520
- if ( nested === NOT_SET ) {
521
- return notSetValue ;
522
- }
517
+ var iter = forceIterator ( searchKeyPath ) ;
518
+ var step ;
519
+ while ( ! ( step = iter . next ( ) ) . done ) {
520
+ var key = step . value ;
521
+ nested = nested && nested . get ? nested . get ( key , NOT_SET ) : NOT_SET ;
522
+ if ( nested === NOT_SET ) {
523
+ return notSetValue ;
523
524
}
524
525
}
525
526
return nested ;
@@ -822,6 +823,16 @@ function neg(predicate) {
822
823
return - predicate . apply ( this , arguments ) ;
823
824
} ;
824
825
}
826
+ function forceIterator ( keyPath ) {
827
+ var iter = getIterator ( keyPath ) ;
828
+ if ( ! iter ) {
829
+ if ( ! isArrayLike ( keyPath ) ) {
830
+ throw new TypeError ( 'Expected iterable or array-like: ' + keyPath ) ;
831
+ }
832
+ iter = getIterator ( Iterable ( keyPath ) ) ;
833
+ }
834
+ return iter ;
835
+ }
825
836
function quoteString ( value ) {
826
837
return typeof value === 'string' ? JSON . stringify ( value ) : value ;
827
838
}
@@ -1167,9 +1178,6 @@ function seqFromValue(value) {
1167
1178
function maybeIndexedSeqFromValue ( value ) {
1168
1179
return ( isArrayLike ( value ) ? new ArraySeq ( value ) : isIterator ( value ) ? new IteratorSeq ( value ) : hasIterator ( value ) ? new IterableSeq ( value ) : undefined ) ;
1169
1180
}
1170
- function isArrayLike ( value ) {
1171
- return value && typeof value . length === 'number' ;
1172
- }
1173
1181
function seqIterate ( seq , fn , reverse , useKeys ) {
1174
1182
var cache = seq . _cache ;
1175
1183
if ( cache ) {
@@ -1289,7 +1297,7 @@ var Map = function Map(value) {
1289
1297
updater = notSetValue ;
1290
1298
notSetValue = undefined ;
1291
1299
}
1292
- var updatedValue = updateInDeepMap ( this , getIterator ( keyPath ) || getIterator ( Iterable ( keyPath ) ) , notSetValue , updater ) ;
1300
+ var updatedValue = updateInDeepMap ( this , forceIterator ( keyPath ) , notSetValue , updater ) ;
1293
1301
return updatedValue === NOT_SET ? undefined : updatedValue ;
1294
1302
} ,
1295
1303
clear : function ( ) {
0 commit comments