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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy