8000 [BREAKING] Move sort() to ordered collections · immutable-js/immutable-js@98ec724 · GitHub
[go: up one dir, main page]

Skip to content

Commit 98ec724

Browse files
committed
[BREAKING] Move sort() to ordered collections
Map.sort() returns an OrderedMap (same for Set and OrderedSet) which creates a circular dependency between them and makes it impossible to tree shake away the ordered variants. WORK IN PROGRESS: * Move the sort() and sortBy() dts and flow to Seq, List, Ordered*, Stack? * Move generic definition on CollectionImpl to each usage * Use method/function pattern?
1 parent 59c291a commit 98ec724

File tree

4 files changed

+22
-26
lines changed

4 files changed

+22
-26
lines changed

src/Map.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
} from './TrieUtils';
2222
import { hash } from './Hash';
2323
import { Iterator, iteratorValue, iteratorDone } from './Iterator';
24-
import { sortFactory } from './Operations';
2524
import arrCopy from './utils/arrCopy';
2625
import assertNotInfinite from './utils/assertNotInfinite';
2726
import { setIn } from './methods/setIn';
@@ -37,8 +36,6 @@ import { asMutable } from './methods/asMutable';
3736
import { asImmutable } from './methods/asImmutable';
3837
import { wasAltered } from './methods/wasAltered';
3938

40-
import { OrderedMap } from './OrderedMap';
41-
4239
export class Map extends KeyedCollection {
4340
// @pragma Construction
4441

@@ -115,16 +112,6 @@ export class Map extends KeyedCollection {
115112

116113
// @pragma Composition
117114

118-
sort(comparator) {
119-
// Late binding
120-
return OrderedMap(sortFactory(this, comparator));
121-
}
122-
123-
sortBy(mapper, comparator) {
124-
// Late binding
125-
return OrderedMap(sortFactory(this, comparator, mapper));
126-
}
127-
128115
map(mapper, context) {
129116
return this.withMutations(map => {
130117
map.forEach((value, key) => {

src/OrderedMap.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { IS_ORDERED_SYMBOL } from './predicates/isOrdered';
1010
import { isOrderedMap } from './predicates/isOrderedMap';
1111
import { Map, emptyMap } from './Map';
1212
import { emptyList } from './List';
13+
import { reify, sortFactory } from './Operations';
1314
import { DELETE, NOT_SET, SIZE } from './TrieUtils';
1415
import assertNotInfinite from './utils/assertNotInfinite';
1516

@@ -66,6 +67,16 @@ export class OrderedMap extends Map {
6667
return updateOrderedMap(this, k, NOT_SET);
6768
}
6869

70+
// @pragma Composition
71+
72+
sort(comparator) {
73+
return reify(this, sortFactory(this, comparator));
74+
}
75+
76+
sortBy(mapper, comparator) {
77+
return reify(this, sortFactory(this, comparator, mapper));
78+
}
79+
6980
wasAltered() {
7081
return this._map.wasAltered() || this._list.wasAltered();
7182
}

src/OrderedSet.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { IS_ORDERED_SYMBOL } from './predicates/isOrdered';
1010
import { isOrderedSet } from './predicates/isOrderedSet';
1111
import { IndexedCollectionPrototype } from './CollectionImpl';
1212
import { Set } from './Set';
13+
import { reify, sortFactory } from './Operations';
1314
import { emptyOrderedMap } from './OrderedMap';
1415
import assertNotInfinite from './utils/assertNotInfinite';
1516

@@ -36,6 +37,16 @@ export class OrderedSet extends Set {
3637
return this(KeyedCollection(value).keySeq());
3738
}
3839

40+
// Composition
41+
42+
sort(comparator) {
43+
return reify(this, sortFactory(this, comparator));
44+
}
45+
46+
sortBy(mapper, comparator) {
47+
return reify(this, sortFactory(this, comparator, mapper));
48+
}
49+
3950
toString() {
4051
return this.__toString('OrderedSet {', '}');
4152
}

src/Set.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,11 @@ import { isOrdered } from './predicates/isOrdered';
1010
import { IS_SET_SYMBOL, isSet } from './predicates/isSet';
1111
import { emptyMap } from './Map';
1212
import { DELETE } from './TrieUtils';
13-
import { sortFactory } from './Operations';
1413
import assertNotInfinite from './utils/assertNotInfinite';
1514
import { asImmutable } from './methods/asImmutable';
1615
import { asMutable } from './methods/asMutable';
1716
import { withMutations } from './methods/withMutations';
1817

19-
import { OrderedSet } from './OrderedSet';
20-
2118
export class Set extends SetCollection {
2219
// @pragma Construction
2320

@@ -136,16 +133,6 @@ export class Set extends SetCollection {
136133
});
137134
}
138135

139-
sort(comparator) {
140-
// Late binding
141-
return OrderedSet(sortFactory(this, comparator));
142-
}
143-
144-
sortBy(mapper, comparator) {
145-
// Late binding
146-
return OrderedSet(sortFactory(this, comparator, mapper));
147-
}
148-
149136
wasAltered() {
150137
return this._map.wasAltered();
151138
}

0 commit comments

Comments
 (0)
0