8000 Better constructor for OrderedMap · rvrobotics/immutable-js@3725767 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3725767

Browse files
committed
Better constructor for OrderedMap
1 parent c49ec3b commit 3725767

File tree

7 files changed

+50
-30
lines changed

7 files changed

+50
-30
lines changed

__tests__/OrderedMap.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ import OrderedMap = Immutable.OrderedMap;
55

66
describe('OrderedMap', () => {
77

8+
it('converts from object', () => {
9+
var m = OrderedMap.from({'c': 'C', 'b': 'B', 'a': 'A'});
10+
expect(m.get('a')).toBe('A');
11+
expect(m.get('b')).toBe('B');
12+
expect(m.get('c')).toBe('C');
13+
expect(m.toArray()).toEqual(['C','B','A']);
14+
});
15+
816
it('constructor provides initial values', () => {
917
var m = OrderedMap({'a': 'A', 'b': 'B', 'c': 'C'});
1018
expect(m.get('a')).toBe('A');
@@ -23,6 +31,16 @@ describe('OrderedMap', () => {
2331
expect(m.toArray()).toEqual(['C','B','A']);
2432
});
2533

34+
it('constructor accepts sequences', () => {
35+
var s = Immutable.Sequence({'c': 'C', 'b': 'B', 'a': 'A'});
36+
var m = OrderedMap(s);
37+
expect(m.get('a')).toBe('A');
38+
expect(m.get('b')).toBe('B');
39+
expect(m.get('c')).toBe('C');
40+
expect(m.length).toBe(3);
41+
expect(m.toArray()).toEqual(['C','B','A']);
42+
});
43+
2644
it('maintains order when new keys are set', () => {
2745
var m = OrderedMap()
2846
.set('A', 'aardvark')

dist/Immutable.d.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -933,10 +933,12 @@ export declare module OrderedMap {
933933
* Creates a new immutable ordered map with the same
934934
* key value pairs as the provided object.
935935
*
936-
* var newMap = OrderedMap.fromObject({key: "value"});
936+
* var newMap = OrderedMap.from({key: "value"});
937937
*
938938
*/
939-
function fromObject<V>(object: {[key: string]: V}): Map<string, V>;
939+
function from<V>(object: {[key: string]: V}): Map<string, V>;
940+
function from<V>(array: Array<V>): Map<number, V>;
941+
function from<K, V>(sequence: Sequence<K, V>): Map<K, V>;
940942
}
941943

942944
/**
@@ -945,9 +947,11 @@ export declare module OrderedMap {
945947
export declare function OrderedMap<K, V>(): Map<K, V>;
946948

947949
/**
948-
* Alias for OrderedMap.fromObject().
950+
* Alias for OrderedMap.from().
949951
*/
950952
export declare function OrderedMap<V>(object: {[key: string]: V}): Map<string, V>;
953+
export declare function OrderedMap<V>(array: Array<V>): Map<number, V>;
954+
export declare function OrderedMap<K, V>(sequence: Sequence<K, V>): Map<K, V>;
951955

952956

953957
/**

dist/Map.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ for(var Sequence____Key in Sequence){if(Sequence.hasOwnProperty(Sequence____Key)
66
// @pragma Construction
77

88
function Map(sequence) {"use strict";
9-
if (!sequence) {
9+
if (!sequence || sequence.length === 0) {
1010
return Map.empty();
1111
}
1212
if (sequence.constructor === Map) {

dist/OrderedMap.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,20 @@ for(var ImmutableMap____Key in ImmutableMap){if(ImmutableMap.hasOwnProperty(Immu
55

66
// @pragma Construction
77

8-
function OrderedMap(object) {"use strict";
9-
if (!object) {
8+
function OrderedMap(sequence) {"use strict";
9+
if (!sequence || sequence.length === 0) {
1010
return OrderedMap.empty();
1111
}
12-
return OrderedMap.fromObject(object);
12+
if (sequence.constructor === OrderedMap) {
13+
return sequence;
14+
}
15+
return OrderedMap.empty().merge(sequence);
1316
}
1417

1518
OrderedMap.empty=function() {"use strict";
1619
return __EMPTY_ORDERED_MAP || (__EMPTY_ORDERED_MAP = OrderedMap.$OrderedMap_make());
1720
};
1821

19-
OrderedMap.fromObject=function(object) {"use strict";
20-
return OrderedMap.empty().withMutations(function(omap) {
21-
for (var k in object) if (object.hasOwnProperty(k)) {
22-
omap.set(k, object[k]);
23-
}
24-
});
25-
};
26-
2722
OrderedMap.prototype.toString=function() {"use strict";
2823
return this.__toString('OrderedMap {', '}');
2924
};
@@ -151,6 +146,8 @@ for(var ImmutableMap____Key in ImmutableMap){if(ImmutableMap.hasOwnProperty(Immu
151146
};
152147

153148

149+
OrderedMap.from = OrderedMap;
150+
154151

155152
var __EMPTY_ORDERED_MAP;
156153

src/Map.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Map extends Sequence {
66
// @pragma Construction
77

88
constructor(sequence) {
9-
if (!sequence) {
9+
if (!sequence || sequence.length === 0) {
1010
return Map.empty();
1111
}
1212
if (sequence.constructor === Map) {

src/OrderedMap.js

Lines changed: 8 additions & 11 deletions
10000
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,20 @@ class OrderedMap extends ImmutableMap {
55

66
// @pragma Construction
77

8-
constructor(object) {
9-
if (!object) {
8+
constructor(sequence) {
9+
if (!sequence || sequence.length === 0) {
1010
return OrderedMap.empty();
1111
}
12-
return OrderedMap.fromObject(object);
12+
if (sequence.constructor === OrderedMap) {
13+
return sequence;
14+
}
15+
return OrderedMap.empty().merge(sequence);
1316
}
1417

1518
static empty() {
1619
return __EMPTY_ORDERED_MAP || (__EMPTY_ORDERED_MAP = OrderedMap._make());
1720
}
1821

19-
static fromObject(object) {
20-
return OrderedMap.empty().withMutations(omap => {
21-
for (var k in object) if (object.hasOwnProperty(k)) {
22-
omap.set(k, object[k]);
23-
}
24-
});
25-
}
26-
2722
toString() {
2823
return this.__toString('OrderedMap {', '}');
2924
}
@@ -151,6 +146,8 @@ class OrderedMap extends ImmutableMap {
151146
}
152147
}
153148

149+
OrderedMap.from = OrderedMap;
150+
154151

155152
var __EMPTY_ORDERED_MAP;
156153

type-definitions/Immutable.d.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -933,10 +933,12 @@ export declare module OrderedMap {
933933
* Creates a new immutable ordered map with the same
934934
* key value pairs as the provided object.
935935
*
936-
* var newMap = OrderedMap.fromObject({key: "value"});
936+
* var newMap = OrderedMap.from({key: "value"});
937937
*
938938
*/
939-
function fromObject<V>(object: {[key: string]: V}): Map<string, V>;
939+
function from<V>(object: {[key: string]: V}): Map<string, V>;
940+
function from<V>(array: Array<V>): Map<number, V>;
941+
function from<K, V>(sequence: Sequence<K, V>): Map<K, V>;
940942
}
941943

942944
/**
@@ -945,9 +947,11 @@ export declare module OrderedMap {
945947
export declare function OrderedMap<K, V>(): Map<K, V>;
946948

947949
/**
948-
* Alias for OrderedMap.fromObject().
950+
* Alias for OrderedMap.from().
949951
*/
950952
export declare function OrderedMap<V>(object: {[key: string]: V}): Map<string, V>;
953+
export declare function OrderedMap<V>(array: Array<V>): Map<number, V>;
954+
export declare function OrderedMap<K, V>(sequence: Sequence<K, V>): Map<K, V>;
951955

952956

953957
/**

0 commit comments

Comments
 (0)
0