immutable 5.0.0-beta.2 → 5.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +3 -3
  2. package/dist/immutable.d.ts +14 -131
  3. package/dist/immutable.es.js +5965 -0
  4. package/dist/immutable.js +59 -1
  5. package/dist/immutable.min.js +32 -32
  6. package/package.json +3 -5
  7. package/dist/es/Collection.js +0 -74
  8. package/dist/es/CollectionImpl.js +0 -781
  9. package/dist/es/Hash.js +0 -259
  10. package/dist/es/Immutable.js +0 -73
  11. package/dist/es/Iterator.js +0 -105
  12. package/dist/es/List.js +0 -691
  13. package/dist/es/Map.js +0 -832
  14. package/dist/es/Math.js +0 -44
  15. package/dist/es/Operations.js +0 -952
  16. package/dist/es/OrderedMap.js +0 -194
  17. package/dist/es/OrderedSet.js +0 -90
  18. package/dist/es/PairSorting.js +0 -29
  19. package/dist/es/Range.js +0 -167
  20. package/dist/es/Record.js +0 -290
  21. package/dist/es/Repeat.js +0 -129
  22. package/dist/es/Seq.js +0 -396
  23. package/dist/es/Set.js +0 -277
  24. package/dist/es/Stack.js +0 -259
  25. package/dist/es/TrieUtils.js +0 -115
  26. package/dist/es/fromJS.js +0 -73
  27. package/dist/es/functional/get.js +0 -37
  28. package/dist/es/functional/getIn.js +0 -40
  29. package/dist/es/functional/has.js +0 -34
  30. package/dist/es/functional/hasIn.js +0 -31
  31. package/dist/es/functional/merge.js +0 -136
  32. package/dist/es/functional/remove.js +0 -55
  33. package/dist/es/functional/removeIn.js +0 -31
  34. package/dist/es/functional/set.js +0 -51
  35. package/dist/es/functional/setIn.js +0 -31
  36. package/dist/es/functional/update.js +0 -30
  37. package/dist/es/functional/updateIn.js +0 -93
  38. package/dist/es/is.js +0 -107
  39. package/dist/es/methods/asImmutable.js +0 -28
  40. package/dist/es/methods/asMutable.js +0 -30
  41. package/dist/es/methods/deleteIn.js +0 -30
  42. package/dist/es/methods/getIn.js +0 -30
  43. package/dist/es/methods/hasIn.js +0 -30
  44. package/dist/es/methods/merge.js +0 -78
  45. package/dist/es/methods/mergeDeep.js +0 -40
  46. package/dist/es/methods/mergeDeepIn.js +0 -36
  47. package/dist/es/methods/mergeIn.js +0 -35
  48. package/dist/es/methods/setIn.js +0 -30
  49. package/dist/es/methods/toObject.js +0 -35
  50. package/dist/es/methods/update.js +0 -32
  51. package/dist/es/methods/updateIn.js +0 -30
  52. package/dist/es/methods/wasAltered.js +0 -28
  53. package/dist/es/methods/withMutations.js +0 -30
  54. package/dist/es/package.json.js +0 -26
  55. package/dist/es/predicates/isAssociative.js +0 -31
  56. package/dist/es/predicates/isCollection.js +0 -30
  57. package/dist/es/predicates/isImmutable.js +0 -31
  58. package/dist/es/predicates/isIndexed.js +0 -30
  59. package/dist/es/predicates/isKeyed.js +0 -30
  60. package/dist/es/predicates/isList.js +0 -30
  61. package/dist/es/predicates/isMap.js +0 -30
  62. package/dist/es/predicates/isOrdered.js +0 -30
  63. package/dist/es/predicates/isOrderedMap.js +0 -31
  64. package/dist/es/predicates/isOrderedSet.js +0 -31
  65. package/dist/es/predicates/isRecord.js +0 -30
  66. package/dist/es/predicates/isSeq.js +0 -30
  67. package/dist/es/predicates/isSet.js +0 -30
  68. package/dist/es/predicates/isStack.js +0 -30
  69. package/dist/es/predicates/isValueObject.js +0 -32
  70. package/dist/es/toJS.js +0 -53
  71. package/dist/es/utils/arrCopy.js +0 -34
  72. package/dist/es/utils/assertNotInfinite.js +0 -33
  73. package/dist/es/utils/coerceKeyPath.js +0 -39
  74. package/dist/es/utils/deepEqual.js +0 -98
  75. package/dist/es/utils/hasOwnProperty.js +0 -26
  76. package/dist/es/utils/invariant.js +0 -28
  77. package/dist/es/utils/isArrayLike.js +0 -43
  78. package/dist/es/utils/isDataStructure.js +0 -38
  79. package/dist/es/utils/isPlainObj.js +0 -51
  80. package/dist/es/utils/mixin.js +0 -34
  81. package/dist/es/utils/quoteString.js +0 -32
  82. package/dist/es/utils/shallowCopy.js +0 -40
@@ -1,952 +0,0 @@
1
- /**
2
- * MIT License
3
- *
4
- * Copyright (c) 2014-present, Lee Byron and other contributors.
5
- *
6
- * Permission is hereby granted, free of charge, to any person obtaining a copy
7
- * of this software and associated documentation files (the "Software"), to deal
8
- * in the Software without restriction, including without limitation the rights
9
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- * copies of the Software, and to permit persons to whom the Software is
11
- * furnished to do so, subject to the following conditions:
12
- *
13
- * The above copyright notice and this permission notice shall be included in all
14
- * copies or substantial portions of the Software.
15
- *
16
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- * SOFTWARE.
23
- */
24
- import { ensureSize, NOT_SET, wholeSlice, wrapIndex, resolveBegin, resolveEnd } from './TrieUtils.js';
25
- import { KeyedCollection, IndexedCollection, SetCollection, Collection } from './Collection.js';
26
- import { isCollection } from './predicates/isCollection.js';
27
- import { isKeyed } from './predicates/isKeyed.js';
28
- import { isIndexed } from './predicates/isIndexed.js';
29
- import { IS_ORDERED_SYMBOL, isOrdered } from './predicates/isOrdered.js';
30
- import { isSeq } from './predicates/isSeq.js';
31
- import { ITERATE_VALUES, Iterator, iteratorValue, ITERATE_ENTRIES, ITERATE_KEYS, iteratorDone, getIterator } from './Iterator.js';
32
- import { KeyedSeq, IndexedSeq, SetSeq, keyedSeqFromValue, indexedSeqFromValue, ArraySeq, Seq } from './Seq.js';
33
- import { Map } from './Map.js';
34
- import { OrderedMap } from './OrderedMap.js';
35
-
36
- var ToKeyedSequence = /*@__PURE__*/(function (KeyedSeq) {
37
- function ToKeyedSequence(indexed, useKeys) {
38
- this._iter = indexed;
39
- this._useKeys = useKeys;
40
- this.size = indexed.size;
41
- }
42
-
43
- if ( KeyedSeq ) ToKeyedSequence.__proto__ = KeyedSeq;
44
- ToKeyedSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );
45
- ToKeyedSequence.prototype.constructor = ToKeyedSequence;
46
-
47
- ToKeyedSequence.prototype.get = function get (key, notSetValue) {
48
- return this._iter.get(key, notSetValue);
49
- };
50
-
51
- ToKeyedSequence.prototype.has = function has (key) {
52
- return this._iter.has(key);
53
- };
54
-
55
- ToKeyedSequence.prototype.valueSeq = function valueSeq () {
56
- return this._iter.valueSeq();
57
- };
58
-
59
- ToKeyedSequence.prototype.reverse = function reverse () {
60
- var this$1$1 = this;
61
-
62
- var reversedSequence = reverseFactory(this, true);
63
- if (!this._useKeys) {
64
- reversedSequence.valueSeq = function () { return this$1$1._iter.toSeq().reverse(); };
65
- }
66
- return reversedSequence;
67
- };
68
-
69
- ToKeyedSequence.prototype.map = function map (mapper, context) {
70
- var this$1$1 = this;
71
-
72
- var mappedSequence = mapFactory(this, mapper, context);
73
- if (!this._useKeys) {
74
- mappedSequence.valueSeq = function () { return this$1$1._iter.toSeq().map(mapper, context); };
75
- }
76
- return mappedSequence;
77
- };
78
-
79
- ToKeyedSequence.prototype.__iterate = function __iterate (fn, reverse) {
80
- var this$1$1 = this;
81
-
82
- return this._iter.__iterate(function (v, k) { return fn(v, k, this$1$1); }, reverse);
83
- };
84
-
85
- ToKeyedSequence.prototype.__iterator = function __iterator (type, reverse) {
86
- return this._iter.__iterator(type, reverse);
87
- };
88
-
89
- return ToKeyedSequence;
90
- }(KeyedSeq));
91
- ToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true;
92
-
93
- var ToIndexedSequence = /*@__PURE__*/(function (IndexedSeq) {
94
- function ToIndexedSequence(iter) {
95
- this._iter = iter;
96
- this.size = iter.size;
97
- }
98
-
99
- if ( IndexedSeq ) ToIndexedSequence.__proto__ = IndexedSeq;
100
- ToIndexedSequence.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );
101
- ToIndexedSequence.prototype.constructor = ToIndexedSequence;
102
-
103
- ToIndexedSequence.prototype.includes = function includes (value) {
104
- return this._iter.includes(value);
105
- };
106
-
107
- ToIndexedSequence.prototype.__iterate = function __iterate (fn, reverse) {
108
- var this$1$1 = this;
109
-
110
- var i = 0;
111
- reverse && ensureSize(this);
112
- return this._iter.__iterate(
113
- function (v) { return fn(v, reverse ? this$1$1.size - ++i : i++, this$1$1); },
114
- reverse
115
- );
116
- };
117
-
118
- ToIndexedSequence.prototype.__iterator = function __iterator (type, reverse) {
119
- var this$1$1 = this;
120
-
121
- var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);
122
- var i = 0;
123
- reverse && ensureSize(this);
124
- return new Iterator(function () {
125
- var step = iterator.next();
126
- return step.done
127
- ? step
128
- : iteratorValue(
129
- type,
130
- reverse ? this$1$1.size - ++i : i++,
131
- step.value,
132
- step
133
- );
134
- });
135
- };
136
-
137
- return ToIndexedSequence;
138
- }(IndexedSeq));
139
-
140
- var ToSetSequence = /*@__PURE__*/(function (SetSeq) {
141
- function ToSetSequence(iter) {
142
- this._iter = iter;
143
- this.size = iter.size;
144
- }
145
-
146
- if ( SetSeq ) ToSetSequence.__proto__ = SetSeq;
147
- ToSetSequence.prototype = Object.create( SetSeq && SetSeq.prototype );
148
- ToSetSequence.prototype.constructor = ToSetSequence;
149
-
150
- ToSetSequence.prototype.has = function has (key) {
151
- return this._iter.includes(key);
152
- };
153
-
154
- ToSetSequence.prototype.__iterate = function __iterate (fn, reverse) {
155
- var this$1$1 = this;
156
-
157
- return this._iter.__iterate(function (v) { return fn(v, v, this$1$1); }, reverse);
158
- };
159
-
160
- ToSetSequence.prototype.__iterator = function __iterator (type, reverse) {
161
- var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);
162
- return new Iterator(function () {
163
- var step = iterator.next();
164
- return step.done
165
- ? step
166
- : iteratorValue(type, step.value, step.value, step);
167
- });
168
- };
169
-
170
- return ToSetSequence;
171
- }(SetSeq));
172
-
173
- var FromEntriesSequence = /*@__PURE__*/(function (KeyedSeq) {
174
- function FromEntriesSequence(entries) {
175
- this._iter = entries;
176
- this.size = entries.size;
177
- }
178
-
179
- if ( KeyedSeq ) FromEntriesSequence.__proto__ = KeyedSeq;
180
- FromEntriesSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );
181
- FromEntriesSequence.prototype.constructor = FromEntriesSequence;
182
-
183
- FromEntriesSequence.prototype.entrySeq = function entrySeq () {
184
- return this._iter.toSeq();
185
- };
186
-
187
- FromEntriesSequence.prototype.__iterate = function __iterate (fn, reverse) {
188
- var this$1$1 = this;
189
-
190
- return this._iter.__iterate(function (entry) {
191
- // Check if entry exists first so array access doesn't throw for holes
192
- // in the parent iteration.
193
- if (entry) {
194
- validateEntry(entry);
195
- var indexedCollection = isCollection(entry);
196
- return fn(
197
- indexedCollection ? entry.get(1) : entry[1],
198
- indexedCollection ? entry.get(0) : entry[0],
199
- this$1$1
200
- );
201
- }
202
- }, reverse);
203
- };
204
-
205
- FromEntriesSequence.prototype.__iterator = function __iterator (type, reverse) {
206
- var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);
207
- return new Iterator(function () {
208
- while (true) {
209
- var step = iterator.next();
210
- if (step.done) {
211
- return step;
212
- }
213
- var entry = step.value;
214
- // Check if entry exists first so array access doesn't throw for holes
215
- // in the parent iteration.
216
- if (entry) {
217
- validateEntry(entry);
218
- var indexedCollection = isCollection(entry);
219
- return iteratorValue(
220
- type,
221
- indexedCollection ? entry.get(0) : entry[0],
222
- indexedCollection ? entry.get(1) : entry[1],
223
- step
224
- );
225
- }
226
- }
227
- });
228
- };
229
-
230
- return FromEntriesSequence;
231
- }(KeyedSeq));
232
-
233
- ToIndexedSequence.prototype.cacheResult =
234
- ToKeyedSequence.prototype.cacheResult =
235
- ToSetSequence.prototype.cacheResult =
236
- FromEntriesSequence.prototype.cacheResult =
237
- cacheResultThrough;
238
-
239
- function flipFactory(collection) {
240
- var flipSequence = makeSequence(collection);
241
- flipSequence._iter = collection;
242
- flipSequence.size = collection.size;
243
- flipSequence.flip = function () { return collection; };
244
- flipSequence.reverse = function () {
245
- var reversedSequence = collection.reverse.apply(this); // super.reverse()
246
- reversedSequence.flip = function () { return collection.reverse(); };
247
- return reversedSequence;
248
- };
249
- flipSequence.has = function (key) { return collection.includes(key); };
250
- flipSequence.includes = function (key) { return collection.has(key); };
251
- flipSequence.cacheResult = cacheResultThrough;
252
- flipSequence.__iterateUncached = function (fn, reverse) {
253
- var this$1$1 = this;
254
-
255
- return collection.__iterate(function (v, k) { return fn(k, v, this$1$1) !== false; }, reverse);
256
- };
257
- flipSequence.__iteratorUncached = function (type, reverse) {
258
- if (type === ITERATE_ENTRIES) {
259
- var iterator = collection.__iterator(type, reverse);
260
- return new Iterator(function () {
261
- var step = iterator.next();
262
- if (!step.done) {
263
- var k = step.value[0];
264
- step.value[0] = step.value[1];
265
- step.value[1] = k;
266
- }
267
- return step;
268
- });
269
- }
270
- return collection.__iterator(
271
- type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,
272
- reverse
273
- );
274
- };
275
- return flipSequence;
276
- }
277
-
278
- function mapFactory(collection, mapper, context) {
279
- var mappedSequence = makeSequence(collection);
280
- mappedSequence.size = collection.size;
281
- mappedSequence.has = function (key) { return collection.has(key); };
282
- mappedSequence.get = function (key, notSetValue) {
283
- var v = collection.get(key, NOT_SET);
284
- return v === NOT_SET
285
- ? notSetValue
286
- : mapper.call(context, v, key, collection);
287
- };
288
- mappedSequence.__iterateUncached = function (fn, reverse) {
289
- var this$1$1 = this;
290
-
291
- return collection.__iterate(
292
- function (v, k, c) { return fn(mapper.call(context, v, k, c), k, this$1$1) !== false; },
293
- reverse
294
- );
295
- };
296
- mappedSequence.__iteratorUncached = function (type, reverse) {
297
- var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);
298
- return new Iterator(function () {
299
- var step = iterator.next();
300
- if (step.done) {
301
- return step;
302
- }
303
- var entry = step.value;
304
- var key = entry[0];
305
- return iteratorValue(
306
- type,
307
- key,
308
- mapper.call(context, entry[1], key, collection),
309
- step
310
- );
311
- });
312
- };
313
- return mappedSequence;
314
- }
315
-
316
- function reverseFactory(collection, useKeys) {
317
- var this$1$1 = this;
318
-
319
- var reversedSequence = makeSequence(collection);
320
- reversedSequence._iter = collection;
321
- reversedSequence.size = collection.size;
322
- reversedSequence.reverse = function () { return collection; };
323
- if (collection.flip) {
324
- reversedSequence.flip = function () {
325
- var flipSequence = flipFactory(collection);
326
- flipSequence.reverse = function () { return collection.flip(); };
327
- return flipSequence;
328
- };
329
- }
330
- reversedSequence.get = function (key, notSetValue) { return collection.get(useKeys ? key : -1 - key, notSetValue); };
331
- reversedSequence.has = function (key) { return collection.has(useKeys ? key : -1 - key); };
332
- reversedSequence.includes = function (value) { return collection.includes(value); };
333
- reversedSequence.cacheResult = cacheResultThrough;
334
- reversedSequence.__iterate = function (fn, reverse) {
335
- var this$1$1 = this;
336
-
337
- var i = 0;
338
- reverse && ensureSize(collection);
339
- return collection.__iterate(
340
- function (v, k) { return fn(v, useKeys ? k : reverse ? this$1$1.size - ++i : i++, this$1$1); },
341
- !reverse
342
- );
343
- };
344
- reversedSequence.__iterator = function (type, reverse) {
345
- var i = 0;
346
- reverse && ensureSize(collection);
347
- var iterator = collection.__iterator(ITERATE_ENTRIES, !reverse);
348
- return new Iterator(function () {
349
- var step = iterator.next();
350
- if (step.done) {
351
- return step;
352
- }
353
- var entry = step.value;
354
- return iteratorValue(
355
- type,
356
- useKeys ? entry[0] : reverse ? this$1$1.size - ++i : i++,
357
- entry[1],
358
- step
359
- );
360
- });
361
- };
362
- return reversedSequence;
363
- }
364
-
365
- function filterFactory(collection, predicate, context, useKeys) {
366
- var filterSequence = makeSequence(collection);
367
- if (useKeys) {
368
- filterSequence.has = function (key) {
369
- var v = collection.get(key, NOT_SET);
370
- return v !== NOT_SET && !!predicate.call(context, v, key, collection);
371
- };
372
- filterSequence.get = function (key, notSetValue) {
373
- var v = collection.get(key, NOT_SET);
374
- return v !== NOT_SET && predicate.call(context, v, key, collection)
375
- ? v
376
- : notSetValue;
377
- };
378
- }
379
- filterSequence.__iterateUncached = function (fn, reverse) {
380
- var this$1$1 = this;
381
-
382
- var iterations = 0;
383
- collection.__iterate(function (v, k, c) {
384
- if (predicate.call(context, v, k, c)) {
385
- iterations++;
386
- return fn(v, useKeys ? k : iterations - 1, this$1$1);
387
- }
388
- }, reverse);
389
- return iterations;
390
- };
391
- filterSequence.__iteratorUncached = function (type, reverse) {
392
- var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);
393
- var iterations = 0;
394
- return new Iterator(function () {
395
- while (true) {
396
- var step = iterator.next();
397
- if (step.done) {
398
- return step;
399
- }
400
- var entry = step.value;
401
- var key = entry[0];
402
- var value = entry[1];
403
- if (predicate.call(context, value, key, collection)) {
404
- return iteratorValue(type, useKeys ? key : iterations++, value, step);
405
- }
406
- }
407
- });
408
- };
409
- return filterSequence;
410
- }
411
-
412
- function countByFactory(collection, grouper, context) {
413
- var groups = Map().asMutable();
414
- collection.__iterate(function (v, k) {
415
- groups.update(grouper.call(context, v, k, collection), 0, function (a) { return a + 1; });
416
- });
417
- return groups.asImmutable();
418
- }
419
-
420
- function groupByFactory(collection, grouper, context) {
421
- var isKeyedIter = isKeyed(collection);
422
- var groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable();
423
- collection.__iterate(function (v, k) {
424
- groups.update(
425
- grouper.call(context, v, k, collection),
426
- function (a) { return ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a); }
427
- );
428
- });
429
- var coerce = collectionClass(collection);
430
- return groups.map(function (arr) { return reify(collection, coerce(arr)); }).asImmutable();
431
- }
432
-
433
- function partitionFactory(collection, predicate, context) {
434
- var isKeyedIter = isKeyed(collection);
435
- var groups = [[], []];
436
- collection.__iterate(function (v, k) {
437
- groups[predicate.call(context, v, k, collection) ? 1 : 0].push(
438
- isKeyedIter ? [k, v] : v
439
- );
440
- });
441
- var coerce = collectionClass(collection);
442
- return groups.map(function (arr) { return reify(collection, coerce(arr)); });
443
- }
444
-
445
- function sliceFactory(collection, begin, end, useKeys) {
446
- var originalSize = collection.size;
447
-
448
- if (wholeSlice(begin, end, originalSize)) {
449
- return collection;
450
- }
451
-
452
- var resolvedBegin = resolveBegin(begin, originalSize);
453
- var resolvedEnd = resolveEnd(end, originalSize);
454
-
455
- // begin or end will be NaN if they were provided as negative numbers and
456
- // this collection's size is unknown. In that case, cache first so there is
457
- // a known size and these do not resolve to NaN.
458
- if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {
459
- return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys);
460
- }
461
-
462
- // Note: resolvedEnd is undefined when the original sequence's length is
463
- // unknown and this slice did not supply an end and should contain all
464
- // elements after resolvedBegin.
465
- // In that case, resolvedSize will be NaN and sliceSize will remain undefined.
466
- var resolvedSize = resolvedEnd - resolvedBegin;
467
- var sliceSize;
468
- if (resolvedSize === resolvedSize) {
469
- sliceSize = resolvedSize < 0 ? 0 : resolvedSize;
470
- }
471
-
472
- var sliceSeq = makeSequence(collection);
473
-
474
- // If collection.size is undefined, the size of the realized sliceSeq is
475
- // unknown at this point unless the number of items to slice is 0
476
- sliceSeq.size =
477
- sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined;
478
-
479
- if (!useKeys && isSeq(collection) && sliceSize >= 0) {
480
- sliceSeq.get = function (index, notSetValue) {
481
- index = wrapIndex(this, index);
482
- return index >= 0 && index < sliceSize
483
- ? collection.get(index + resolvedBegin, notSetValue)
484
- : notSetValue;
485
- };
486
- }
487
-
488
- sliceSeq.__iterateUncached = function (fn, reverse) {
489
- var this$1$1 = this;
490
-
491
- if (sliceSize === 0) {
492
- return 0;
493
- }
494
- if (reverse) {
495
- return this.cacheResult().__iterate(fn, reverse);
496
- }
497
- var skipped = 0;
498
- var isSkipping = true;
499
- var iterations = 0;
500
- collection.__iterate(function (v, k) {
501
- if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {
502
- iterations++;
503
- return (
504
- fn(v, useKeys ? k : iterations - 1, this$1$1) !== false &&
505
- iterations !== sliceSize
506
- );
507
- }
508
- });
509
- return iterations;
510
- };
511
-
512
- sliceSeq.__iteratorUncached = function (type, reverse) {
513
- if (sliceSize !== 0 && reverse) {
514
- return this.cacheResult().__iterator(type, reverse);
515
- }
516
- // Don't bother instantiating parent iterator if taking 0.
517
- if (sliceSize === 0) {
518
- return new Iterator(iteratorDone);
519
- }
520
- var iterator = collection.__iterator(type, reverse);
521
- var skipped = 0;
522
- var iterations = 0;
523
- return new Iterator(function () {
524
- while (skipped++ < resolvedBegin) {
525
- iterator.next();
526
- }
527
- if (++iterations > sliceSize) {
528
- return iteratorDone();
529
- }
530
- var step = iterator.next();
531
- if (useKeys || type === ITERATE_VALUES || step.done) {
532
- return step;
533
- }
534
- if (type === ITERATE_KEYS) {
535
- return iteratorValue(type, iterations - 1, undefined, step);
536
- }
537
- return iteratorValue(type, iterations - 1, step.value[1], step);
538
- });
539
- };
540
-
541
- return sliceSeq;
542
- }
543
-
544
- function takeWhileFactory(collection, predicate, context) {
545
- var takeSequence = makeSequence(collection);
546
- takeSequence.__iterateUncached = function (fn, reverse) {
547
- var this$1$1 = this;
548
-
549
- if (reverse) {
550
- return this.cacheResult().__iterate(fn, reverse);
551
- }
552
- var iterations = 0;
553
- collection.__iterate(
554
- function (v, k, c) { return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$1$1); }
555
- );
556
- return iterations;
557
- };
558
- takeSequence.__iteratorUncached = function (type, reverse) {
559
- var this$1$1 = this;
560
-
561
- if (reverse) {
562
- return this.cacheResult().__iterator(type, reverse);
563
- }
564
- var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);
565
- var iterating = true;
566
- return new Iterator(function () {
567
- if (!iterating) {
568
- return iteratorDone();
569
- }
570
- var step = iterator.next();
571
- if (step.done) {
572
- return step;
573
- }
574
- var entry = step.value;
575
- var k = entry[0];
576
- var v = entry[1];
577
- if (!predicate.call(context, v, k, this$1$1)) {
578
- iterating = false;
579
- return iteratorDone();
580
- }
581
- return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);
582
- });
583
- };
584
- return takeSequence;
585
- }
586
-
587
- function skipWhileFactory(collection, predicate, context, useKeys) {
588
- var skipSequence = makeSequence(collection);
589
- skipSequence.__iterateUncached = function (fn, reverse) {
590
- var this$1$1 = this;
591
-
592
- if (reverse) {
593
- return this.cacheResult().__iterate(fn, reverse);
594
- }
595
- var isSkipping = true;
596
- var iterations = 0;
597
- collection.__iterate(function (v, k, c) {
598
- if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {
599
- iterations++;
600
- return fn(v, useKeys ? k : iterations - 1, this$1$1);
601
- }
602
- });
603
- return iterations;
604
- };
605
- skipSequence.__iteratorUncached = function (type, reverse) {
606
- var this$1$1 = this;
607
-
608
- if (reverse) {
609
- return this.cacheResult().__iterator(type, reverse);
610
- }
611
- var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);
612
- var skipping = true;
613
- var iterations = 0;
614
- return new Iterator(function () {
615
- var step;
616
- var k;
617
- var v;
618
- do {
619
- step = iterator.next();
620
- if (step.done) {
621
- if (useKeys || type === ITERATE_VALUES) {
622
- return step;
623
- }
624
- if (type === ITERATE_KEYS) {
625
- return iteratorValue(type, iterations++, undefined, step);
626
- }
627
- return iteratorValue(type, iterations++, step.value[1], step);
628
- }
629
- var entry = step.value;
630
- k = entry[0];
631
- v = entry[1];
632
- skipping && (skipping = predicate.call(context, v, k, this$1$1));
633
- } while (skipping);
634
- return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);
635
- });
636
- };
637
- return skipSequence;
638
- }
639
-
640
- function concatFactory(collection, values) {
641
- var isKeyedCollection = isKeyed(collection);
642
- var iters = [collection]
643
- .concat(values)
644
- .map(function (v) {
645
- if (!isCollection(v)) {
646
- v = isKeyedCollection
647
- ? keyedSeqFromValue(v)
648
- : indexedSeqFromValue(Array.isArray(v) ? v : [v]);
649
- } else if (isKeyedCollection) {
650
- v = KeyedCollection(v);
651
- }
652
- return v;
653
- })
654
- .filter(function (v) { return v.size !== 0; });
655
-
656
- if (iters.length === 0) {
657
- return collection;
658
- }
659
-
660
- if (iters.length === 1) {
661
- var singleton = iters[0];
662
- if (
663
- singleton === collection ||
664
- (isKeyedCollection && isKeyed(singleton)) ||
665
- (isIndexed(collection) && isIndexed(singleton))
666
- ) {
667
- return singleton;
668
- }
669
- }
670
-
671
- var concatSeq = new ArraySeq(iters);
672
- if (isKeyedCollection) {
673
- concatSeq = concatSeq.toKeyedSeq();
674
- } else if (!isIndexed(collection)) {
675
- concatSeq = concatSeq.toSetSeq();
676
- }
677
- concatSeq = concatSeq.flatten(true);
678
- concatSeq.size = iters.reduce(function (sum, seq) {
679
- if (sum !== undefined) {
680
- var size = seq.size;
681
- if (size !== undefined) {
682
- return sum + size;
683
- }
684
- }
685
- }, 0);
686
- return concatSeq;
687
- }
688
-
689
- function flattenFactory(collection, depth, useKeys) {
690
- var flatSequence = makeSequence(collection);
691
- flatSequence.__iterateUncached = function (fn, reverse) {
692
- if (reverse) {
693
- return this.cacheResult().__iterate(fn, reverse);
694
- }
695
- var iterations = 0;
696
- var stopped = false;
697
- function flatDeep(iter, currentDepth) {
698
- iter.__iterate(function (v, k) {
699
- if ((!depth || currentDepth < depth) && isCollection(v)) {
700
- flatDeep(v, currentDepth + 1);
701
- } else {
702
- iterations++;
703
- if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) {
704
- stopped = true;
705
- }
706
- }
707
- return !stopped;
708
- }, reverse);
709
- }
710
- flatDeep(collection, 0);
711
- return iterations;
712
- };
713
- flatSequence.__iteratorUncached = function (type, reverse) {
714
- if (reverse) {
715
- return this.cacheResult().__iterator(type, reverse);
716
- }
717
- var iterator = collection.__iterator(type, reverse);
718
- var stack = [];
719
- var iterations = 0;
720
- return new Iterator(function () {
721
- while (iterator) {
722
- var step = iterator.next();
723
- if (step.done !== false) {
724
- iterator = stack.pop();
725
- continue;
726
- }
727
- var v = step.value;
728
- if (type === ITERATE_ENTRIES) {
729
- v = v[1];
730
- }
731
- if ((!depth || stack.length < depth) && isCollection(v)) {
732
- stack.push(iterator);
733
- iterator = v.__iterator(type, reverse);
734
- } else {
735
- return useKeys ? step : iteratorValue(type, iterations++, v, step);
736
- }
737
- }
738
- return iteratorDone();
739
- });
740
- };
741
- return flatSequence;
742
- }
743
-
744
- function flatMapFactory(collection, mapper, context) {
745
- var coerce = collectionClass(collection);
746
- return collection
747
- .toSeq()
748
- .map(function (v, k) { return coerce(mapper.call(context, v, k, collection)); })
749
- .flatten(true);
750
- }
751
-
752
- function interposeFactory(collection, separator) {
753
- var interposedSequence = makeSequence(collection);
754
- interposedSequence.size = collection.size && collection.size * 2 - 1;
755
- interposedSequence.__iterateUncached = function (fn, reverse) {
756
- var this$1$1 = this;
757
-
758
- var iterations = 0;
759
- collection.__iterate(
760
- function (v) { return (!iterations || fn(separator, iterations++, this$1$1) !== false) &&
761
- fn(v, iterations++, this$1$1) !== false; },
762
- reverse
763
- );
764
- return iterations;
765
- };
766
- interposedSequence.__iteratorUncached = function (type, reverse) {
767
- var iterator = collection.__iterator(ITERATE_VALUES, reverse);
768
- var iterations = 0;
769
- var step;
770
- return new Iterator(function () {
771
- if (!step || iterations % 2) {
772
- step = iterator.next();
773
- if (step.done) {
774
- return step;
775
- }
776
- }
777
- return iterations % 2
778
- ? iteratorValue(type, iterations++, separator)
779
- : iteratorValue(type, iterations++, step.value, step);
780
- });
781
- };
782
- return interposedSequence;
783
- }
784
-
785
- function sortFactory(collection, comparator, mapper) {
786
- if (!comparator) {
787
- comparator = defaultComparator;
788
- }
789
- var isKeyedCollection = isKeyed(collection);
790
- var index = 0;
791
- var entries = collection
792
- .toSeq()
793
- .map(function (v, k) { return [k, v, index++, mapper ? mapper(v, k, collection) : v]; })
794
- .valueSeq()
795
- .toArray();
796
- entries
797
- .sort(function (a, b) { return comparator(a[3], b[3]) || a[2] - b[2]; })
798
- .forEach(
799
- isKeyedCollection
800
- ? function (v, i) {
801
- entries[i].length = 2;
802
- }
803
- : function (v, i) {
804
- entries[i] = v[1];
805
- }
806
- );
807
- return isKeyedCollection
808
- ? KeyedSeq(entries)
809
- : isIndexed(collection)
810
- ? IndexedSeq(entries)
811
- : SetSeq(entries);
812
- }
813
-
814
- function maxFactory(collection, comparator, mapper) {
815
- if (!comparator) {
816
- comparator = defaultComparator;
817
- }
818
- if (mapper) {
819
- var entry = collection
820
- .toSeq()
821
- .map(function (v, k) { return [v, mapper(v, k, collection)]; })
822
- .reduce(function (a, b) { return (maxCompare(comparator, a[1], b[1]) ? b : a); });
823
- return entry && entry[0];
824
- }
825
- return collection.reduce(function (a, b) { return (maxCompare(comparator, a, b) ? b : a); });
826
- }
827
-
828
- function maxCompare(comparator, a, b) {
829
- var comp = comparator(b, a);
830
- // b is considered the new max if the comparator declares them equal, but
831
- // they are not equal and b is in fact a nullish value.
832
- return (
833
- (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) ||
834
- comp > 0
835
- );
836
- }
837
-
838
- function zipWithFactory(keyIter, zipper, iters, zipAll) {
839
- var zipSequence = makeSequence(keyIter);
840
- var sizes = new ArraySeq(iters).map(function (i) { return i.size; });
841
- zipSequence.size = zipAll ? sizes.max() : sizes.min();
842
- // Note: this a generic base implementation of __iterate in terms of
843
- // __iterator which may be more generically useful in the future.
844
- zipSequence.__iterate = function (fn, reverse) {
845
- /* generic:
846
- var iterator = this.__iterator(ITERATE_ENTRIES, reverse);
847
- var step;
848
- var iterations = 0;
849
- while (!(step = iterator.next()).done) {
850
- iterations++;
851
- if (fn(step.value[1], step.value[0], this) === false) {
852
- break;
853
- }
854
- }
855
- return iterations;
856
- */
857
- // indexed:
858
- var iterator = this.__iterator(ITERATE_VALUES, reverse);
859
- var step;
860
- var iterations = 0;
861
- while (!(step = iterator.next()).done) {
862
- if (fn(step.value, iterations++, this) === false) {
863
- break;
864
- }
865
- }
866
- return iterations;
867
- };
868
- zipSequence.__iteratorUncached = function (type, reverse) {
869
- var iterators = iters.map(
870
- function (i) { return ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)); }
871
- );
872
- var iterations = 0;
873
- var isDone = false;
874
- return new Iterator(function () {
875
- var steps;
876
- if (!isDone) {
877
- steps = iterators.map(function (i) { return i.next(); });
878
- isDone = zipAll ? steps.every(function (s) { return s.done; }) : steps.some(function (s) { return s.done; });
879
- }
880
- if (isDone) {
881
- return iteratorDone();
882
- }
883
- return iteratorValue(
884
- type,
885
- iterations++,
886
- zipper.apply(
887
- null,
888
- steps.map(function (s) { return s.value; })
889
- )
890
- );
891
- });
892
- };
893
- return zipSequence;
894
- }
895
-
896
- // #pragma Helper Functions
897
-
898
- function reify(iter, seq) {
899
- return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq);
900
- }
901
-
902
- function validateEntry(entry) {
903
- if (entry !== Object(entry)) {
904
- throw new TypeError('Expected [K, V] tuple: ' + entry);
905
- }
906
- }
907
-
908
- function collectionClass(collection) {
909
- return isKeyed(collection)
910
- ? KeyedCollection
911
- : isIndexed(collection)
912
- ? IndexedCollection
913
- : SetCollection;
914
- }
915
-
916
- function makeSequence(collection) {
917
- return Object.create(
918
- (isKeyed(collection)
919
- ? KeyedSeq
920
- : isIndexed(collection)
921
- ? IndexedSeq
922
- : SetSeq
923
- ).prototype
924
- );
925
- }
926
-
927
- function cacheResultThrough() {
928
- if (this._iter.cacheResult) {
929
- this._iter.cacheResult();
930
- this.size = this._iter.size;
931
- return this;
932
- }
933
- return Seq.prototype.cacheResult.call(this);
934
- }
935
-
936
- function defaultComparator(a, b) {
937
- if (a === undefined && b === undefined) {
938
- return 0;
939
- }
940
-
941
- if (a === undefined) {
942
- return 1;
943
- }
944
-
945
- if (b === undefined) {
946
- return -1;
947
- }
948
-
949
- return a > b ? 1 : a < b ? -1 : 0;
950
- }
951
-
952
- export { FromEntriesSequence, ToIndexedSequence, ToKeyedSequence, ToSetSequence, concatFactory, countByFactory, filterFactory, flatMapFactory, flattenFactory, flipFactory, groupByFactory, interposeFactory, mapFactory, maxFactory, partitionFactory, reify, reverseFactory, skipWhileFactory, sliceFactory, sortFactory, takeWhileFactory, zipWithFactory };