@@ -1141,6 +1141,31 @@ function seqIterator(seq, type, reverse, useKeys) {
1141
1141
}
1142
1142
return seq . __iteratorUncached ( type , reverse ) ;
1143
1143
}
1144
+ function fromJS ( json , converter ) {
1145
+ if ( converter ) {
1146
+ return _fromJSWith ( converter , json , '' , { '' : json } ) ;
1147
+ }
1148
+ return _fromJSDefault ( json ) ;
1149
+ }
1150
+ function _fromJSWith ( converter , json , key , parentJSON ) {
1151
+ if ( Array . isArray ( json ) || isPlainObj ( json ) ) {
1152
+ return converter . call ( parentJSON , key , Iterable ( json ) . map ( ( function ( v , k ) {
1153
+ return _fromJSWith ( converter , v , k , json ) ;
1154
+ } ) ) ) ;
1155
+ }
1156
+ return json ;
1157
+ }
1158
+ function _fromJSDefault ( json ) {
1159
+ if ( json && typeof json === 'object' ) {
1160
+ if ( Array . isArray ( json ) ) {
1161
+ return Iterable ( json ) . map ( _fromJSDefault ) . toList ( ) ;
1162
+ }
1163
+ if ( json . constructor === Object ) {
1164
+ return Iterable ( json ) . map ( _fromJSDefault ) . toMap ( ) ;
1165
+ }
1166
+ }
1167
+ return json ;
1168
+ }
1144
1169
var Collection = function Collection ( ) {
1145
1170
throw TypeError ( 'Abstract' ) ;
1146
1171
} ;
@@ -1167,7 +1192,7 @@ Collection.Keyed = KeyedCollection;
1167
1192
Collection . Indexed = IndexedCollection ;
1168
1193
Collection . Set = SetCollection ;
1169
1194
var Map = function Map ( value ) {
1170
- return arguments . length === 0 ? emptyMap ( ) : value && value . constructor === $Map ? value : emptyMap ( ) . merge ( value ) ;
1195
+ return arguments . length === 0 ? emptyMap ( ) : value && value . constructor === $Map ? value : emptyMap ( ) . merge ( KeyedIterable ( value ) ) ;
1171
1196
} ;
1172
1197
var $Map = Map ;
1173
1198
( $traceurRuntime . createClass ) ( Map , {
@@ -1625,19 +1650,20 @@ function expandNodes(ownerID, nodes, bitmap, including, node) {
1625
1650
function mergeIntoMapWith ( map , merger , iterables ) {
1626
1651
var iters = [ ] ;
1627
1652
for ( var ii = 0 ; ii < iterables . length ; ii ++ ) {
1628
- iterables [ ii ] && iters . push ( KeyedIterable ( iterables [ ii ] ) ) ;
1653
+ var value = iterables [ ii ] ;
1654
+ var iter = KeyedIterable ( value ) ;
1655
+ if ( ! isIterable ( value ) ) {
1656
+ iter = iter . map ( ( function ( v ) {
1657
+ return fromJS ( v ) ;
1658
+ } ) ) ;
1659
+ }
1660
+ iters . push ( iter ) ;
1629
1661
}
1630
1662
return mergeIntoCollectionWith ( map , merger , iters ) ;
1631
1663
}
1632
1664
function deepMerger ( merger ) {
1633
1665
return ( function ( existing , value ) {
1634
- if ( existing && existing . mergeDeepWith ) {
1635
- var iterable = isIterable ( value ) ? value : maybeSeqFromValue ( value , true ) ;
1636
- if ( iterable ) {
1637
- return existing . mergeDeepWith ( merger , iterable ) ;
1638
- }
1639
- }
1640
- return merger ? merger ( existing , value ) : value ;
1666
+ return existing && existing . mergeDeepWith && isIterable ( value ) ? existing . mergeDeepWith ( merger , value ) : merger ? merger ( existing , value ) : value ;
1641
1667
} ) ;
1642
1668
}
1643
1669
function mergeIntoCollectionWith ( collection , merger , iters ) {
@@ -2342,16 +2368,13 @@ var List = function List(value) {
2342
2368
if ( value && value . constructor === $List ) {
2343
2369
return value ;
2344
2370
}
2345
- var isArray = Array . isArray ( value ) ;
2346
- if ( ! isArray ) {
2347
- value = Iterable ( value ) ;
2348
- }
2349
- var size = isArray ? value . length : value . size ;
2371
+ value = Iterable ( value ) ;
2372
+ var size = value . size ;
2350
2373
if ( size === 0 ) {
2351
2374
return empty ;
2352
2375
}
2353
2376
if ( size > 0 && size < SIZE ) {
2354
- return makeList ( 0 , size , SHIFT , null , new VNode ( isArray ? arrCopy ( value ) : value . toArray ( ) ) ) ;
2377
+ return makeList ( 0 , size , SHIFT , null , new VNode ( value . toArray ( ) ) ) ;
2355
2378
}
2356
2379
return empty . merge ( value ) ;
2357
2380
} ;
@@ -2824,13 +2847,20 @@ function setListBounds(list, begin, end) {
2824
2847
}
2825
2848
function mergeIntoListWith ( list , merger , iterables ) {
2826
2849
var iters = [ ] ;
2850
+ var maxSize = 0 ;
2827
2851
for ( var ii = 0 ; ii < iterables . length ; ii ++ ) {
2828
- var iter = iterables [ ii ] ;
2829
- iter && iters . push ( Iterable ( iter ) ) ;
2852
+ var value = iterables [ ii ] ;
2853
+ var iter = Iterable ( value ) ;
2854
+ if ( iter . size > maxSize ) {
2855
+ maxSize = iter . size ;
2856
+ }
2857
+ if ( ! isIterable ( value ) ) {
2858
+ iter = iter . map ( ( function ( v ) {
2859
+ return fromJS ( v ) ;
2860
+ } ) ) ;
2861
+ }
2862
+ iters . push ( iter ) ;
2830
2863
}
2831
- var maxSize = Math . max . apply ( Math , iters . map ( ( function ( s ) {
2832
- return s . size || 0 ;
2833
- } ) ) ) ;
2834
2864
if ( maxSize > list . size ) {
2835
2865
list = list . setSize ( maxSize ) ;
2836
2866
}
@@ -3179,7 +3209,7 @@ function emptySet() {
3179
3209
return EMPTY_SET || ( EMPTY_SET = makeSet ( emptyMap ( ) ) ) ;
3180
3210
}
3181
3211
var OrderedMap = function OrderedMap ( value ) {
3182
- return arguments . length === 0 ? emptyOrderedMap ( ) : value && value . constructor === $OrderedMap ? value : emptyOrderedMap ( ) . merge ( value ) ;
3212
+ return arguments . length === 0 ? emptyOrderedMap ( ) : value && value . constructor === $OrderedMap ? value : emptyOrderedMap ( ) . merge ( KeyedIterable ( value ) ) ;
3183
3213
} ;
3184
3214
var $OrderedMap = OrderedMap ;
3185
3215
( $traceurRuntime . createClass ) ( OrderedMap , {
@@ -3285,7 +3315,7 @@ var Record = function Record(defaultValues, name) {
3285
3315
if ( ! ( this instanceof RecordType ) ) {
3286
3316
return new RecordType ( values ) ;
3287
3317
}
3288
- this . _map = Map ( values ) ;
3318
+ this . _map = arguments . length === 0 ? Map ( ) : Map ( values ) ;
3289
3319
} ;
3290
3320
var keys = Object . keys ( defaultValues ) ;
3291
3321
var RecordTypePrototype = RecordType . prototype = Object . create ( RecordPrototype ) ;
@@ -3572,31 +3602,6 @@ RepeatPrototype.take = RangePrototype.take;
3572
3602
RepeatPrototype . skip = RangePrototype . skip ;
3573
3603
RepeatPrototype . __toJS = RangePrototype . __toJS ;
3574
3604
var EMPTY_REPEAT ;
3575
- function fromJS ( json , converter ) {
3576
- if ( converter ) {
3577
- return _fromJSWith ( converter , json , '' , { '' : json } ) ;
3578
- }
3579
- return _fromJSDefault ( json ) ;
3580
- }
3581
- function _fromJSWith ( converter , json , key , parentJSON ) {
3582
- if ( Array . isArray ( json ) || isPlainObj ( json ) ) {
3583
- return converter . call ( parentJSON , key , Iterable ( json ) . map ( ( function ( v , k ) {
3584
- return _fromJSWith ( converter , v , k , json ) ;
3585
- } ) ) ) ;
3586
- }
3587
- return json ;
3588
- }
3589
- function _fromJSDefault ( json ) {
3590
- if ( json && typeof json === 'object' ) {
3591
- if ( Array . isArray ( json ) ) {
3592
- return Iterable ( json ) . map ( _fromJSDefault ) . toList ( ) ;
3593
- }
3594
- if ( json . constructor === Object ) {
3595
- return Iterable ( json ) . map ( _fromJSDefault ) . toMap ( ) ;
3596
- }
3597
- }
3598
- return json ;
3599
- }
3600
3605
var Immutable = {
3601
3606
Iterable : Iterable ,
3602
3607
Seq : Seq ,
0 commit comments