tutuca 0.9.71 → 0.9.72

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.
@@ -0,0 +1,4333 @@
1
+ // @license MIT Copyright (c) 2014-present, Lee Byron and other contributors.
2
+ function invariant(condition, error) {
3
+ if (!condition) throw new Error(error);
4
+ }
5
+ function assertNotInfinite(size) {
6
+ invariant(size !== Infinity, "Cannot perform this action with an infinite size.");
7
+ }
8
+ function reduce(collection, reducer, reduction, context, useFirst, reverse) {
9
+ assertNotInfinite(collection.size);
10
+ collection.__iterate((v, k, c) => {
11
+ if (useFirst) {
12
+ useFirst = false;
13
+ reduction = v;
14
+ } else {
15
+ reduction = reducer.call(context, reduction, v, k, c);
16
+ }
17
+ }, reverse);
18
+ return reduction;
19
+ }
20
+ const keyMapper = (v, k) => k;
21
+ const entryMapper = (v, k) => [ k, v ];
22
+ const not = predicate => function(...args) {
23
+ return !predicate.apply(this, args);
24
+ };
25
+ const neg = predicate => function(...args) {
26
+ return -predicate.apply(this, args);
27
+ };
28
+ function defaultComparator(a, b) {
29
+ if (a === undefined && b === undefined) {
30
+ return 0;
31
+ }
32
+ if (a === undefined) {
33
+ return 1;
34
+ }
35
+ if (b === undefined) {
36
+ return -1;
37
+ }
38
+ return a > b ? 1 : a < b ? -1 : 0;
39
+ }
40
+ const defaultNegComparator = (a, b) => a < b ? 1 : a > b ? -1 : 0;
41
+ const DONE = {
42
+ done: true,
43
+ value: undefined
44
+ };
45
+ class Iter {
46
+ constructor(next) {
47
+ this.next = next;
48
+ }
49
+ [Symbol.iterator]() {
50
+ return this;
51
+ }
52
+ }
53
+ function makeIterator(next) {
54
+ return new Iter(next);
55
+ }
56
+ function makeEntryIterator(next) {
57
+ const entry = [ undefined, undefined ];
58
+ const result = {
59
+ done: false,
60
+ value: undefined
61
+ };
62
+ return makeIterator(() => {
63
+ if (next(entry)) {
64
+ result.value = [ entry[0], entry[1] ];
65
+ return result;
66
+ }
67
+ return DONE;
68
+ });
69
+ }
70
+ const EMPTY_ITERATOR = makeIterator(() => DONE);
71
+ const emptyIterator = () => EMPTY_ITERATOR;
72
+ function makeIndexKeys(size) {
73
+ let i = 0;
74
+ const result = {
75
+ done: false,
76
+ value: undefined
77
+ };
78
+ return makeIterator(() => {
79
+ if (i === size) return DONE;
80
+ result.value = i++;
81
+ return result;
82
+ });
83
+ }
84
+ function mapEntries(source, transform) {
85
+ return makeEntryIterator(entry => {
86
+ const step = source.next();
87
+ if (step.done) return false;
88
+ transform(step.value[0], step.value[1], entry);
89
+ return true;
90
+ });
91
+ }
92
+ function hasIterator(maybeIterable) {
93
+ if (Array.isArray(maybeIterable)) {
94
+ return true;
95
+ }
96
+ return !!getIteratorFn(maybeIterable);
97
+ }
98
+ const isIterator = maybeIterator => typeof maybeIterator?.next === "function";
99
+ function getIterator(iterable) {
100
+ const iteratorFn = getIteratorFn(iterable);
101
+ return iteratorFn?.call(iterable);
102
+ }
103
+ function getIteratorFn(iterable) {
104
+ const iteratorFn = iterable?.[Symbol.iterator];
105
+ if (typeof iteratorFn === "function") {
106
+ return iteratorFn;
107
+ }
108
+ }
109
+ function isEntriesIterable(maybeIterable) {
110
+ const iteratorFn = getIteratorFn(maybeIterable);
111
+ return iteratorFn && iteratorFn === maybeIterable.entries;
112
+ }
113
+ function isKeysIterable(maybeIterable) {
114
+ const iteratorFn = getIteratorFn(maybeIterable);
115
+ return iteratorFn && iteratorFn === maybeIterable.keys;
116
+ }
117
+ const DELETE = "delete";
118
+ const SHIFT = 5;
119
+ const SIZE = 1 << SHIFT;
120
+ const MASK = SIZE - 1;
121
+ const NOT_SET = {};
122
+ const MakeRef = () => ({
123
+ value: false
124
+ });
125
+ function SetRef(ref) {
126
+ if (ref) {
127
+ ref.value = true;
128
+ }
129
+ }
130
+ class OwnerID {}
131
+ function ensureSize(iter) {
132
+ if (iter.size === undefined) {
133
+ iter.size = iter.__iterate(returnTrue);
134
+ }
135
+ return iter.size;
136
+ }
137
+ function wrapIndex(iter, index) {
138
+ if (typeof index !== "number") {
139
+ const uint32Index = index >>> 0;
140
+ if (String(uint32Index) !== index || uint32Index === 4294967295) {
141
+ return NaN;
142
+ }
143
+ index = uint32Index;
144
+ }
145
+ return index < 0 ? ensureSize(iter) + index : index;
146
+ }
147
+ const returnTrue = () => true;
148
+ const isNeg = value => value < 0 || Object.is(value, -0);
149
+ const wholeSlice = (begin, end, size) => (begin === 0 && !isNeg(begin) || size !== undefined && (begin ?? 0) <= -size) && (end === undefined || size !== undefined && end >= size);
150
+ const resolveIndex = (index, size, defaultIndex) => index === undefined ? defaultIndex : isNeg(index) ? size === Infinity ? size : Math.max(0, size + index) | 0 : size === undefined || size === index ? index : Math.min(size, index) | 0;
151
+ const resolveBegin = (begin, size) => resolveIndex(begin, size, 0);
152
+ const resolveEnd = (end, size) => resolveIndex(end, size, size);
153
+ const IS_COLLECTION_SYMBOL = "@@__IMMUTABLE_ITERABLE__@@";
154
+ const IS_KEYED_SYMBOL = "@@__IMMUTABLE_KEYED__@@";
155
+ const IS_INDEXED_SYMBOL = "@@__IMMUTABLE_INDEXED__@@";
156
+ const IS_ORDERED_SYMBOL = "@@__IMMUTABLE_ORDERED__@@";
157
+ const IS_SEQ_SYMBOL = "@@__IMMUTABLE_SEQ__@@";
158
+ const IS_LIST_SYMBOL = "@@__IMMUTABLE_LIST__@@";
159
+ const IS_MAP_SYMBOL = "@@__IMMUTABLE_MAP__@@";
160
+ const IS_SET_SYMBOL = "@@__IMMUTABLE_SET__@@";
161
+ const IS_STACK_SYMBOL = "@@__IMMUTABLE_STACK__@@";
162
+ const IS_RECORD_SYMBOL = "@@__IMMUTABLE_RECORD__@@";
163
+ function hasSymbol(v, symbol) {
164
+ return typeof v === "object" && v !== null && symbol in v;
165
+ }
166
+ const isCollection = v => hasSymbol(v, IS_COLLECTION_SYMBOL);
167
+ const isKeyed = v => hasSymbol(v, IS_KEYED_SYMBOL);
168
+ const isIndexed = v => hasSymbol(v, IS_INDEXED_SYMBOL);
169
+ const isAssociative = v => isKeyed(v) || isIndexed(v);
170
+ const isOrdered = v => hasSymbol(v, IS_ORDERED_SYMBOL);
171
+ const isSeq = v => hasSymbol(v, IS_SEQ_SYMBOL);
172
+ const isList = v => hasSymbol(v, IS_LIST_SYMBOL);
173
+ const isMap = v => hasSymbol(v, IS_MAP_SYMBOL);
174
+ const isSet = v => hasSymbol(v, IS_SET_SYMBOL);
175
+ const isStack = v => hasSymbol(v, IS_STACK_SYMBOL);
176
+ const isRecord = v => hasSymbol(v, IS_RECORD_SYMBOL);
177
+ const isImmutable = v => isCollection(v) || isRecord(v);
178
+ const isOrderedMap = v => isMap(v) && isOrdered(v);
179
+ const isOrderedSet = v => isSet(v) && isOrdered(v);
180
+ const isValueObject = v => typeof v === "object" && v !== null && typeof v.equals === "function" && typeof v.hashCode === "function";
181
+ function flipFactory(collection) {
182
+ const flipSequence = makeSequence(collection);
183
+ flipSequence._iter = collection;
184
+ flipSequence.size = collection.size;
185
+ flipSequence.flip = () => collection;
186
+ flipSequence.reverse = function() {
187
+ const reversedSequence = collection.reverse.call(this);
188
+ reversedSequence.flip = () => collection.reverse();
189
+ return reversedSequence;
190
+ };
191
+ flipSequence.has = key => collection.includes(key);
192
+ flipSequence.includes = key => collection.has(key);
193
+ flipSequence.cacheResult = cacheResultThrough;
194
+ flipSequence.__iterate = function(fn, reverse) {
195
+ return collection.__iterate((v, k) => fn(k, v, this), reverse);
196
+ };
197
+ flipSequence.__iteratorUncached = reverse => mapEntries(collection.__iterator(reverse), (k, v, entry) => {
198
+ entry[0] = v;
199
+ entry[1] = k;
200
+ });
201
+ return flipSequence;
202
+ }
203
+ function mapFactory(collection, mapper, context) {
204
+ const mappedSequence = makeSequence(collection);
205
+ mappedSequence.size = collection.size;
206
+ mappedSequence.has = key => collection.has(key);
207
+ mappedSequence.get = (key, notSetValue) => {
208
+ const v = collection.get(key, NOT_SET);
209
+ return v === NOT_SET ? notSetValue : mapper.call(context, v, key, collection);
210
+ };
211
+ mappedSequence.__iterate = function(fn, reverse) {
212
+ return collection.__iterate((v, k) => fn(mapper.call(context, v, k, collection), k, this), reverse);
213
+ };
214
+ mappedSequence.__iteratorUncached = reverse => mapEntries(collection.__iterator(reverse), (k, v, entry) => {
215
+ entry[0] = k;
216
+ entry[1] = mapper.call(context, v, k, collection);
217
+ });
218
+ return mappedSequence;
219
+ }
220
+ function reverseFactory(collection, useKeys) {
221
+ const reversedSequence = makeSequence(collection);
222
+ reversedSequence._iter = collection;
223
+ reversedSequence.size = collection.size;
224
+ reversedSequence.reverse = () => collection;
225
+ if (collection.flip) {
226
+ reversedSequence.flip = function() {
227
+ const flipSequence = flipFactory(collection);
228
+ flipSequence.reverse = () => collection.flip();
229
+ return flipSequence;
230
+ };
231
+ }
232
+ reversedSequence.get = (key, notSetValue) => collection.get(useKeys ? key : -1 - key, notSetValue);
233
+ reversedSequence.has = key => collection.has(useKeys ? key : -1 - key);
234
+ reversedSequence.includes = value => collection.includes(value);
235
+ reversedSequence.cacheResult = cacheResultThrough;
236
+ reversedSequence.__iterate = function(fn, reverse) {
237
+ let i = 0;
238
+ if (reverse) {
239
+ ensureSize(collection);
240
+ }
241
+ return collection.__iterate((v, k) => fn(v, useKeys ? k : reverse ? this.size - ++i : i++, this), !reverse);
242
+ };
243
+ reversedSequence.__iteratorUncached = function(reverse) {
244
+ let i = 0;
245
+ if (reverse) {
246
+ ensureSize(collection);
247
+ }
248
+ const size = this.size;
249
+ return mapEntries(collection.__iterator(!reverse), (k, v, entry) => {
250
+ entry[0] = useKeys ? k : reverse ? size - ++i : i++;
251
+ entry[1] = v;
252
+ });
253
+ };
254
+ return reversedSequence;
255
+ }
256
+ function sliceFactory(collection, begin, end, useKeys) {
257
+ const originalSize = collection.size;
258
+ if (wholeSlice(begin, end, originalSize)) {
259
+ return collection;
260
+ }
261
+ if (originalSize === undefined && (begin < 0 || end < 0)) {
262
+ return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys);
263
+ }
264
+ const resolvedBegin = resolveBegin(begin, originalSize);
265
+ const resolvedEnd = resolveEnd(end, originalSize);
266
+ const resolvedSize = resolvedEnd - resolvedBegin;
267
+ let sliceSize;
268
+ if (!Number.isNaN(resolvedSize)) {
269
+ sliceSize = Math.max(0, resolvedSize);
270
+ }
271
+ const sliceSeq = makeSequence(collection);
272
+ sliceSeq.size = sliceSize === 0 ? sliceSize : collection.size && sliceSize || undefined;
273
+ if (!useKeys && isSeq(collection) && sliceSize >= 0) {
274
+ sliceSeq.get = function(index, notSetValue) {
275
+ index = wrapIndex(this, index);
276
+ return index >= 0 && index < sliceSize ? collection.get(index + resolvedBegin, notSetValue) : notSetValue;
277
+ };
278
+ }
279
+ sliceSeq.__iterateUncached = function(fn, reverse) {
280
+ if (sliceSize !== 0 && reverse) {
281
+ return this.cacheResult().__iterate(fn, reverse);
282
+ }
283
+ if (sliceSize === 0) {
284
+ return 0;
285
+ }
286
+ let skipped = 0;
287
+ let iterations = 0;
288
+ collection.__iterate((v, k) => {
289
+ if (skipped < resolvedBegin) {
290
+ skipped++;
291
+ return;
292
+ }
293
+ if (sliceSize !== undefined && iterations >= sliceSize) {
294
+ return false;
295
+ }
296
+ iterations++;
297
+ if (fn(v, useKeys ? k : iterations - 1, this) === false) {
298
+ return false;
299
+ }
300
+ }, reverse);
301
+ return iterations;
302
+ };
303
+ sliceSeq.__iteratorUncached = function(reverse) {
304
+ if (sliceSize !== 0 && reverse) {
305
+ return this.cacheResult().__iterator(reverse);
306
+ }
307
+ if (sliceSize === 0) {
308
+ return emptyIterator();
309
+ }
310
+ const iterator = collection.__iterator(reverse);
311
+ let skipped = 0;
312
+ let iterations = 0;
313
+ if (useKeys) {
314
+ return makeIterator(() => {
315
+ while (skipped < resolvedBegin) {
316
+ skipped++;
317
+ iterator.next();
318
+ }
319
+ if (sliceSize !== undefined && iterations >= sliceSize) {
320
+ return DONE;
321
+ }
322
+ const step = iterator.next();
323
+ if (step.done) {
324
+ return step;
325
+ }
326
+ iterations++;
327
+ return step;
328
+ });
329
+ }
330
+ return makeEntryIterator(entry => {
331
+ while (skipped < resolvedBegin) {
332
+ skipped++;
333
+ iterator.next();
334
+ }
335
+ if (sliceSize !== undefined && iterations >= sliceSize) {
336
+ return false;
337
+ }
338
+ const step = iterator.next();
339
+ if (step.done) {
340
+ return false;
341
+ }
342
+ iterations++;
343
+ entry[0] = iterations - 1;
344
+ entry[1] = step.value[1];
345
+ return true;
346
+ });
347
+ };
348
+ return sliceSeq;
349
+ }
350
+ function sortFactory(collection, comparator, mapper) {
351
+ if (!comparator) {
352
+ comparator = defaultComparator;
353
+ }
354
+ const isKeyedCollection = isKeyed(collection);
355
+ let index = 0;
356
+ const entries = collection.toSeq().map((v, k) => [ k, v, index++, mapper ? mapper(v, k, collection) : v ]).valueSeq().toArray();
357
+ entries.sort((a, b) => comparator(a[3], b[3]) || a[2] - b[2]).forEach(isKeyedCollection ? (v, i) => {
358
+ entries[i].length = 2;
359
+ } : (v, i) => {
360
+ entries[i] = v[1];
361
+ });
362
+ return isKeyedCollection ? KeyedSeq(entries) : isIndexed(collection) ? IndexedSeq(entries) : SetSeq(entries);
363
+ }
364
+ function maxFactory(collection, comparator, mapper) {
365
+ if (!comparator) {
366
+ comparator = defaultComparator;
367
+ }
368
+ if (mapper) {
369
+ const entry = collection.toSeq().map((v, k) => [ v, mapper(v, k, collection) ]).reduce((a, b) => maxCompare(comparator, a[1], b[1]) ? b : a);
370
+ return entry?.[0];
371
+ }
372
+ return collection.reduce((a, b) => maxCompare(comparator, a, b) ? b : a);
373
+ }
374
+ function maxCompare(comparator, a, b) {
375
+ const comp = comparator(b, a);
376
+ return comp === 0 && b !== a && (b === undefined || b === null || Number.isNaN(b)) || comp > 0;
377
+ }
378
+ function zipWithFactory(keyIter, zipper, iters, zipAll) {
379
+ const zipSequence = makeSequence(keyIter);
380
+ const sizes = new ArraySeq(iters).map(i => i.size);
381
+ zipSequence.size = zipAll ? sizes.max() : sizes.min();
382
+ zipSequence.__iterate = function(fn, reverse) {
383
+ const iterator = this.__iterator(reverse);
384
+ let iterations = 0;
385
+ let step;
386
+ while (!(step = iterator.next()).done) {
387
+ if (fn(step.value[1], iterations++, this) === false) {
388
+ break;
389
+ }
390
+ }
391
+ return iterations;
392
+ };
393
+ zipSequence.__iteratorUncached = function(reverse) {
394
+ const iterators = iters.map(i => {
395
+ const col = Collection(i);
396
+ return getIterator(reverse ? col.reverse() : col);
397
+ });
398
+ let iterations = 0;
399
+ const steps = new Array(iterators.length);
400
+ const values = new Array(iterators.length);
401
+ return makeEntryIterator(entry => {
402
+ let done = zipAll;
403
+ for (let i = 0; i < iterators.length; i++) {
404
+ steps[i] = iterators[i].next();
405
+ done = zipAll ? done && steps[i].done : done || steps[i].done;
406
+ }
407
+ if (done) {
408
+ return false;
409
+ }
410
+ for (let i = 0; i < steps.length; i++) {
411
+ values[i] = steps[i].value;
412
+ }
413
+ entry[0] = iterations++;
414
+ entry[1] = zipper(...values);
415
+ return true;
416
+ });
417
+ };
418
+ return zipSequence;
419
+ }
420
+ function isArrayLike(value) {
421
+ if (Array.isArray(value) || typeof value === "string") {
422
+ return true;
423
+ }
424
+ return value && typeof value === "object" && Number.isInteger(value.length) && value.length >= 0 && (value.length === 0 ? Object.keys(value).length === 1 : Object.hasOwn(value, value.length - 1));
425
+ }
426
+ function isPlainObject(value) {
427
+ if (!value || typeof value !== "object" || Object.prototype.toString.call(value) !== "[object Object]") {
428
+ return false;
429
+ }
430
+ const proto = Object.getPrototypeOf(value);
431
+ if (proto === null) {
432
+ return true;
433
+ }
434
+ let parentProto = proto;
435
+ let nextProto = Object.getPrototypeOf(proto);
436
+ while (nextProto !== null) {
437
+ parentProto = nextProto;
438
+ nextProto = Object.getPrototypeOf(parentProto);
439
+ }
440
+ return parentProto === proto;
441
+ }
442
+ const isDataStructure = value => typeof value === "object" && (isImmutable(value) || Array.isArray(value) || isPlainObject(value));
443
+ function coerceKeyPath(keyPath) {
444
+ if (isArrayLike(keyPath) && typeof keyPath !== "string") {
445
+ return keyPath;
446
+ }
447
+ if (isOrdered(keyPath)) {
448
+ return keyPath.toArray();
449
+ }
450
+ throw new TypeError(`Invalid keyPath: expected Ordered Collection or Array: ${keyPath}`);
451
+ }
452
+ const has = (collection, key) => isImmutable(collection) ? collection.has(key) : isDataStructure(collection) && Object.hasOwn(collection, key);
453
+ function get(collection, key, notSetValue) {
454
+ return isImmutable(collection) ? collection.get(key, notSetValue) : !has(collection, key) ? notSetValue : typeof collection.get === "function" ? collection.get(key) : collection[key];
455
+ }
456
+ function getIn$1(collection, searchKeyPath, notSetValue) {
457
+ const keyPath = coerceKeyPath(searchKeyPath);
458
+ let i = 0;
459
+ while (i !== keyPath.length) {
460
+ collection = get(collection, keyPath[i++], NOT_SET);
461
+ if (collection === NOT_SET) {
462
+ return notSetValue;
463
+ }
464
+ }
465
+ return collection;
466
+ }
467
+ const hasIn$1 = (collection, keyPath) => getIn$1(collection, keyPath, NOT_SET) !== NOT_SET;
468
+ function is(valueA, valueB) {
469
+ if (valueA === valueB || Number.isNaN(valueA) && Number.isNaN(valueB)) {
470
+ return true;
471
+ }
472
+ if (!valueA || !valueB) {
473
+ return false;
474
+ }
475
+ if (typeof valueA.valueOf === "function" && typeof valueB.valueOf === "function") {
476
+ valueA = valueA.valueOf();
477
+ valueB = valueB.valueOf();
478
+ if (valueA === valueB || Number.isNaN(valueA) && Number.isNaN(valueB)) {
479
+ return true;
480
+ }
481
+ if (!valueA || !valueB) {
482
+ return false;
483
+ }
484
+ }
485
+ return !!(isValueObject(valueA) && isValueObject(valueB) && valueA.equals(valueB));
486
+ }
487
+ function toJS(value) {
488
+ if (!value || typeof value !== "object") {
489
+ return value;
490
+ }
491
+ if (!isCollection(value)) {
492
+ if (!isDataStructure(value)) {
493
+ return value;
494
+ }
495
+ value = Seq(value);
496
+ }
497
+ if (isKeyed(value)) {
498
+ const result = {};
499
+ value.__iterate((v, k) => {
500
+ result[String(k)] = toJS(v);
501
+ });
502
+ return result;
503
+ }
504
+ const result = [];
505
+ value.__iterate(v => {
506
+ result.push(toJS(v));
507
+ });
508
+ return result;
509
+ }
510
+ function deepEqual(a, b) {
511
+ if (a === b) {
512
+ return true;
513
+ }
514
+ if (!isCollection(b) || a.size !== undefined && b.size !== undefined && a.size !== b.size || a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash || isKeyed(a) !== isKeyed(b) || isIndexed(a) !== isIndexed(b) || isOrdered(a) !== isOrdered(b)) {
515
+ return false;
516
+ }
517
+ if (a.size === 0 && b.size === 0) {
518
+ return true;
519
+ }
520
+ const notAssociative = !isAssociative(a);
521
+ if (isOrdered(a)) {
522
+ const entries = a.entries();
523
+ return !!(b.every((v, k) => {
524
+ const entry = entries.next().value;
525
+ return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));
526
+ }) && entries.next().done);
527
+ }
528
+ let flipped = false;
529
+ if (a.size === undefined) {
530
+ if (b.size === undefined) {
531
+ if (typeof a.cacheResult === "function") {
532
+ a.cacheResult();
533
+ }
534
+ } else {
535
+ flipped = true;
536
+ const _ = a;
537
+ a = b;
538
+ b = _;
539
+ }
540
+ }
541
+ let allEqual = true;
542
+ const bSize = b.__iterate((v, k) => {
543
+ if (notAssociative ? !a.has(v) : flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) {
544
+ allEqual = false;
545
+ return false;
546
+ }
547
+ return true;
548
+ });
549
+ return allEqual && a.size === bSize;
550
+ }
551
+ const smi = i32 => i32 >>> 1 & 1073741824 | i32 & 3221225471;
552
+ function hash(o) {
553
+ if (o === null || o === undefined) {
554
+ return hashNullish(o);
555
+ }
556
+ if (typeof o.hashCode === "function") {
557
+ return smi(o.hashCode(o));
558
+ }
559
+ const v = valueOf(o);
560
+ if (v === null || v === undefined) {
561
+ return hashNullish(v);
562
+ }
563
+ switch (typeof v) {
564
+ case "boolean":
565
+ return v ? 1108378657 : 1108378656;
566
+ case "number":
567
+ return hashNumber(v);
568
+ case "string":
569
+ return v.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(v) : hashString(v);
570
+ case "object":
571
+ case "function":
572
+ return hashJSObj(v);
573
+ case "symbol":
574
+ return hashSymbol(v);
575
+ default:
576
+ if (typeof v.toString === "function") {
577
+ return hashString(v.toString());
578
+ }
579
+ throw new Error(`Value type ${typeof v} cannot be hashed.`);
580
+ }
581
+ }
582
+ const hashNullish = nullish => nullish === null ? 1108378658 : 1108378659;
583
+ function hashNumber(n) {
584
+ if (Number.isNaN(n) || n === Infinity) {
585
+ return 0;
586
+ }
587
+ let hash = n | 0;
588
+ if (hash !== n) {
589
+ hash ^= n * 4294967295;
590
+ }
591
+ while (n > 4294967295) {
592
+ n /= 4294967295;
593
+ hash ^= n;
594
+ }
595
+ return smi(hash);
596
+ }
597
+ function cachedHashString(string) {
598
+ let hashed = stringHashCache[string];
599
+ if (hashed === undefined) {
600
+ hashed = hashString(string);
601
+ if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {
602
+ STRING_HASH_CACHE_SIZE = 0;
603
+ stringHashCache = {};
604
+ }
605
+ STRING_HASH_CACHE_SIZE++;
606
+ stringHashCache[string] = hashed;
607
+ }
608
+ return hashed;
609
+ }
610
+ function hashString(string) {
611
+ let hashed = 0;
612
+ for (let ii = 0; ii < string.length; ii++) {
613
+ hashed = 31 * hashed + string.charCodeAt(ii) | 0;
614
+ }
615
+ return smi(hashed);
616
+ }
617
+ function hashSymbol(sym) {
618
+ let hashed = symbolMap[sym];
619
+ if (hashed !== undefined) {
620
+ return hashed;
621
+ }
622
+ hashed = nextHash();
623
+ symbolMap[sym] = hashed;
624
+ return hashed;
625
+ }
626
+ function hashJSObj(obj) {
627
+ let hashed = weakMap.get(obj);
628
+ if (hashed !== undefined) {
629
+ return hashed;
630
+ }
631
+ hashed = nextHash();
632
+ weakMap.set(obj, hashed);
633
+ return hashed;
634
+ }
635
+ const valueOf = obj => obj.valueOf !== Object.prototype.valueOf ? obj.valueOf() : obj;
636
+ function nextHash() {
637
+ const nextHash = ++_objHashUID;
638
+ if (_objHashUID & 1073741824) {
639
+ _objHashUID = 0;
640
+ }
641
+ return nextHash;
642
+ }
643
+ const weakMap = new WeakMap;
644
+ const symbolMap = Object.create(null);
645
+ let _objHashUID = 0;
646
+ const STRING_HASH_CACHE_MIN_STRLEN = 16;
647
+ const STRING_HASH_CACHE_MAX_SIZE = 255;
648
+ let STRING_HASH_CACHE_SIZE = 0;
649
+ let stringHashCache = {};
650
+ function hashCollection(collection) {
651
+ if (collection.size === Infinity) {
652
+ return 0;
653
+ }
654
+ const ordered = isOrdered(collection);
655
+ const keyed = isKeyed(collection);
656
+ let h = ordered ? 1 : 0;
657
+ collection.__iterate(keyed ? ordered ? (v, k) => {
658
+ h = 31 * h + hashMerge(hash(v), hash(k)) | 0;
659
+ } : (v, k) => {
660
+ h = h + hashMerge(hash(v), hash(k)) | 0;
661
+ } : ordered ? v => {
662
+ h = 31 * h + hash(v) | 0;
663
+ } : v => {
664
+ h = h + hash(v) | 0;
665
+ });
666
+ return murmurHashOfSize(collection.size, h);
667
+ }
668
+ const hashMerge = (a, b) => a ^ b + 2654435769 + (a << 6) + (a >> 2) | 0;
669
+ function murmurHashOfSize(size, h) {
670
+ h = Math.imul(h, 3432918353);
671
+ h = Math.imul(h << 15 | h >>> -15, 461845907);
672
+ h = Math.imul(h << 13 | h >>> -13, 5);
673
+ h = (h + 3864292196 | 0) ^ size;
674
+ h = Math.imul(h ^ h >>> 16, 2246822507);
675
+ h = Math.imul(h ^ h >>> 13, 3266489909);
676
+ h = smi(h ^ h >>> 16);
677
+ return h;
678
+ }
679
+ function quoteString(value) {
680
+ try {
681
+ return typeof value === "string" ? JSON.stringify(value) : String(value);
682
+ } catch {
683
+ return JSON.stringify(value);
684
+ }
685
+ }
686
+ const reify = (iter, seq) => iter === seq ? iter : isSeq(iter) ? seq : iter.create ? iter.create(seq) : iter.constructor(seq);
687
+ const reifyValues = (collection, arr) => reify(collection, (isKeyed(collection) ? KeyedCollection : isIndexed(collection) ? IndexedCollection : SetCollection)(arr));
688
+ const defaultZipper = (...values) => values;
689
+ const Collection = value => isCollection(value) ? value : Seq(value);
690
+ class CollectionImpl {
691
+ size=0;
692
+ static {
693
+ this.prototype[IS_COLLECTION_SYMBOL] = true;
694
+ this.prototype.__toStringMapper = quoteString;
695
+ this.prototype[Symbol.iterator] = this.prototype.values;
696
+ this.prototype.toJSON = this.prototype.toArray;
697
+ this.prototype.contains = this.prototype.includes;
698
+ }
699
+ equals(other) {
700
+ return deepEqual(this, other);
701
+ }
702
+ hashCode() {
703
+ return this.__hash ?? (this.__hash = hashCollection(this));
704
+ }
705
+ toArray() {
706
+ assertNotInfinite(this.size);
707
+ const array = new Array(this.size || 0);
708
+ const useTuples = isKeyed(this);
709
+ let i = 0;
710
+ this.__iterate((v, k) => {
711
+ array[i++] = useTuples ? [ k, v ] : v;
712
+ });
713
+ return array;
714
+ }
715
+ toIndexedSeq() {
716
+ return new ToIndexedSequence(this);
717
+ }
718
+ toJS() {
719
+ return toJS(this);
720
+ }
721
+ toKeyedSeq() {
722
+ return new ToKeyedSequence(this, true);
723
+ }
724
+ toMap() {
725
+ throw new Error("toMap: not patched — import CollectionConversions");
726
+ }
727
+ toObject() {
728
+ assertNotInfinite(this.size);
729
+ const object = {};
730
+ this.__iterate((v, k) => {
731
+ object[k] = v;
732
+ });
733
+ return object;
734
+ }
735
+ toOrderedMap() {
736
+ throw new Error("toOrderedMap: not patched — import CollectionConversions");
737
+ }
738
+ toOrderedSet() {
739
+ throw new Error("toOrderedSet: not patched — import CollectionConversions");
740
+ }
741
+ toSet() {
742
+ throw new Error("toSet: not patched — import CollectionConversions");
743
+ }
744
+ toSetSeq() {
745
+ return new ToSetSequence(this);
746
+ }
747
+ toSeq() {
748
+ return isIndexed(this) ? this.toIndexedSeq() : isKeyed(this) ? this.toKeyedSeq() : this.toSetSeq();
749
+ }
750
+ toStack() {
751
+ throw new Error("toStack: not patched — import CollectionConversions");
752
+ }
753
+ toList() {
754
+ throw new Error("toList: not patched — import CollectionConversions");
755
+ }
756
+ toString() {
757
+ return "[Collection]";
758
+ }
759
+ __toString(head, tail) {
760
+ if (this.size === 0) {
761
+ return `${head}${tail}`;
762
+ }
763
+ return `${head} ${this.toSeq().map(this.__toStringMapper).join(", ")} ${tail}`;
764
+ }
765
+ concat(...values) {
766
+ const isKeyedCollection = isKeyed(this);
767
+ const iters = [ this, ...values ].map(v => {
768
+ if (!isCollection(v)) {
769
+ v = isKeyedCollection ? keyedSeqFromValue(v) : indexedSeqFromValue(Array.isArray(v) ? v : [ v ]);
770
+ } else if (isKeyedCollection) {
771
+ v = KeyedCollection(v);
772
+ }
773
+ return v;
774
+ }).filter(v => v.size !== 0);
775
+ if (iters.length === 0) {
776
+ return this;
777
+ }
778
+ if (iters.length === 1) {
779
+ const singleton = iters[0];
780
+ if (singleton === this || isKeyedCollection && isKeyed(singleton) || isIndexed(this) && isIndexed(singleton)) {
781
+ return singleton;
782
+ }
783
+ }
784
+ return reify(this, new ConcatSeq(iters));
785
+ }
786
+ includes(searchValue) {
787
+ return this.some(value => is(value, searchValue));
788
+ }
789
+ every(predicate, context) {
790
+ assertNotInfinite(this.size);
791
+ let returnValue = true;
792
+ this.__iterate((v, k, c) => {
793
+ if (!predicate.call(context, v, k, c)) {
794
+ returnValue = false;
795
+ return false;
796
+ }
797
+ });
798
+ return returnValue;
799
+ }
800
+ entries() {
801
+ return this.__iterator();
802
+ }
803
+ filter(predicate, context) {
804
+ const collection = this;
805
+ const useKeys = isKeyed(this);
806
+ const filterSequence = makeSequence(collection);
807
+ if (useKeys) {
808
+ filterSequence.has = key => {
809
+ const v = collection.get(key, NOT_SET);
810
+ return v !== NOT_SET && !!predicate.call(context, v, key, collection);
811
+ };
812
+ filterSequence.get = (key, notSetValue) => {
813
+ const v = collection.get(key, NOT_SET);
814
+ return v !== NOT_SET && predicate.call(context, v, key, collection) ? v : notSetValue;
815
+ };
816
+ }
817
+ filterSequence.__iterateUncached = function(fn, reverse) {
818
+ let iterations = 0;
819
+ collection.__iterate((v, k) => {
820
+ if (predicate.call(context, v, k, collection)) {
821
+ iterations++;
822
+ return fn(v, useKeys ? k : iterations - 1, this);
823
+ }
824
+ }, reverse);
825
+ return iterations;
826
+ };
827
+ filterSequence.__iteratorUncached = function(reverse) {
828
+ const iterator = collection.__iterator(reverse);
829
+ let iterations = 0;
830
+ return makeEntryIterator(entry => {
831
+ while (true) {
832
+ const step = iterator.next();
833
+ if (step.done) {
834
+ return false;
835
+ }
836
+ const k = step.value[0];
837
+ const v = step.value[1];
838
+ if (predicate.call(context, v, k, collection)) {
839
+ entry[0] = useKeys ? k : iterations++;
840
+ entry[1] = v;
841
+ return true;
842
+ }
843
+ }
844
+ });
845
+ };
846
+ return reify(this, filterSequence);
847
+ }
848
+ partition(predicate, context) {
849
+ const isKeyedIter = isKeyed(this);
850
+ const groups = [ [], [] ];
851
+ this.__iterate((v, k) => {
852
+ groups[predicate.call(context, v, k, this) ? 1 : 0].push(isKeyedIter ? [ k, v ] : v);
853
+ });
854
+ return groups.map(arr => reifyValues(this, arr));
855
+ }
856
+ find(predicate, context, notSetValue) {
857
+ const entry = this.findEntry(predicate, context);
858
+ return entry ? entry[1] : notSetValue;
859
+ }
860
+ forEach(sideEffect, context) {
861
+ assertNotInfinite(this.size);
862
+ return this.__iterate(context ? sideEffect.bind(context) : sideEffect);
863
+ }
864
+ join(separator) {
865
+ assertNotInfinite(this.size);
866
+ separator = separator !== undefined ? String(separator) : ",";
867
+ let joined = "";
868
+ let isFirst = true;
869
+ this.__iterate(v => {
870
+ if (isFirst) {
871
+ isFirst = false;
872
+ } else {
873
+ joined += separator;
874
+ }
875
+ joined += v !== null && v !== undefined ? String(v) : "";
876
+ });
877
+ return joined;
878
+ }
879
+ keys() {
880
+ const iterator = this.__iterator();
881
+ const result = {
882
+ done: false,
883
+ value: undefined
884
+ };
885
+ return makeIterator(() => {
886
+ const step = iterator.next();
887
+ if (step.done) {
888
+ return DONE;
889
+ }
890
+ result.value = step.value[0];
891
+ return result;
892
+ });
893
+ }
894
+ map(mapper, context) {
895
+ return reify(this, mapFactory(this, mapper, context));
896
+ }
897
+ reduce(reducer, initialReduction = NOT_SET, context) {
898
+ return reduce(this, reducer, initialReduction, context, initialReduction === NOT_SET, false);
899
+ }
900
+ reduceRight(reducer, initialReduction = NOT_SET, context) {
901
+ return reduce(this, reducer, initialReduction, context, initialReduction === NOT_SET, true);
902
+ }
903
+ reverse() {
904
+ return reify(this, reverseFactory(this, isKeyed(this)));
905
+ }
906
+ slice(begin, end) {
907
+ return reify(this, sliceFactory(this, begin, end, isKeyed(this)));
908
+ }
909
+ some(predicate, context) {
910
+ assertNotInfinite(this.size);
911
+ let returnValue = false;
912
+ this.__iterate((v, k, c) => {
913
+ if (predicate.call(context, v, k, c)) {
914
+ returnValue = true;
915
+ return false;
916
+ }
917
+ });
918
+ return returnValue;
919
+ }
920
+ sort(comparator) {
921
+ return reify(this, sortFactory(this, comparator));
922
+ }
923
+ values() {
924
+ const iterator = this.__iterator();
925
+ const result = {
926
+ done: false,
927
+ value: undefined
928
+ };
929
+ return makeIterator(() => {
930
+ const step = iterator.next();
931
+ if (step.done) {
932
+ return DONE;
933
+ }
934
+ result.value = step.value[1];
935
+ return result;
936
+ });
937
+ }
938
+ butLast() {
939
+ return this.slice(0, -1);
940
+ }
941
+ isEmpty() {
942
+ return this.size !== undefined ? this.size === 0 : !this.some(() => true);
943
+ }
944
+ count(predicate, context) {
945
+ return ensureSize(predicate ? this.toSeq().filter(predicate, context) : this);
946
+ }
947
+ countBy(_grouper, _context) {
948
+ throw new Error("countBy: not patched — import CollectionConversions");
949
+ }
950
+ entrySeq() {
951
+ const collection = this;
952
+ if (collection._cache) {
953
+ return new ArraySeq(collection._cache);
954
+ }
955
+ const entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq();
956
+ entriesSequence.fromEntrySeq = () => collection.toSeq();
957
+ return entriesSequence;
958
+ }
959
+ filterNot(predicate, context) {
960
+ return this.filter(not(predicate), context);
961
+ }
962
+ findEntry(predicate, context, notSetValue) {
963
+ let found = notSetValue;
964
+ this.__iterate((v, k, c) => {
965
+ if (predicate.call(context, v, k, c)) {
966
+ found = [ k, v ];
967
+ return false;
968
+ }
969
+ });
970
+ return found;
971
+ }
972
+ findKey(predicate, context) {
973
+ const entry = this.findEntry(predicate, context);
974
+ return entry?.[0];
975
+ }
976
+ findLast(predicate, context, notSetValue) {
977
+ return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);
978
+ }
979
+ findLastEntry(predicate, context, notSetValue) {
980
+ return this.toKeyedSeq().reverse().findEntry(predicate, context, notSetValue);
981
+ }
982
+ findLastKey(predicate, context) {
983
+ return this.toKeyedSeq().reverse().findKey(predicate, context);
984
+ }
985
+ first(notSetValue) {
986
+ return this.find(returnTrue, null, notSetValue);
987
+ }
988
+ flatMap(mapper, context) {
989
+ return reify(this, this.toSeq().map((v, k) => (isKeyed(this) ? KeyedCollection : isIndexed(this) ? IndexedCollection : SetCollection)(mapper.call(context, v, k, this))).flatten(true));
990
+ }
991
+ flatten(depth) {
992
+ const collection = this;
993
+ const useKeys = isKeyed(this);
994
+ const flatSequence = makeSequence(collection);
995
+ flatSequence.__iterateUncached = function(fn, reverse) {
996
+ if (reverse) {
997
+ return this.cacheResult().__iterate(fn, reverse);
998
+ }
999
+ let iterations = 0;
1000
+ let stopped = false;
1001
+ function flatDeep(iter, currentDepth) {
1002
+ iter.__iterate((v, k) => {
1003
+ if ((!depth || currentDepth < depth) && isCollection(v)) {
1004
+ flatDeep(v, currentDepth + 1);
1005
+ } else {
1006
+ iterations++;
1007
+ if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) {
1008
+ stopped = true;
1009
+ }
1010
+ }
1011
+ if (stopped) {
1012
+ return false;
1013
+ }
1014
+ }, reverse);
1015
+ }
1016
+ flatDeep(collection, 0);
1017
+ return iterations;
1018
+ };
1019
+ flatSequence.__iteratorUncached = function(reverse) {
1020
+ if (reverse) {
1021
+ return this.cacheResult().__iterator(reverse);
1022
+ }
1023
+ let iterations = 0;
1024
+ const stack = [ {
1025
+ iterator: collection.__iterator(reverse),
1026
+ depth: 0
1027
+ } ];
1028
+ return makeEntryIterator(entry => {
1029
+ while (stack.length > 0) {
1030
+ const frame = stack[stack.length - 1];
1031
+ const step = frame.iterator.next();
1032
+ if (step.done) {
1033
+ stack.pop();
1034
+ continue;
1035
+ }
1036
+ const v = step.value[1];
1037
+ if ((!depth || frame.depth < depth) && isCollection(v)) {
1038
+ stack.push({
1039
+ iterator: v.__iterator(reverse),
1040
+ depth: frame.depth + 1
1041
+ });
1042
+ continue;
1043
+ }
1044
+ entry[0] = useKeys ? step.value[0] : iterations++;
1045
+ entry[1] = v;
1046
+ return true;
1047
+ }
1048
+ return false;
1049
+ });
1050
+ };
1051
+ return reify(this, flatSequence);
1052
+ }
1053
+ fromEntrySeq() {
1054
+ return new FromEntriesSequence(this);
1055
+ }
1056
+ get(searchKey, notSetValue) {
1057
+ return this.find((_, key) => is(key, searchKey), undefined, notSetValue);
1058
+ }
1059
+ getIn(searchKeyPath, notSetValue) {
1060
+ return getIn$1(this, searchKeyPath, notSetValue);
1061
+ }
1062
+ groupBy(_grouper, _context) {
1063
+ throw new Error("groupBy: not patched — import CollectionConversions");
1064
+ }
1065
+ has(searchKey) {
1066
+ return this.get(searchKey, NOT_SET) !== NOT_SET;
1067
+ }
1068
+ hasIn(searchKeyPath) {
1069
+ return hasIn$1(this, searchKeyPath);
1070
+ }
1071
+ isSubset(iter) {
1072
+ const other = typeof iter.includes === "function" ? iter : Collection(iter);
1073
+ return this.every(value => other.includes(value));
1074
+ }
1075
+ isSuperset(iter) {
1076
+ const other = typeof iter.isSubset === "function" ? iter : Collection(iter);
1077
+ return other.isSubset(this);
1078
+ }
1079
+ keyOf(searchValue) {
1080
+ return this.findKey(value => is(value, searchValue));
1081
+ }
1082
+ keySeq() {
1083
+ return this.toSeq().map(keyMapper).toIndexedSeq();
1084
+ }
1085
+ last(notSetValue) {
1086
+ return this.toSeq().reverse().first(notSetValue);
1087
+ }
1088
+ lastKeyOf(searchValue) {
1089
+ return this.toKeyedSeq().reverse().keyOf(searchValue);
1090
+ }
1091
+ max(comparator) {
1092
+ return maxFactory(this, comparator);
1093
+ }
1094
+ maxBy(mapper, comparator) {
1095
+ return maxFactory(this, comparator, mapper);
1096
+ }
1097
+ min(comparator) {
1098
+ return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator);
1099
+ }
1100
+ minBy(mapper, comparator) {
1101
+ return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper);
1102
+ }
1103
+ rest() {
1104
+ return this.slice(1);
1105
+ }
1106
+ skip(amount) {
1107
+ return amount === 0 ? this : this.slice(Math.max(0, amount));
1108
+ }
1109
+ skipLast(amount) {
1110
+ return amount === 0 ? this : this.slice(0, -Math.max(0, amount));
1111
+ }
1112
+ skipWhile(predicate, context) {
1113
+ const collection = this;
1114
+ const useKeys = isKeyed(this);
1115
+ const skipSequence = makeSequence(collection);
1116
+ skipSequence.__iterateUncached = function(fn, reverse) {
1117
+ if (reverse) {
1118
+ return this.cacheResult().__iterate(fn, reverse);
1119
+ }
1120
+ let skipping = true;
1121
+ let iterations = 0;
1122
+ collection.__iterate((v, k) => {
1123
+ if (skipping && predicate.call(context, v, k, this)) {
1124
+ return;
1125
+ }
1126
+ skipping = false;
1127
+ iterations++;
1128
+ return fn(v, useKeys ? k : iterations - 1, this);
1129
+ }, reverse);
1130
+ return iterations;
1131
+ };
1132
+ skipSequence.__iteratorUncached = function(reverse) {
1133
+ if (reverse) {
1134
+ return this.cacheResult().__iterator(reverse);
1135
+ }
1136
+ const iterator = collection.__iterator(reverse);
1137
+ let iterations = 0;
1138
+ const seq = this;
1139
+ let skipping = true;
1140
+ return makeEntryIterator(entry => {
1141
+ while (true) {
1142
+ const step = iterator.next();
1143
+ if (step.done) {
1144
+ return false;
1145
+ }
1146
+ const k = step.value[0];
1147
+ const v = step.value[1];
1148
+ if (skipping && predicate.call(context, v, k, seq)) {
1149
+ continue;
1150
+ }
1151
+ skipping = false;
1152
+ entry[0] = useKeys ? k : iterations++;
1153
+ entry[1] = v;
1154
+ return true;
1155
+ }
1156
+ });
1157
+ };
1158
+ return reify(this, skipSequence);
1159
+ }
1160
+ skipUntil(predicate, context) {
1161
+ return this.skipWhile(not(predicate), context);
1162
+ }
1163
+ sortBy(mapper, comparator) {
1164
+ return reify(this, sortFactory(this, comparator, mapper));
1165
+ }
1166
+ take(amount) {
1167
+ return this.slice(0, Math.max(0, amount));
1168
+ }
1169
+ takeLast(amount) {
1170
+ return this.slice(-Math.max(0, amount));
1171
+ }
1172
+ takeWhile(predicate, context) {
1173
+ const collection = this;
1174
+ const takeSequence = makeSequence(collection);
1175
+ takeSequence.__iterateUncached = function(fn, reverse) {
1176
+ if (reverse) {
1177
+ return this.cacheResult().__iterate(fn, reverse);
1178
+ }
1179
+ let iterations = 0;
1180
+ collection.__iterate((v, k) => {
1181
+ if (!predicate.call(context, v, k, this)) {
1182
+ return false;
1183
+ }
1184
+ iterations++;
1185
+ return fn(v, k, this);
1186
+ }, reverse);
1187
+ return iterations;
1188
+ };
1189
+ takeSequence.__iteratorUncached = function(reverse) {
1190
+ if (reverse) {
1191
+ return this.cacheResult().__iterator(reverse);
1192
+ }
1193
+ const iterator = collection.__iterator(reverse);
1194
+ const seq = this;
1195
+ let finished = false;
1196
+ return makeIterator(() => {
1197
+ if (finished) {
1198
+ return DONE;
1199
+ }
1200
+ const step = iterator.next();
1201
+ if (step.done) {
1202
+ return step;
1203
+ }
1204
+ if (!predicate.call(context, step.value[1], step.value[0], seq)) {
1205
+ finished = true;
1206
+ return DONE;
1207
+ }
1208
+ return step;
1209
+ });
1210
+ };
1211
+ return reify(this, takeSequence);
1212
+ }
1213
+ takeUntil(predicate, context) {
1214
+ return this.takeWhile(not(predicate), context);
1215
+ }
1216
+ update(fn) {
1217
+ return fn(this);
1218
+ }
1219
+ valueSeq() {
1220
+ return this.toIndexedSeq();
1221
+ }
1222
+ __iterate(fn, reverse = false) {
1223
+ const iterator = this.__iterator(reverse);
1224
+ let iterations = 0;
1225
+ let step;
1226
+ while (!(step = iterator.next()).done) {
1227
+ iterations++;
1228
+ if (fn(step.value[1], step.value[0], this) === false) {
1229
+ break;
1230
+ }
1231
+ }
1232
+ return iterations;
1233
+ }
1234
+ __iterator(_reverse = false) {
1235
+ throw new Error("CollectionImpl does not implement __iterator. Use a subclass instead.");
1236
+ }
1237
+ }
1238
+ const KeyedCollection = value => isKeyed(value) ? value : KeyedSeq(value);
1239
+ class KeyedCollectionImpl extends CollectionImpl {
1240
+ static {
1241
+ this.prototype[IS_KEYED_SYMBOL] = true;
1242
+ this.prototype.__toStringMapper = (v, k) => `${quoteString(k)}: ${quoteString(v)}`;
1243
+ this.prototype[Symbol.iterator] = CollectionImpl.prototype.entries;
1244
+ this.prototype.toJSON = function() {
1245
+ assertNotInfinite(this.size);
1246
+ const object = {};
1247
+ this.__iterate((v, k) => {
1248
+ object[k] = v;
1249
+ });
1250
+ return object;
1251
+ };
1252
+ }
1253
+ flip() {
1254
+ return reify(this, flipFactory(this));
1255
+ }
1256
+ mapEntries(mapper, context) {
1257
+ let iterations = 0;
1258
+ return reify(this, this.toSeq().map((v, k) => mapper.call(context, [ k, v ], iterations++, this)).fromEntrySeq());
1259
+ }
1260
+ mapKeys(mapper, context) {
1261
+ return reify(this, this.toSeq().flip().map((k, v) => mapper.call(context, k, v, this)).flip());
1262
+ }
1263
+ }
1264
+ const IndexedCollection = value => isIndexed(value) ? value : IndexedSeq(value);
1265
+ class IndexedCollectionImpl extends CollectionImpl {
1266
+ static {
1267
+ this.prototype[IS_INDEXED_SYMBOL] = true;
1268
+ this.prototype[IS_ORDERED_SYMBOL] = true;
1269
+ }
1270
+ toKeyedSeq() {
1271
+ return new ToKeyedSequence(this, false);
1272
+ }
1273
+ findIndex(predicate, context) {
1274
+ const entry = this.findEntry(predicate, context);
1275
+ return entry ? entry[0] : -1;
1276
+ }
1277
+ indexOf(searchValue) {
1278
+ const key = this.keyOf(searchValue);
1279
+ return key === undefined ? -1 : key;
1280
+ }
1281
+ lastIndexOf(searchValue) {
1282
+ const key = this.lastKeyOf(searchValue);
1283
+ return key === undefined ? -1 : key;
1284
+ }
1285
+ splice(index, removeNum = NOT_SET, ...values) {
1286
+ if (index === undefined) {
1287
+ return this;
1288
+ }
1289
+ const hasRemoveNum = removeNum !== NOT_SET;
1290
+ removeNum = hasRemoveNum ? Math.max(removeNum || 0, 0) : 0;
1291
+ if (hasRemoveNum && !removeNum && values.length === 0) {
1292
+ return this;
1293
+ }
1294
+ index = resolveBegin(index, index < 0 ? this.count() : this.size);
1295
+ const spliced = this.slice(0, index);
1296
+ return reify(this, !hasRemoveNum ? spliced : spliced.concat(values, this.slice(index + removeNum)));
1297
+ }
1298
+ findLastIndex(predicate, context) {
1299
+ const entry = this.findLastEntry(predicate, context);
1300
+ return entry ? entry[0] : -1;
1301
+ }
1302
+ first(notSetValue) {
1303
+ return this.get(0, notSetValue);
1304
+ }
1305
+ get(index, notSetValue) {
1306
+ index = wrapIndex(this, index);
1307
+ return index < 0 || this.size === Infinity || this.size !== undefined && index > this.size ? notSetValue : this.find((_, key) => key === index, undefined, notSetValue);
1308
+ }
1309
+ has(index) {
1310
+ index = wrapIndex(this, index);
1311
+ return index >= 0 && (this.size !== undefined ? this.size === Infinity || index < this.size : this.indexOf(index) !== -1);
1312
+ }
1313
+ interpose(separator) {
1314
+ const collection = this;
1315
+ const interposedSequence = makeSequence(collection);
1316
+ interposedSequence.size = collection.size && collection.size * 2 - 1;
1317
+ interposedSequence.__iterateUncached = function(fn, reverse) {
1318
+ let iterations = 0;
1319
+ let isFirst = true;
1320
+ collection.__iterate(v => {
1321
+ if (!isFirst) {
1322
+ if (fn(separator, iterations++, this) === false) {
1323
+ return false;
1324
+ }
1325
+ }
1326
+ isFirst = false;
1327
+ return fn(v, iterations++, this);
1328
+ }, reverse);
1329
+ return iterations;
1330
+ };
1331
+ interposedSequence.__iteratorUncached = function(reverse) {
1332
+ const iterator = collection.__iterator(reverse);
1333
+ let iterations = 0;
1334
+ let isFirst = true;
1335
+ let pendingValue;
1336
+ let hasPending = false;
1337
+ return makeEntryIterator(entry => {
1338
+ if (hasPending) {
1339
+ hasPending = false;
1340
+ entry[0] = iterations++;
1341
+ entry[1] = pendingValue;
1342
+ return true;
1343
+ }
1344
+ const step = iterator.next();
1345
+ if (step.done) {
1346
+ return false;
1347
+ }
1348
+ const value = step.value[1];
1349
+ if (!isFirst) {
1350
+ pendingValue = value;
1351
+ hasPending = true;
1352
+ entry[0] = iterations++;
1353
+ entry[1] = separator;
1354
+ return true;
1355
+ }
1356
+ isFirst = false;
1357
+ entry[0] = iterations++;
1358
+ entry[1] = value;
1359
+ return true;
1360
+ });
1361
+ };
1362
+ return reify(this, interposedSequence);
1363
+ }
1364
+ interleave(...collections) {
1365
+ const thisAndCollections = [ this, ...collections ];
1366
+ const zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, thisAndCollections);
1367
+ const interleaved = zipped.flatten(true);
1368
+ if (zipped.size) {
1369
+ interleaved.size = zipped.size * thisAndCollections.length;
1370
+ }
1371
+ return reify(this, interleaved);
1372
+ }
1373
+ keySeq() {
1374
+ throw new Error("keySeq: not patched — import CollectionConversions");
1375
+ }
1376
+ last(notSetValue) {
1377
+ return this.get(-1, notSetValue);
1378
+ }
1379
+ zip(...collections) {
1380
+ return this.zipWith(defaultZipper, ...collections);
1381
+ }
1382
+ zipAll(...collections) {
1383
+ const thisAndCollections = [ this, ...collections ];
1384
+ return reify(this, zipWithFactory(this, defaultZipper, thisAndCollections, true));
1385
+ }
1386
+ zipWith(zipper, ...collections) {
1387
+ const thisAndCollections = [ this, ...collections ];
1388
+ return reify(this, zipWithFactory(this, zipper, thisAndCollections));
1389
+ }
1390
+ }
1391
+ const SetCollection = value => isCollection(value) && !isAssociative(value) ? value : SetSeq(value);
1392
+ class SetCollectionImpl extends CollectionImpl {
1393
+ static {
1394
+ this.prototype.has = CollectionImpl.prototype.includes;
1395
+ this.prototype.contains = CollectionImpl.prototype.includes;
1396
+ this.prototype.keys = SetCollectionImpl.prototype.values;
1397
+ }
1398
+ get(value, notSetValue) {
1399
+ return this.has(value) ? value : notSetValue;
1400
+ }
1401
+ includes(value) {
1402
+ return this.has(value);
1403
+ }
1404
+ keySeq() {
1405
+ return this.valueSeq();
1406
+ }
1407
+ }
1408
+ Collection.Keyed = KeyedCollection;
1409
+ Collection.Indexed = IndexedCollection;
1410
+ Collection.Set = SetCollection;
1411
+ const IndexedCollectionPrototype = IndexedCollectionImpl.prototype;
1412
+ const Seq = value => value === undefined || value === null ? emptySequence() : isImmutable(value) ? value.toSeq() : seqFromValue(value);
1413
+ const makeSequence = collection => Object.create((isKeyed(collection) ? KeyedSeqImpl : isIndexed(collection) ? IndexedSeqImpl : SetSeqImpl).prototype);
1414
+ class SeqImpl extends CollectionImpl {
1415
+ static {
1416
+ this.prototype[IS_SEQ_SYMBOL] = true;
1417
+ }
1418
+ toSeq() {
1419
+ return this;
1420
+ }
1421
+ toString() {
1422
+ return this.__toString("Seq {", "}");
1423
+ }
1424
+ cacheResult() {
1425
+ if (!this._cache && this.__iterateUncached) {
1426
+ this._cache = this.entrySeq().toArray();
1427
+ this.size = this._cache.length;
1428
+ }
1429
+ return this;
1430
+ }
1431
+ __iterateUncached(fn, reverse) {
1432
+ const iterator = this.__iteratorUncached(reverse);
1433
+ let iterations = 0;
1434
+ let step;
1435
+ while (!(step = iterator.next()).done) {
1436
+ iterations++;
1437
+ if (fn(step.value[1], step.value[0], this) === false) {
1438
+ break;
1439
+ }
1440
+ }
1441
+ return iterations;
1442
+ }
1443
+ __iterate(fn, reverse) {
1444
+ const cache = this._cache;
1445
+ if (cache) {
1446
+ const size = cache.length;
1447
+ let i = 0;
1448
+ while (i !== size) {
1449
+ const entry = cache[reverse ? size - ++i : i++];
1450
+ if (fn(entry[1], entry[0], this) === false) {
1451
+ break;
1452
+ }
1453
+ }
1454
+ return i;
1455
+ }
1456
+ return this.__iterateUncached(fn, reverse);
1457
+ }
1458
+ __iterator(reverse) {
1459
+ const cache = this._cache;
1460
+ if (cache) {
1461
+ const size = cache.length;
1462
+ let i = 0;
1463
+ const result = {
1464
+ done: false,
1465
+ value: undefined
1466
+ };
1467
+ return makeIterator(() => {
1468
+ if (i === size) {
1469
+ return DONE;
1470
+ }
1471
+ result.value = cache[reverse ? size - ++i : i++];
1472
+ return result;
1473
+ });
1474
+ }
1475
+ return this.__iteratorUncached(reverse);
1476
+ }
1477
+ }
1478
+ const seqMixin = {
1479
+ cacheResult: SeqImpl.prototype.cacheResult,
1480
+ __iterateUncached: SeqImpl.prototype.__iterateUncached,
1481
+ __iterate: SeqImpl.prototype.__iterate,
1482
+ __iterator: SeqImpl.prototype.__iterator
1483
+ };
1484
+ const KeyedSeq = value => value === undefined || value === null ? emptySequence().toKeyedSeq() : isCollection(value) ? isKeyed(value) ? value.toSeq() : value.fromEntrySeq() : isRecord(value) ? value.toSeq() : keyedSeqFromValue(value);
1485
+ class KeyedSeqImpl extends KeyedCollectionImpl {
1486
+ static {
1487
+ this.prototype[IS_SEQ_SYMBOL] = true;
1488
+ Object.assign(this.prototype, seqMixin);
1489
+ }
1490
+ toSeq() {
1491
+ return this;
1492
+ }
1493
+ toKeyedSeq() {
1494
+ return this;
1495
+ }
1496
+ }
1497
+ const IndexedSeq = value => value === undefined || value === null ? emptySequence() : isCollection(value) ? isKeyed(value) ? value.entrySeq() : value.toIndexedSeq() : isRecord(value) ? value.toSeq().entrySeq() : indexedSeqFromValue(value);
1498
+ IndexedSeq.of = (...values) => IndexedSeq(values);
1499
+ class IndexedSeqImpl extends IndexedCollectionImpl {
1500
+ static {
1501
+ this.prototype[IS_SEQ_SYMBOL] = true;
1502
+ Object.assign(this.prototype, seqMixin);
1503
+ }
1504
+ toSeq() {
1505
+ return this;
1506
+ }
1507
+ toIndexedSeq() {
1508
+ return this;
1509
+ }
1510
+ toString() {
1511
+ return this.__toString("Seq [", "]");
1512
+ }
1513
+ }
1514
+ const SetSeq = value => (isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value)).toSetSeq();
1515
+ SetSeq.of = (...values) => SetSeq(values);
1516
+ class SetSeqImpl extends SetCollectionImpl {
1517
+ static {
1518
+ this.prototype[IS_SEQ_SYMBOL] = true;
1519
+ Object.assign(this.prototype, seqMixin);
1520
+ }
1521
+ toSeq() {
1522
+ return this;
1523
+ }
1524
+ toSetSeq() {
1525
+ return this;
1526
+ }
1527
+ }
1528
+ Seq.isSeq = isSeq;
1529
+ Seq.Keyed = KeyedSeq;
1530
+ Seq.Set = SetSeq;
1531
+ Seq.Indexed = IndexedSeq;
1532
+ class ArraySeq extends IndexedSeqImpl {
1533
+ constructor(array) {
1534
+ super();
1535
+ this._array = array;
1536
+ this.size = array.length;
1537
+ }
1538
+ get(index, notSetValue) {
1539
+ return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;
1540
+ }
1541
+ __iterateUncached(fn, reverse) {
1542
+ const array = this._array;
1543
+ const size = array.length;
1544
+ let i = 0;
1545
+ while (i !== size) {
1546
+ const ii = reverse ? size - ++i : i++;
1547
+ if (fn(array[ii], ii, this) === false) {
1548
+ break;
1549
+ }
1550
+ }
1551
+ return i;
1552
+ }
1553
+ __iteratorUncached(reverse) {
1554
+ const array = this._array;
1555
+ const size = array.length;
1556
+ let i = 0;
1557
+ return makeEntryIterator(entry => {
1558
+ if (i === size) {
1559
+ return false;
1560
+ }
1561
+ const ii = reverse ? size - ++i : i++;
1562
+ entry[0] = ii;
1563
+ entry[1] = array[ii];
1564
+ return true;
1565
+ });
1566
+ }
1567
+ }
1568
+ class ObjectSeq extends KeyedSeqImpl {
1569
+ static {
1570
+ this.prototype[IS_ORDERED_SYMBOL] = true;
1571
+ }
1572
+ constructor(object) {
1573
+ super();
1574
+ const keys = [ ...Object.keys(object), ...Object.getOwnPropertySymbols(object) ];
1575
+ this._object = object;
1576
+ this._keys = keys;
1577
+ this.size = keys.length;
1578
+ }
1579
+ get(key, notSetValue) {
1580
+ if (notSetValue !== undefined && !this.has(key)) {
1581
+ return notSetValue;
1582
+ }
1583
+ return this._object[key];
1584
+ }
1585
+ has(key) {
1586
+ return Object.hasOwn(this._object, key);
1587
+ }
1588
+ __iterateUncached(fn, reverse) {
1589
+ const object = this._object;
1590
+ const keys = this._keys;
1591
+ const size = keys.length;
1592
+ let i = 0;
1593
+ while (i !== size) {
1594
+ const key = keys[reverse ? size - ++i : i++];
1595
+ if (fn(object[key], key, this) === false) {
1596
+ break;
1597
+ }
1598
+ }
1599
+ return i;
1600
+ }
1601
+ __iteratorUncached(reverse) {
1602
+ const object = this._object;
1603
+ const keys = this._keys;
1604
+ const size = keys.length;
1605
+ let i = 0;
1606
+ return makeEntryIterator(entry => {
1607
+ if (i === size) {
1608
+ return false;
1609
+ }
1610
+ const key = keys[reverse ? size - ++i : i++];
1611
+ entry[0] = key;
1612
+ entry[1] = object[key];
1613
+ return true;
1614
+ });
1615
+ }
1616
+ }
1617
+ class CollectionSeq extends IndexedSeqImpl {
1618
+ constructor(collection) {
1619
+ super();
1620
+ this._collection = collection;
1621
+ this.size = collection.length || collection.size;
1622
+ }
1623
+ __iterateUncached(fn, reverse) {
1624
+ if (reverse) {
1625
+ return this.cacheResult().__iterate(fn, reverse);
1626
+ }
1627
+ let iterations = 0;
1628
+ for (const value of this._collection) {
1629
+ if (fn(value, iterations, this) === false) {
1630
+ break;
1631
+ }
1632
+ iterations++;
1633
+ }
1634
+ return iterations;
1635
+ }
1636
+ __iteratorUncached(reverse) {
1637
+ if (reverse) {
1638
+ return this.cacheResult().__iterator(reverse);
1639
+ }
1640
+ const collection = this._collection;
1641
+ const iterator = getIterator(collection);
1642
+ if (!isIterator(iterator)) {
1643
+ return emptyIterator();
1644
+ }
1645
+ let iterations = 0;
1646
+ return makeEntryIterator(entry => {
1647
+ const step = iterator.next();
1648
+ if (step.done) {
1649
+ return false;
1650
+ }
1651
+ entry[0] = iterations++;
1652
+ entry[1] = step.value;
1653
+ return true;
1654
+ });
1655
+ }
1656
+ }
1657
+ const emptySequence = () => new ArraySeq([]);
1658
+ const maybeIndexedSeqFromValue = value => isArrayLike(value) ? new ArraySeq(value) : hasIterator(value) ? new CollectionSeq(value) : undefined;
1659
+ function keyedSeqFromValue(value) {
1660
+ const seq = maybeIndexedSeqFromValue(value);
1661
+ if (seq) {
1662
+ return seq.fromEntrySeq();
1663
+ }
1664
+ if (typeof value === "object") {
1665
+ return new ObjectSeq(value);
1666
+ }
1667
+ throw new TypeError(`Expected Array or collection object of [k, v] entries, or keyed object: ${value}`);
1668
+ }
1669
+ function indexedSeqFromValue(value) {
1670
+ const seq = maybeIndexedSeqFromValue(value);
1671
+ if (seq) {
1672
+ return seq;
1673
+ }
1674
+ throw new TypeError(`Expected Array or collection object of values: ${value}`);
1675
+ }
1676
+ function seqFromValue(value) {
1677
+ const seq = maybeIndexedSeqFromValue(value);
1678
+ if (seq) {
1679
+ return isEntriesIterable(value) ? seq.fromEntrySeq() : isKeysIterable(value) ? seq.toSetSeq() : seq;
1680
+ }
1681
+ if (typeof value === "object") {
1682
+ return new ObjectSeq(value);
1683
+ }
1684
+ throw new TypeError(`Expected Array or collection object of values, or keyed object: ${value}`);
1685
+ }
1686
+ class ConcatSeq extends SeqImpl {
1687
+ constructor(iterables) {
1688
+ super();
1689
+ const wrappedIterables = [];
1690
+ let size = 0;
1691
+ let sizeKnown = true;
1692
+ for (const iterable of iterables) {
1693
+ if (iterable._wrappedIterables) {
1694
+ for (const wrapped of iterable._wrappedIterables) {
1695
+ wrappedIterables.push(wrapped);
1696
+ if (sizeKnown) {
1697
+ const s = wrapped.size;
1698
+ if (s !== undefined) {
1699
+ size += s;
1700
+ } else {
1701
+ sizeKnown = false;
1702
+ }
1703
+ }
1704
+ }
1705
+ } else {
1706
+ wrappedIterables.push(iterable);
1707
+ if (sizeKnown) {
1708
+ const s = iterable.size;
1709
+ if (s !== undefined) {
1710
+ size += s;
1711
+ } else {
1712
+ sizeKnown = false;
1713
+ }
1714
+ }
1715
+ }
1716
+ }
1717
+ this._wrappedIterables = wrappedIterables;
1718
+ this.size = sizeKnown ? size : undefined;
1719
+ const first = this._wrappedIterables[0];
1720
+ if (first[IS_KEYED_SYMBOL]) {
1721
+ this[IS_KEYED_SYMBOL] = true;
1722
+ }
1723
+ if (first[IS_INDEXED_SYMBOL]) {
1724
+ this[IS_INDEXED_SYMBOL] = true;
1725
+ }
1726
+ if (first[IS_ORDERED_SYMBOL]) {
1727
+ this[IS_ORDERED_SYMBOL] = true;
1728
+ }
1729
+ }
1730
+ __iterateUncached(fn, reverse) {
1731
+ if (this._wrappedIterables.length === 0) {
1732
+ return 0;
1733
+ }
1734
+ if (reverse) {
1735
+ return this.cacheResult().__iterate(fn, reverse);
1736
+ }
1737
+ const wrappedIterables = this._wrappedIterables;
1738
+ const reIndex = !isKeyed(this);
1739
+ let index = 0;
1740
+ let stopped = false;
1741
+ for (const iterable of wrappedIterables) {
1742
+ iterable.__iterate((v, k) => {
1743
+ if (fn(v, reIndex ? index++ : k, this) === false) {
1744
+ stopped = true;
1745
+ return false;
1746
+ }
1747
+ }, reverse);
1748
+ if (stopped) {
1749
+ break;
1750
+ }
1751
+ }
1752
+ return index;
1753
+ }
1754
+ __iteratorUncached(reverse) {
1755
+ if (this._wrappedIterables.length === 0) {
1756
+ return emptyIterator();
1757
+ }
1758
+ if (reverse) {
1759
+ return this.cacheResult().__iterator(reverse);
1760
+ }
1761
+ const wrappedIterables = this._wrappedIterables;
1762
+ const reIndex = !isKeyed(this);
1763
+ let iterableIdx = 0;
1764
+ let currentIterator = wrappedIterables[0].__iterator(reverse);
1765
+ function nextStep() {
1766
+ while (iterableIdx < wrappedIterables.length) {
1767
+ const step = currentIterator.next();
1768
+ if (!step.done) return step;
1769
+ iterableIdx++;
1770
+ if (iterableIdx < wrappedIterables.length) {
1771
+ currentIterator = wrappedIterables[iterableIdx].__iterator(reverse);
1772
+ }
1773
+ }
1774
+ return undefined;
1775
+ }
1776
+ if (reIndex) {
1777
+ let index = 0;
1778
+ return makeEntryIterator(entry => {
1779
+ const step = nextStep();
1780
+ if (!step) return false;
1781
+ entry[0] = index++;
1782
+ entry[1] = step.value[1];
1783
+ return true;
1784
+ });
1785
+ }
1786
+ return makeIterator(() => nextStep() || DONE);
1787
+ }
1788
+ }
1789
+ class ToKeyedSequence extends KeyedSeqImpl {
1790
+ static {
1791
+ this.prototype[IS_ORDERED_SYMBOL] = true;
1792
+ }
1793
+ constructor(indexed, useKeys) {
1794
+ super();
1795
+ this._iter = indexed;
1796
+ this._useKeys = useKeys;
1797
+ this.size = indexed.size;
1798
+ }
1799
+ cacheResult() {
1800
+ return cacheResultThrough.call(this);
1801
+ }
1802
+ get(key, notSetValue) {
1803
+ return this._iter.get(key, notSetValue);
1804
+ }
1805
+ has(key) {
1806
+ return this._iter.has(key);
1807
+ }
1808
+ valueSeq() {
1809
+ return this._iter.valueSeq();
1810
+ }
1811
+ reverse() {
1812
+ const reversedSequence = reverseFactory(this, true);
1813
+ if (!this._useKeys) {
1814
+ reversedSequence.valueSeq = () => this._iter.toSeq().reverse();
1815
+ }
1816
+ return reversedSequence;
1817
+ }
1818
+ map(mapper, context) {
1819
+ const mappedSequence = mapFactory(this, mapper, context);
1820
+ if (!this._useKeys) {
1821
+ mappedSequence.valueSeq = () => this._iter.toSeq().map(mapper, context);
1822
+ }
1823
+ return mappedSequence;
1824
+ }
1825
+ __iterateUncached(fn, reverse) {
1826
+ return this._iter.__iterate(fn, reverse);
1827
+ }
1828
+ __iteratorUncached(reverse) {
1829
+ return this._iter.__iterator(reverse);
1830
+ }
1831
+ }
1832
+ class ToIndexedSequence extends IndexedSeqImpl {
1833
+ constructor(iter) {
1834
+ super();
1835
+ this._iter = iter;
1836
+ this.size = iter.size;
1837
+ }
1838
+ cacheResult() {
1839
+ return cacheResultThrough.call(this);
1840
+ }
1841
+ includes(value) {
1842
+ return this._iter.includes(value);
1843
+ }
1844
+ __iterateUncached(fn, reverse) {
1845
+ let i = 0;
1846
+ if (reverse) {
1847
+ ensureSize(this);
1848
+ }
1849
+ const size = this.size;
1850
+ this._iter.__iterate(v => {
1851
+ const ii = reverse ? size - ++i : i++;
1852
+ return fn(v, ii, this);
1853
+ }, reverse);
1854
+ return i;
1855
+ }
1856
+ __iteratorUncached(reverse) {
1857
+ let i = 0;
1858
+ if (reverse) {
1859
+ ensureSize(this);
1860
+ }
1861
+ const size = this.size;
1862
+ return mapEntries(this._iter.__iterator(reverse), (k, v, entry) => {
1863
+ entry[0] = reverse ? size - ++i : i++;
1864
+ entry[1] = v;
1865
+ });
1866
+ }
1867
+ }
1868
+ class ToSetSequence extends SetSeqImpl {
1869
+ constructor(iter) {
1870
+ super();
1871
+ this._iter = iter;
1872
+ this.size = iter.size;
1873
+ }
1874
+ cacheResult() {
1875
+ return cacheResultThrough.call(this);
1876
+ }
1877
+ has(key) {
1878
+ return this._iter.includes(key);
1879
+ }
1880
+ __iterateUncached(fn, reverse) {
1881
+ return this._iter.__iterate(v => fn(v, v, this), reverse);
1882
+ }
1883
+ __iteratorUncached(reverse) {
1884
+ return mapEntries(this._iter.__iterator(reverse), (k, v, entry) => {
1885
+ entry[0] = v;
1886
+ entry[1] = v;
1887
+ });
1888
+ }
1889
+ }
1890
+ class FromEntriesSequence extends KeyedSeqImpl {
1891
+ constructor(entries) {
1892
+ super();
1893
+ this._iter = entries;
1894
+ this.size = entries.size;
1895
+ }
1896
+ cacheResult() {
1897
+ return cacheResultThrough.call(this);
1898
+ }
1899
+ entrySeq() {
1900
+ return this._iter.toSeq();
1901
+ }
1902
+ __iterateUncached(fn, reverse) {
1903
+ let iterations = 0;
1904
+ this._iter.__iterate(entry => {
1905
+ if (entry) {
1906
+ validateEntry(entry);
1907
+ iterations++;
1908
+ const indexedCollection = isCollection(entry);
1909
+ return fn(indexedCollection ? entry.get(1) : entry[1], indexedCollection ? entry.get(0) : entry[0], this);
1910
+ }
1911
+ }, reverse);
1912
+ return iterations;
1913
+ }
1914
+ __iteratorUncached(reverse) {
1915
+ const iterator = this._iter.__iterator(reverse);
1916
+ return makeEntryIterator(out => {
1917
+ while (true) {
1918
+ const step = iterator.next();
1919
+ if (step.done) {
1920
+ return false;
1921
+ }
1922
+ const entry = step.value[1];
1923
+ if (entry) {
1924
+ validateEntry(entry);
1925
+ const indexedCollection = isCollection(entry);
1926
+ out[0] = indexedCollection ? entry.get(0) : entry[0];
1927
+ out[1] = indexedCollection ? entry.get(1) : entry[1];
1928
+ return true;
1929
+ }
1930
+ }
1931
+ });
1932
+ }
1933
+ }
1934
+ function cacheResultThrough() {
1935
+ if (this._iter.cacheResult) {
1936
+ this._iter.cacheResult();
1937
+ this.size = this._iter.size;
1938
+ return this;
1939
+ }
1940
+ return SeqImpl.prototype.cacheResult.call(this);
1941
+ }
1942
+ function validateEntry(entry) {
1943
+ if (entry !== Object(entry)) {
1944
+ throw new TypeError(`Expected [K, V] tuple: ${entry}`);
1945
+ }
1946
+ }
1947
+ const Map = value => value === undefined || value === null ? emptyMap() : isMap(value) && !isOrdered(value) ? value : emptyMap().withMutations(map => {
1948
+ const iter = KeyedCollection(value);
1949
+ assertNotInfinite(iter.size);
1950
+ iter.forEach((v, k) => map.set(k, v));
1951
+ });
1952
+ class MapImpl extends KeyedCollectionImpl {
1953
+ static {
1954
+ mixin(this, {
1955
+ asImmutable,
1956
+ asMutable,
1957
+ deleteIn,
1958
+ merge,
1959
+ mergeWith,
1960
+ mergeDeep,
1961
+ mergeDeepWith,
1962
+ mergeDeepIn,
1963
+ mergeIn,
1964
+ setIn,
1965
+ update,
1966
+ updateIn,
1967
+ wasAltered,
1968
+ withMutations,
1969
+ removeIn: deleteIn,
1970
+ concat: merge,
1971
+ [IS_MAP_SYMBOL]: true,
1972
+ [DELETE]: this.prototype.remove,
1973
+ removeAll: this.prototype.deleteAll,
1974
+ [Symbol.iterator]: this.prototype.entries,
1975
+ [Symbol.toStringTag]: "Immutable.Map"
1976
+ });
1977
+ }
1978
+ constructor(size, root, ownerID, hash) {
1979
+ super();
1980
+ this.size = size;
1981
+ this._root = root;
1982
+ this.__ownerID = ownerID;
1983
+ this.__hash = hash;
1984
+ this.__altered = false;
1985
+ }
1986
+ create(value) {
1987
+ return Map(value);
1988
+ }
1989
+ toString() {
1990
+ return this.__toString("Map {", "}");
1991
+ }
1992
+ get(k, notSetValue) {
1993
+ return this._root ? this._root.get(0, hash(k), k, notSetValue) : notSetValue;
1994
+ }
1995
+ set(k, v) {
1996
+ return updateMap(this, k, v);
1997
+ }
1998
+ remove(k) {
1999
+ return updateMap(this, k, NOT_SET);
2000
+ }
2001
+ deleteAll(keys) {
2002
+ const collection = Collection(keys);
2003
+ if (collection.size === 0) {
2004
+ return this;
2005
+ }
2006
+ return this.withMutations(map => {
2007
+ collection.forEach(key => map.remove(key));
2008
+ });
2009
+ }
2010
+ clear() {
2011
+ if (this.size === 0) {
2012
+ return this;
2013
+ }
2014
+ if (this.__ownerID) {
2015
+ this.size = 0;
2016
+ this._root = null;
2017
+ this.__hash = undefined;
2018
+ this.__altered = true;
2019
+ return this;
2020
+ }
2021
+ return emptyMap();
2022
+ }
2023
+ map(mapper, context) {
2024
+ return this.withMutations(map => {
2025
+ map.forEach((value, key) => {
2026
+ map.set(key, mapper.call(context, value, key, this));
2027
+ });
2028
+ });
2029
+ }
2030
+ keys() {
2031
+ if (!this._root) {
2032
+ return emptyIterator();
2033
+ }
2034
+ return mapIteratorGenerator(this._root, false, 0);
2035
+ }
2036
+ values() {
2037
+ if (!this._root) {
2038
+ return emptyIterator();
2039
+ }
2040
+ return mapIteratorGenerator(this._root, false, 1);
2041
+ }
2042
+ entries() {
2043
+ if (!this._root) {
2044
+ return emptyIterator();
2045
+ }
2046
+ return mapIteratorGenerator(this._root, false);
2047
+ }
2048
+ __iterator(reverse) {
2049
+ if (!this._root) {
2050
+ return emptyIterator();
2051
+ }
2052
+ return mapIteratorGenerator(this._root, reverse);
2053
+ }
2054
+ __iterate(fn, reverse) {
2055
+ let iterations = 0;
2056
+ if (this._root) {
2057
+ this._root.iterate(([key, value]) => {
2058
+ iterations++;
2059
+ return fn(value, key, this);
2060
+ }, reverse);
2061
+ }
2062
+ return iterations;
2063
+ }
2064
+ __ensureOwner(ownerID) {
2065
+ if (ownerID === this.__ownerID) {
2066
+ return this;
2067
+ }
2068
+ if (!ownerID) {
2069
+ if (this.size === 0) {
2070
+ return emptyMap();
2071
+ }
2072
+ this.__ownerID = ownerID;
2073
+ this.__altered = false;
2074
+ return this;
2075
+ }
2076
+ return makeMap(this.size, this._root, ownerID, this.__hash);
2077
+ }
2078
+ }
2079
+ Map.isMap = isMap;
2080
+ class ArrayMapNode {
2081
+ constructor(ownerID, entries) {
2082
+ this.ownerID = ownerID;
2083
+ this.entries = entries;
2084
+ }
2085
+ get(shift, keyHash, key, notSetValue) {
2086
+ return linearGet(this.entries, key, notSetValue);
2087
+ }
2088
+ iterate(fn, reverse) {
2089
+ return iterateLinearEntries(this.entries, fn, reverse);
2090
+ }
2091
+ update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2092
+ const removed = value === NOT_SET;
2093
+ const entries = this.entries;
2094
+ let idx = 0;
2095
+ const len = entries.length;
2096
+ for (;idx < len; idx++) {
2097
+ if (is(key, entries[idx][0])) {
2098
+ break;
2099
+ }
2100
+ }
2101
+ const exists = idx < len;
2102
+ if (exists ? entries[idx][1] === value : removed) {
2103
+ return this;
2104
+ }
2105
+ SetRef(didAlter);
2106
+ if (removed || !exists) {
2107
+ SetRef(didChangeSize);
2108
+ }
2109
+ if (removed && len === 1) {
2110
+ return;
2111
+ }
2112
+ if (!exists && !removed && len >= MAX_ARRAY_MAP_SIZE) {
2113
+ return createNodes(ownerID, entries, key, value);
2114
+ }
2115
+ const isEditable = ownerID && ownerID === this.ownerID;
2116
+ const newEntries = isEditable ? entries : entries.slice();
2117
+ if (exists) {
2118
+ if (removed) {
2119
+ if (idx === len - 1) {
2120
+ newEntries.pop();
2121
+ } else {
2122
+ newEntries[idx] = newEntries.pop();
2123
+ }
2124
+ } else {
2125
+ newEntries[idx] = [ key, value ];
2126
+ }
2127
+ } else {
2128
+ newEntries.push([ key, value ]);
2129
+ }
2130
+ if (isEditable) {
2131
+ this.entries = newEntries;
2132
+ return this;
2133
+ }
2134
+ return new ArrayMapNode(ownerID, newEntries);
2135
+ }
2136
+ }
2137
+ class BitmapIndexedNode {
2138
+ constructor(ownerID, bitmap, nodes) {
2139
+ this.ownerID = ownerID;
2140
+ this.bitmap = bitmap;
2141
+ this.nodes = nodes;
2142
+ }
2143
+ iterate(fn, reverse) {
2144
+ return iterateNodeArray(this.nodes, fn, reverse);
2145
+ }
2146
+ get(shift, keyHash, key, notSetValue) {
2147
+ const bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK);
2148
+ const bitmap = this.bitmap;
2149
+ return (bitmap & bit) === 0 ? notSetValue : this.nodes[popCount(bitmap & bit - 1)].get(shift + SHIFT, keyHash, key, notSetValue);
2150
+ }
2151
+ update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2152
+ const keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;
2153
+ const bit = 1 << keyHashFrag;
2154
+ const bitmap = this.bitmap;
2155
+ const exists = (bitmap & bit) !== 0;
2156
+ if (!exists && value === NOT_SET) {
2157
+ return this;
2158
+ }
2159
+ const idx = popCount(bitmap & bit - 1);
2160
+ const nodes = this.nodes;
2161
+ const node = exists ? nodes[idx] : undefined;
2162
+ const newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);
2163
+ if (newNode === node) {
2164
+ return this;
2165
+ }
2166
+ if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {
2167
+ return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);
2168
+ }
2169
+ if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) {
2170
+ return nodes[idx ^ 1];
2171
+ }
2172
+ if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {
2173
+ return newNode;
2174
+ }
2175
+ const isEditable = ownerID && ownerID === this.ownerID;
2176
+ const newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit;
2177
+ const newNodes = exists ? newNode ? setAt(nodes, idx, newNode, isEditable) : spliceOut(nodes, idx, isEditable) : spliceIn(nodes, idx, newNode, isEditable);
2178
+ if (isEditable) {
2179
+ this.bitmap = newBitmap;
2180
+ this.nodes = newNodes;
2181
+ return this;
2182
+ }
2183
+ return new BitmapIndexedNode(ownerID, newBitmap, newNodes);
2184
+ }
2185
+ }
2186
+ class HashArrayMapNode {
2187
+ constructor(ownerID, count, nodes) {
2188
+ this.ownerID = ownerID;
2189
+ this.count = count;
2190
+ this.nodes = nodes;
2191
+ }
2192
+ iterate(fn, reverse) {
2193
+ return iterateNodeArray(this.nodes, fn, reverse);
2194
+ }
2195
+ get(shift, keyHash, key, notSetValue) {
2196
+ const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;
2197
+ const node = this.nodes[idx];
2198
+ return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue;
2199
+ }
2200
+ update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2201
+ const idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;
2202
+ const removed = value === NOT_SET;
2203
+ const nodes = this.nodes;
2204
+ const node = nodes[idx];
2205
+ if (removed && !node) {
2206
+ return this;
2207
+ }
2208
+ const newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);
2209
+ if (newNode === node) {
2210
+ return this;
2211
+ }
2212
+ let newCount = this.count;
2213
+ if (!node) {
2214
+ newCount++;
2215
+ } else if (!newNode) {
2216
+ newCount--;
2217
+ if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {
2218
+ return packNodes(ownerID, nodes, newCount, idx);
2219
+ }
2220
+ }
2221
+ const isEditable = ownerID && ownerID === this.ownerID;
2222
+ const newNodes = setAt(nodes, idx, newNode, isEditable);
2223
+ if (isEditable) {
2224
+ this.count = newCount;
2225
+ this.nodes = newNodes;
2226
+ return this;
2227
+ }
2228
+ return new HashArrayMapNode(ownerID, newCount, newNodes);
2229
+ }
2230
+ }
2231
+ class HashCollisionNode {
2232
+ constructor(ownerID, keyHash, entries) {
2233
+ this.ownerID = ownerID;
2234
+ this.keyHash = keyHash;
2235
+ this.entries = entries;
2236
+ }
2237
+ get(shift, keyHash, key, notSetValue) {
2238
+ return linearGet(this.entries, key, notSetValue);
2239
+ }
2240
+ iterate(fn, reverse) {
2241
+ return iterateLinearEntries(this.entries, fn, reverse);
2242
+ }
2243
+ update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2244
+ if (keyHash !== this.keyHash) {
2245
+ if (value === NOT_SET) {
2246
+ return this;
2247
+ }
2248
+ SetRef(didAlter);
2249
+ SetRef(didChangeSize);
2250
+ return mergeIntoNode(this, ownerID, shift, keyHash, [ key, value ]);
2251
+ }
2252
+ const removed = value === NOT_SET;
2253
+ const entries = this.entries;
2254
+ let idx = 0;
2255
+ const len = entries.length;
2256
+ for (;idx < len; idx++) {
2257
+ if (is(key, entries[idx][0])) {
2258
+ break;
2259
+ }
2260
+ }
2261
+ const exists = idx < len;
2262
+ if (exists ? entries[idx][1] === value : removed) {
2263
+ return this;
2264
+ }
2265
+ SetRef(didAlter);
2266
+ if (removed || !exists) {
2267
+ SetRef(didChangeSize);
2268
+ }
2269
+ if (removed && len === 2) {
2270
+ return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);
2271
+ }
2272
+ const isEditable = ownerID && ownerID === this.ownerID;
2273
+ const newEntries = isEditable ? entries : entries.slice();
2274
+ if (exists) {
2275
+ if (removed) {
2276
+ if (idx === len - 1) {
2277
+ newEntries.pop();
2278
+ } else {
2279
+ newEntries[idx] = newEntries.pop();
2280
+ }
2281
+ } else {
2282
+ newEntries[idx] = [ key, value ];
2283
+ }
2284
+ } else {
2285
+ newEntries.push([ key, value ]);
2286
+ }
2287
+ if (isEditable) {
2288
+ this.entries = newEntries;
2289
+ return this;
2290
+ }
2291
+ return new HashCollisionNode(ownerID, this.keyHash, newEntries);
2292
+ }
2293
+ }
2294
+ class ValueNode {
2295
+ constructor(ownerID, keyHash, entry) {
2296
+ this.ownerID = ownerID;
2297
+ this.keyHash = keyHash;
2298
+ this.entry = entry;
2299
+ }
2300
+ iterate(fn, _reverse) {
2301
+ return fn(this.entry);
2302
+ }
2303
+ get(shift, keyHash, key, notSetValue) {
2304
+ return is(key, this.entry[0]) ? this.entry[1] : notSetValue;
2305
+ }
2306
+ update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2307
+ const removed = value === NOT_SET;
2308
+ const keyMatch = is(key, this.entry[0]);
2309
+ if (keyMatch ? value === this.entry[1] : removed) {
2310
+ return this;
2311
+ }
2312
+ SetRef(didAlter);
2313
+ if (removed) {
2314
+ SetRef(didChangeSize);
2315
+ return;
2316
+ }
2317
+ if (keyMatch) {
2318
+ if (ownerID && ownerID === this.ownerID) {
2319
+ this.entry[1] = value;
2320
+ return this;
2321
+ }
2322
+ return new ValueNode(ownerID, this.keyHash, [ key, value ]);
2323
+ }
2324
+ SetRef(didChangeSize);
2325
+ return mergeIntoNode(this, ownerID, shift, hash(key), [ key, value ]);
2326
+ }
2327
+ }
2328
+ function linearGet(entries, key, notSetValue) {
2329
+ for (let ii = 0, len = entries.length; ii < len; ii++) {
2330
+ if (is(key, entries[ii][0])) {
2331
+ return entries[ii][1];
2332
+ }
2333
+ }
2334
+ return notSetValue;
2335
+ }
2336
+ function iterateLinearEntries(entries, fn, reverse) {
2337
+ for (let ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {
2338
+ if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {
2339
+ return false;
2340
+ }
2341
+ }
2342
+ }
2343
+ function iterateNodeArray(nodes, fn, reverse) {
2344
+ for (let ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {
2345
+ const node = nodes[reverse ? maxIndex - ii : ii];
2346
+ if (node?.iterate(fn, reverse) === false) {
2347
+ return false;
2348
+ }
2349
+ }
2350
+ }
2351
+ function mapIteratorGenerator(node, reverse, entryIndex) {
2352
+ let stack = {
2353
+ node,
2354
+ index: 0,
2355
+ __prev: null
2356
+ };
2357
+ const extractValue = entryIndex !== undefined ? entry => entry[entryIndex] : entry => entry;
2358
+ const result = {
2359
+ done: false,
2360
+ value: undefined
2361
+ };
2362
+ return makeIterator(() => {
2363
+ while (stack) {
2364
+ const node = stack.node;
2365
+ const index = stack.index++;
2366
+ let maxIndex;
2367
+ if (node.entry) {
2368
+ if (index === 0) {
2369
+ result.value = extractValue(node.entry);
2370
+ return result;
2371
+ }
2372
+ } else if (node.entries) {
2373
+ maxIndex = node.entries.length - 1;
2374
+ if (index <= maxIndex) {
2375
+ result.value = extractValue(node.entries[reverse ? maxIndex - index : index]);
2376
+ return result;
2377
+ }
2378
+ } else {
2379
+ maxIndex = node.nodes.length - 1;
2380
+ if (index <= maxIndex) {
2381
+ const subNode = node.nodes[reverse ? maxIndex - index : index];
2382
+ if (subNode) {
2383
+ if (subNode.entry) {
2384
+ result.value = extractValue(subNode.entry);
2385
+ return result;
2386
+ }
2387
+ stack = {
2388
+ node: subNode,
2389
+ index: 0,
2390
+ __prev: stack
2391
+ };
2392
+ }
2393
+ continue;
2394
+ }
2395
+ }
2396
+ stack = stack.__prev;
2397
+ }
2398
+ return DONE;
2399
+ });
2400
+ }
2401
+ const makeMap = (size, root, ownerID, hash) => new MapImpl(size, root, ownerID, hash);
2402
+ let EMPTY_MAP;
2403
+ const emptyMap = () => EMPTY_MAP || (EMPTY_MAP = makeMap(0));
2404
+ function updateMap(map, k, v) {
2405
+ let newRoot;
2406
+ let newSize;
2407
+ if (!map._root) {
2408
+ if (v === NOT_SET) {
2409
+ return map;
2410
+ }
2411
+ newSize = 1;
2412
+ newRoot = new ArrayMapNode(map.__ownerID, [ [ k, v ] ]);
2413
+ } else {
2414
+ const didChangeSize = MakeRef();
2415
+ const didAlter = MakeRef();
2416
+ newRoot = updateNode(map._root, map.__ownerID, 0, hash(k), k, v, didChangeSize, didAlter);
2417
+ if (!didAlter.value) {
2418
+ return map;
2419
+ }
2420
+ newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0);
2421
+ }
2422
+ if (map.__ownerID) {
2423
+ map.size = newSize;
2424
+ map._root = newRoot;
2425
+ map.__hash = undefined;
2426
+ map.__altered = true;
2427
+ return map;
2428
+ }
2429
+ return newRoot ? makeMap(newSize, newRoot) : emptyMap();
2430
+ }
2431
+ function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {
2432
+ if (!node) {
2433
+ if (value === NOT_SET) {
2434
+ return node;
2435
+ }
2436
+ SetRef(didAlter);
2437
+ SetRef(didChangeSize);
2438
+ return new ValueNode(ownerID, keyHash, [ key, value ]);
2439
+ }
2440
+ return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter);
2441
+ }
2442
+ const isLeafNode = node => node.constructor === ValueNode || node.constructor === HashCollisionNode;
2443
+ function mergeIntoNode(node, ownerID, shift, keyHash, entry) {
2444
+ if (node.keyHash === keyHash) {
2445
+ return new HashCollisionNode(ownerID, keyHash, [ node.entry, entry ]);
2446
+ }
2447
+ const idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;
2448
+ const idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;
2449
+ const newNode = new ValueNode(ownerID, keyHash, entry);
2450
+ const nodes = idx1 === idx2 ? [ mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry) ] : idx1 < idx2 ? [ node, newNode ] : [ newNode, node ];
2451
+ return new BitmapIndexedNode(ownerID, 1 << idx1 | 1 << idx2, nodes);
2452
+ }
2453
+ function createNodes(ownerID, entries, key, value) {
2454
+ if (!ownerID) {
2455
+ ownerID = new OwnerID;
2456
+ }
2457
+ let node = new ValueNode(ownerID, hash(key), [ key, value ]);
2458
+ for (const [k, v] of entries) {
2459
+ node = node.update(ownerID, 0, hash(k), k, v);
2460
+ }
2461
+ return node;
2462
+ }
2463
+ function packNodes(ownerID, nodes, count, excluding) {
2464
+ let bitmap = 0;
2465
+ let packedII = 0;
2466
+ const packedNodes = new Array(count);
2467
+ for (let ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {
2468
+ const node = nodes[ii];
2469
+ if (node !== undefined && ii !== excluding) {
2470
+ bitmap |= bit;
2471
+ packedNodes[packedII++] = node;
2472
+ }
2473
+ }
2474
+ return new BitmapIndexedNode(ownerID, bitmap, packedNodes);
2475
+ }
2476
+ function expandNodes(ownerID, nodes, bitmap, including, node) {
2477
+ let count = 0;
2478
+ const expandedNodes = new Array(SIZE);
2479
+ for (let ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {
2480
+ expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;
2481
+ }
2482
+ expandedNodes[including] = node;
2483
+ return new HashArrayMapNode(ownerID, count + 1, expandedNodes);
2484
+ }
2485
+ function popCount(x) {
2486
+ x -= x >> 1 & 1431655765;
2487
+ x = (x & 858993459) + (x >> 2 & 858993459);
2488
+ x = x + (x >> 4) & 252645135;
2489
+ x += x >> 8;
2490
+ x += x >> 16;
2491
+ return x & 127;
2492
+ }
2493
+ function setAt(array, idx, val, canEdit) {
2494
+ const newArray = canEdit ? array : array.slice();
2495
+ newArray[idx] = val;
2496
+ return newArray;
2497
+ }
2498
+ function spliceIn(array, idx, val, canEdit) {
2499
+ const newLen = array.length + 1;
2500
+ if (canEdit && idx + 1 === newLen) {
2501
+ array[idx] = val;
2502
+ return array;
2503
+ }
2504
+ const newArray = new Array(newLen);
2505
+ let after = 0;
2506
+ for (let ii = 0; ii < newLen; ii++) {
2507
+ if (ii === idx) {
2508
+ newArray[ii] = val;
2509
+ after = -1;
2510
+ } else {
2511
+ newArray[ii] = array[ii + after];
2512
+ }
2513
+ }
2514
+ return newArray;
2515
+ }
2516
+ function spliceOut(array, idx, canEdit) {
2517
+ const newLen = array.length - 1;
2518
+ if (canEdit && idx === newLen) {
2519
+ array.pop();
2520
+ return array;
2521
+ }
2522
+ const newArray = new Array(newLen);
2523
+ let after = 0;
2524
+ for (let ii = 0; ii < newLen; ii++) {
2525
+ if (ii === idx) {
2526
+ after = 1;
2527
+ }
2528
+ newArray[ii] = array[ii + after];
2529
+ }
2530
+ return newArray;
2531
+ }
2532
+ const MAX_ARRAY_MAP_SIZE = SIZE / 4;
2533
+ const MAX_BITMAP_INDEXED_SIZE = SIZE / 2;
2534
+ const MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;
2535
+ function shallowCopy(from) {
2536
+ if (Array.isArray(from)) {
2537
+ return from.slice();
2538
+ }
2539
+ return {
2540
+ ...from
2541
+ };
2542
+ }
2543
+ const merge$1 = (collection, ...sources) => mergeWithSources(collection, sources);
2544
+ const mergeWith$1 = (merger, collection, ...sources) => mergeWithSources(collection, sources, merger);
2545
+ const mergeDeepWithSources = (collection, sources, merger) => mergeWithSources(collection, sources, deepMergerWith(merger));
2546
+ const mergeDeep$1 = (collection, ...sources) => mergeDeepWithSources(collection, sources);
2547
+ const mergeDeepWith$1 = (merger, collection, ...sources) => mergeDeepWithSources(collection, sources, merger);
2548
+ function mergeWithSources(collection, sources, merger) {
2549
+ if (!isDataStructure(collection)) {
2550
+ throw new TypeError(`Cannot merge into non-data-structure value: ${collection}`);
2551
+ }
2552
+ if (isImmutable(collection)) {
2553
+ return typeof merger === "function" && collection.mergeWith ? collection.mergeWith(merger, ...sources) : collection.merge ? collection.merge(...sources) : collection.concat(...sources);
2554
+ }
2555
+ const isArray = Array.isArray(collection);
2556
+ let merged = collection;
2557
+ const Collection = isArray ? IndexedCollection : KeyedCollection;
2558
+ const mergeItem = isArray ? value => {
2559
+ if (merged === collection) {
2560
+ merged = shallowCopy(merged);
2561
+ }
2562
+ merged.push(value);
2563
+ } : (value, key) => {
2564
+ const hasVal = Object.hasOwn(merged, key);
2565
+ const nextVal = hasVal && merger ? merger(merged[key], value, key) : value;
2566
+ if (!hasVal || nextVal !== merged[key]) {
2567
+ if (merged === collection) {
2568
+ merged = shallowCopy(merged);
2569
+ }
2570
+ merged[key] = nextVal;
2571
+ }
2572
+ };
2573
+ for (const source of sources) {
2574
+ Collection(source).forEach(mergeItem);
2575
+ }
2576
+ return merged;
2577
+ }
2578
+ function deepMergerWith(merger) {
2579
+ function deepMerger(oldValue, newValue, key) {
2580
+ return isDataStructure(oldValue) && isDataStructure(newValue) && areMergeable(oldValue, newValue) ? mergeWithSources(oldValue, [ newValue ], deepMerger) : merger ? merger(oldValue, newValue, key) : newValue;
2581
+ }
2582
+ return deepMerger;
2583
+ }
2584
+ function areMergeable(oldDataStructure, newDataStructure) {
2585
+ const oldSeq = Seq(oldDataStructure);
2586
+ const newSeq = Seq(newDataStructure);
2587
+ return isIndexed(oldSeq) === isIndexed(newSeq) && isKeyed(oldSeq) === isKeyed(newSeq);
2588
+ }
2589
+ function remove(collection, key) {
2590
+ if (!isDataStructure(collection)) {
2591
+ throw new TypeError(`Cannot update non-data-structure value: ${collection}`);
2592
+ }
2593
+ if (isImmutable(collection)) {
2594
+ if (!collection.remove) {
2595
+ throw new TypeError(`Cannot update immutable value without .remove() method: ${collection}`);
2596
+ }
2597
+ return collection.remove(key);
2598
+ }
2599
+ if (!Object.hasOwn(collection, key)) {
2600
+ return collection;
2601
+ }
2602
+ const collectionCopy = shallowCopy(collection);
2603
+ if (Array.isArray(collectionCopy)) {
2604
+ collectionCopy.splice(key, 1);
2605
+ } else {
2606
+ delete collectionCopy[key];
2607
+ }
2608
+ return collectionCopy;
2609
+ }
2610
+ function set(collection, key, value) {
2611
+ if (!isDataStructure(collection)) {
2612
+ throw new TypeError(`Cannot update non-data-structure value: ${collection}`);
2613
+ }
2614
+ if (isImmutable(collection)) {
2615
+ if (!collection.set) {
2616
+ throw new TypeError(`Cannot update immutable value without .set() method: ${collection}`);
2617
+ }
2618
+ return collection.set(key, value);
2619
+ }
2620
+ if (Object.hasOwn(collection, key) && value === collection[key]) {
2621
+ return collection;
2622
+ }
2623
+ const collectionCopy = shallowCopy(collection);
2624
+ collectionCopy[key] = value;
2625
+ return collectionCopy;
2626
+ }
2627
+ function updateIn$1(collection, keyPath, notSetValue, updater) {
2628
+ if (!updater) {
2629
+ updater = notSetValue;
2630
+ notSetValue = undefined;
2631
+ }
2632
+ const updatedValue = updateInDeeply(isImmutable(collection), collection, coerceKeyPath(keyPath), 0, notSetValue, updater);
2633
+ return updatedValue === NOT_SET ? notSetValue : updatedValue;
2634
+ }
2635
+ function updateInDeeply(inImmutable, existing, keyPath, i, notSetValue, updater) {
2636
+ const wasNotSet = existing === NOT_SET;
2637
+ if (i === keyPath.length) {
2638
+ const existingValue = wasNotSet ? notSetValue : existing;
2639
+ const newValue = updater(existingValue);
2640
+ return newValue === existingValue ? existing : newValue;
2641
+ }
2642
+ if (!wasNotSet && !isDataStructure(existing)) {
2643
+ throw new TypeError(`Cannot update within non-data-structure value in path [${Array.from(keyPath).slice(0, i).map(quoteString)}]: ${existing}`);
2644
+ }
2645
+ const key = keyPath[i];
2646
+ const nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET);
2647
+ const nextUpdated = updateInDeeply(nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), nextExisting, keyPath, i + 1, notSetValue, updater);
2648
+ if (nextUpdated === nextExisting) {
2649
+ return existing;
2650
+ }
2651
+ if (nextUpdated === NOT_SET) {
2652
+ return remove(existing, key);
2653
+ }
2654
+ const collection = wasNotSet ? inImmutable ? emptyMap() : {} : existing;
2655
+ return set(collection, key, nextUpdated);
2656
+ }
2657
+ const removeIn = (collection, keyPath) => updateIn$1(collection, keyPath, () => NOT_SET);
2658
+ const setIn$1 = (collection, keyPath, value) => updateIn$1(collection, keyPath, NOT_SET, () => value);
2659
+ function update$1(collection, key, notSetValue, updater) {
2660
+ return updateIn$1(collection, [ key ], notSetValue, updater);
2661
+ }
2662
+ function asImmutable() {
2663
+ return this.__ensureOwner();
2664
+ }
2665
+ function asMutable() {
2666
+ return this.__ownerID ? this : this.__ensureOwner(new OwnerID);
2667
+ }
2668
+ function wasAltered() {
2669
+ return this.__altered;
2670
+ }
2671
+ function withMutations(fn) {
2672
+ const mutable = this.asMutable();
2673
+ fn(mutable);
2674
+ return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;
2675
+ }
2676
+ function getIn(searchKeyPath, notSetValue) {
2677
+ return getIn$1(this, searchKeyPath, notSetValue);
2678
+ }
2679
+ function hasIn(searchKeyPath) {
2680
+ return hasIn$1(this, searchKeyPath);
2681
+ }
2682
+ function deleteIn(keyPath) {
2683
+ return removeIn(this, keyPath);
2684
+ }
2685
+ function setIn(keyPath, v) {
2686
+ return setIn$1(this, keyPath, v);
2687
+ }
2688
+ function update(key, notSetValue, updater) {
2689
+ return typeof key === "function" ? key(this) : update$1(this, key, notSetValue, updater);
2690
+ }
2691
+ function updateIn(keyPath, notSetValue, updater) {
2692
+ return updateIn$1(this, keyPath, notSetValue, updater);
2693
+ }
2694
+ function toObject() {
2695
+ assertNotInfinite(this.size);
2696
+ const object = {};
2697
+ this.__iterate((v, k) => {
2698
+ object[k] = v;
2699
+ });
2700
+ return object;
2701
+ }
2702
+ function merge(...iters) {
2703
+ return mergeIntoKeyedWith(this, iters);
2704
+ }
2705
+ function mergeWith(merger, ...iters) {
2706
+ if (typeof merger !== "function") {
2707
+ throw new TypeError(`Invalid merger function: ${merger}`);
2708
+ }
2709
+ return mergeIntoKeyedWith(this, iters, merger);
2710
+ }
2711
+ function mergeIntoKeyedWith(collection, collections, merger) {
2712
+ const iters = [];
2713
+ for (const item of collections) {
2714
+ const collection = KeyedCollection(item);
2715
+ if (collection.size !== 0) {
2716
+ iters.push(collection);
2717
+ }
2718
+ }
2719
+ if (iters.length === 0) {
2720
+ return collection;
2721
+ }
2722
+ if (collection.toSeq().size === 0 && !collection.__ownerID && iters.length === 1) {
2723
+ return isRecord(collection) ? collection : collection.create(iters[0]);
2724
+ }
2725
+ return collection.withMutations(collection => {
2726
+ const mergeIntoCollection = merger ? (value, key) => {
2727
+ update$1(collection, key, NOT_SET, oldVal => oldVal === NOT_SET ? value : merger(oldVal, value, key));
2728
+ } : (value, key) => {
2729
+ collection.set(key, value);
2730
+ };
2731
+ for (const iter of iters) {
2732
+ iter.forEach(mergeIntoCollection);
2733
+ }
2734
+ });
2735
+ }
2736
+ function mergeDeep(...iters) {
2737
+ return mergeDeepWithSources(this, iters);
2738
+ }
2739
+ function mergeDeepWith(merger, ...iters) {
2740
+ return mergeDeepWithSources(this, iters, merger);
2741
+ }
2742
+ function mergeIn(keyPath, ...iters) {
2743
+ return updateIn$1(this, keyPath, emptyMap(), m => mergeWithSources(m, iters));
2744
+ }
2745
+ function mergeDeepIn(keyPath, ...iters) {
2746
+ return updateIn$1(this, keyPath, emptyMap(), m => mergeDeepWithSources(m, iters));
2747
+ }
2748
+ function mixin(Class, methods) {
2749
+ Object.assign(Class.prototype, methods);
2750
+ }
2751
+ const List = value => {
2752
+ const empty = emptyList();
2753
+ if (value === undefined || value === null) {
2754
+ return empty;
2755
+ }
2756
+ if (isList(value)) {
2757
+ return value;
2758
+ }
2759
+ const iter = IndexedCollection(value);
2760
+ const size = iter.size;
2761
+ if (size === 0) {
2762
+ return empty;
2763
+ }
2764
+ assertNotInfinite(size);
2765
+ if (size > 0 && size < SIZE) {
2766
+ return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));
2767
+ }
2768
+ return empty.withMutations(list => {
2769
+ list.setSize(size);
2770
+ iter.forEach((v, i) => list.set(i, v));
2771
+ });
2772
+ };
2773
+ List.of = (...values) => List(values);
2774
+ class ListImpl extends IndexedCollectionImpl {
2775
+ static {
2776
+ mixin(this, {
2777
+ asImmutable,
2778
+ asMutable,
2779
+ deleteIn,
2780
+ mergeDeepIn,
2781
+ mergeIn,
2782
+ setIn,
2783
+ update,
2784
+ updateIn,
2785
+ wasAltered,
2786
+ withMutations,
2787
+ removeIn: deleteIn,
2788
+ [IS_LIST_SYMBOL]: true,
2789
+ [DELETE]: this.prototype.remove,
2790
+ merge: this.prototype.concat,
2791
+ [Symbol.toStringTag]: "Immutable.List",
2792
+ [Symbol.iterator]: this.prototype.values
2793
+ });
2794
+ }
2795
+ constructor(origin, capacity, level, root, tail, ownerID, hash) {
2796
+ super();
2797
+ this.size = capacity - origin;
2798
+ this._origin = origin;
2799
+ this._capacity = capacity;
2800
+ this._level = level;
2801
+ this._root = root;
2802
+ this._tail = tail;
2803
+ this.__ownerID = ownerID;
2804
+ this.__hash = hash;
2805
+ this.__altered = false;
2806
+ }
2807
+ create(value) {
2808
+ return List(value);
2809
+ }
2810
+ toString() {
2811
+ return this.__toString("List [", "]");
2812
+ }
2813
+ get(index, notSetValue) {
2814
+ index = wrapIndex(this, index);
2815
+ if (index >= 0 && index < this.size) {
2816
+ index += this._origin;
2817
+ const node = listNodeFor(this, index);
2818
+ return node?.array[index & MASK];
2819
+ }
2820
+ return notSetValue;
2821
+ }
2822
+ set(index, value) {
2823
+ return updateList(this, index, value);
2824
+ }
2825
+ remove(index) {
2826
+ return !this.has(index) ? this : index === 0 ? this.shift() : index === this.size - 1 ? this.pop() : this.splice(index, 1);
2827
+ }
2828
+ insert(index, value) {
2829
+ return this.splice(index, 0, value);
2830
+ }
2831
+ clear() {
2832
+ if (this.size === 0) {
2833
+ return this;
2834
+ }
2835
+ if (this.__ownerID) {
2836
+ this.size = this._origin = this._capacity = 0;
2837
+ this._level = SHIFT;
2838
+ this._root = this._tail = this.__hash = undefined;
2839
+ this.__altered = true;
2840
+ return this;
2841
+ }
2842
+ return emptyList();
2843
+ }
2844
+ push(...values) {
2845
+ const oldSize = this.size;
2846
+ return this.withMutations(list => {
2847
+ setListBounds(list, 0, oldSize + values.length);
2848
+ for (let ii = 0; ii < values.length; ii++) {
2849
+ list.set(oldSize + ii, values[ii]);
2850
+ }
2851
+ });
2852
+ }
2853
+ pop() {
2854
+ return setListBounds(this, 0, -1);
2855
+ }
2856
+ unshift(...values) {
2857
+ return this.withMutations(list => {
2858
+ setListBounds(list, -values.length);
2859
+ for (let ii = 0; ii < values.length; ii++) {
2860
+ list.set(ii, values[ii]);
2861
+ }
2862
+ });
2863
+ }
2864
+ shift() {
2865
+ return setListBounds(this, 1);
2866
+ }
2867
+ shuffle(random = Math.random) {
2868
+ return this.withMutations(mutable => {
2869
+ let current = mutable.size;
2870
+ let destination;
2871
+ let tmp;
2872
+ while (current) {
2873
+ destination = Math.floor(random() * current--);
2874
+ tmp = mutable.get(destination);
2875
+ mutable.set(destination, mutable.get(current));
2876
+ mutable.set(current, tmp);
2877
+ }
2878
+ });
2879
+ }
2880
+ concat(...collections) {
2881
+ const seqs = [];
2882
+ for (const collection of collections) {
2883
+ const seq = IndexedCollection(typeof collection !== "string" && hasIterator(collection) ? collection : [ collection ]);
2884
+ if (seq.size !== 0) {
2885
+ seqs.push(seq);
2886
+ }
2887
+ }
2888
+ if (seqs.length === 0) {
2889
+ return this;
2890
+ }
2891
+ if (this.size === 0 && !this.__ownerID && seqs.length === 1) {
2892
+ return List(seqs[0]);
2893
+ }
2894
+ return this.withMutations(list => {
2895
+ seqs.forEach(seq => seq.forEach(value => list.push(value)));
2896
+ });
2897
+ }
2898
+ setSize(size) {
2899
+ return setListBounds(this, 0, size);
2900
+ }
2901
+ map(mapper, context) {
2902
+ return this.withMutations(list => {
2903
+ for (let i = 0; i < this.size; i++) {
2904
+ list.set(i, mapper.call(context, list.get(i), i, this));
2905
+ }
2906
+ });
2907
+ }
2908
+ slice(begin, end) {
2909
+ const size = this.size;
2910
+ if (wholeSlice(begin, end, size)) {
2911
+ return this;
2912
+ }
2913
+ return setListBounds(this, resolveBegin(begin, size), resolveEnd(end, size));
2914
+ }
2915
+ __iterate(fn, reverse) {
2916
+ let index = reverse ? this.size : 0;
2917
+ iterateListCallback(this, value => fn(value, reverse ? --index : index++, this), reverse);
2918
+ return reverse ? this.size - index : index;
2919
+ }
2920
+ __iterator(reverse) {
2921
+ let index = reverse ? this.size : 0;
2922
+ const iter = iterateList(this, reverse);
2923
+ return makeEntryIterator(entry => {
2924
+ const step = iter.next();
2925
+ if (step.done) {
2926
+ return false;
2927
+ }
2928
+ entry[0] = reverse ? --index : index++;
2929
+ entry[1] = step.value;
2930
+ return true;
2931
+ });
2932
+ }
2933
+ values() {
2934
+ return iterateList(this, false);
2935
+ }
2936
+ keys() {
2937
+ return makeIndexKeys(this.size);
2938
+ }
2939
+ __ensureOwner(ownerID) {
2940
+ if (ownerID === this.__ownerID) {
2941
+ return this;
2942
+ }
2943
+ if (!ownerID) {
2944
+ if (this.size === 0) {
2945
+ return emptyList();
2946
+ }
2947
+ this.__ownerID = ownerID;
2948
+ this.__altered = false;
2949
+ return this;
2950
+ }
2951
+ return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash);
2952
+ }
2953
+ }
2954
+ List.isList = isList;
2955
+ class VNode {
2956
+ constructor(array, ownerID) {
2957
+ this.array = array;
2958
+ this.ownerID = ownerID;
2959
+ }
2960
+ removeBefore(ownerID, level, index) {
2961
+ if ((index & (1 << level + SHIFT) - 1) === 0 || this.array.length === 0) {
2962
+ return this;
2963
+ }
2964
+ const originIndex = index >>> level & MASK;
2965
+ if (originIndex >= this.array.length) {
2966
+ return new VNode([], ownerID);
2967
+ }
2968
+ const removingFirst = originIndex === 0;
2969
+ let newChild;
2970
+ if (level > 0) {
2971
+ const oldChild = this.array[originIndex];
2972
+ newChild = oldChild?.removeBefore(ownerID, level - SHIFT, index);
2973
+ if (newChild === oldChild && removingFirst) {
2974
+ return this;
2975
+ }
2976
+ }
2977
+ if (removingFirst && !newChild) {
2978
+ return this;
2979
+ }
2980
+ const editable = editableVNode(this, ownerID);
2981
+ if (!removingFirst) {
2982
+ for (let ii = 0; ii < originIndex; ii++) {
2983
+ editable.array[ii] = undefined;
2984
+ }
2985
+ }
2986
+ if (newChild) {
2987
+ editable.array[originIndex] = newChild;
2988
+ }
2989
+ return editable;
2990
+ }
2991
+ removeAfter(ownerID, level, index) {
2992
+ if (index === (level ? 1 << level + SHIFT : SIZE) || this.array.length === 0) {
2993
+ return this;
2994
+ }
2995
+ const sizeIndex = index - 1 >>> level & MASK;
2996
+ if (sizeIndex >= this.array.length) {
2997
+ return this;
2998
+ }
2999
+ let newChild;
3000
+ if (level > 0) {
3001
+ const oldChild = this.array[sizeIndex];
3002
+ newChild = oldChild?.removeAfter(ownerID, level - SHIFT, index);
3003
+ if (newChild === oldChild && sizeIndex === this.array.length - 1) {
3004
+ return this;
3005
+ }
3006
+ }
3007
+ const editable = editableVNode(this, ownerID);
3008
+ editable.array.splice(sizeIndex + 1);
3009
+ if (newChild) {
3010
+ editable.array[sizeIndex] = newChild;
3011
+ }
3012
+ return editable;
3013
+ }
3014
+ }
3015
+ function iterateList(list, reverse) {
3016
+ const left = list._origin;
3017
+ const right = list._capacity;
3018
+ const tailPos = getTailOffset(right);
3019
+ const tail = list._tail;
3020
+ const stack = [];
3021
+ pushFrame(list._root, list._level, 0);
3022
+ const result = {
3023
+ done: false,
3024
+ value: undefined
3025
+ };
3026
+ return makeIterator(() => {
3027
+ while (stack.length > 0) {
3028
+ const frame = stack[stack.length - 1];
3029
+ if (frame.from === frame.to) {
3030
+ stack.pop();
3031
+ continue;
3032
+ }
3033
+ const idx = reverse ? --frame.to : frame.from++;
3034
+ if (frame.isLeaf) {
3035
+ result.value = frame.array?.[idx];
3036
+ return result;
3037
+ }
3038
+ const childNode = frame.array?.[idx];
3039
+ const childLevel = frame.level - SHIFT;
3040
+ const childOffset = frame.offset + (idx << frame.level);
3041
+ pushFrame(childNode, childLevel, childOffset);
3042
+ }
3043
+ return DONE;
3044
+ });
3045
+ function pushFrame(node, level, offset) {
3046
+ if (level === 0) {
3047
+ const array = offset === tailPos ? tail?.array : node?.array;
3048
+ const from = offset > left ? 0 : left - offset;
3049
+ let to = right - offset;
3050
+ if (to > SIZE) {
3051
+ to = SIZE;
3052
+ }
3053
+ if (from !== to) {
3054
+ stack.push({
3055
+ array,
3056
+ from,
3057
+ to,
3058
+ isLeaf: true
3059
+ });
3060
+ }
3061
+ } else {
3062
+ const array = node?.array;
3063
+ const from = offset > left ? 0 : left - offset >> level;
3064
+ let to = (right - offset >> level) + 1;
3065
+ if (to > SIZE) {
3066
+ to = SIZE;
3067
+ }
3068
+ if (from !== to) {
3069
+ stack.push({
3070
+ array,
3071
+ from,
3072
+ to,
3073
+ level,
3074
+ offset,
3075
+ isLeaf: false
3076
+ });
3077
+ }
3078
+ }
3079
+ }
3080
+ }
3081
+ function iterateListCallback(list, fn, reverse) {
3082
+ const left = list._origin;
3083
+ const right = list._capacity;
3084
+ const tailPos = getTailOffset(right);
3085
+ const tail = list._tail;
3086
+ const level = list._level;
3087
+ const root = list._root;
3088
+ return level === 0 ? iterateLeaf(root, 0, left, right, tailPos, tail, fn, reverse) : iterateNode(root, level, 0, left, right, tailPos, tail, fn, reverse);
3089
+ }
3090
+ function iterateLeaf(node, offset, left, right, tailPos, tail, fn, reverse) {
3091
+ const array = offset === tailPos ? tail?.array : node?.array;
3092
+ let from = offset > left ? 0 : left - offset;
3093
+ let to = right - offset;
3094
+ if (to > SIZE) {
3095
+ to = SIZE;
3096
+ }
3097
+ while (from !== to) {
3098
+ const idx = reverse ? --to : from++;
3099
+ if (fn(array?.[idx]) === false) {
3100
+ return false;
3101
+ }
3102
+ }
3103
+ }
3104
+ function iterateNode(node, level, offset, left, right, tailPos, tail, fn, reverse) {
3105
+ const array = node?.array;
3106
+ let from = offset > left ? 0 : left - offset >> level;
3107
+ let to = (right - offset >> level) + 1;
3108
+ if (to > SIZE) {
3109
+ to = SIZE;
3110
+ }
3111
+ const nextLevel = level - SHIFT;
3112
+ while (from !== to) {
3113
+ const idx = reverse ? --to : from++;
3114
+ const nextOffset = offset + (idx << level);
3115
+ if ((nextLevel === 0 ? iterateLeaf(array?.[idx], nextOffset, left, right, tailPos, tail, fn, reverse) : iterateNode(array?.[idx], nextLevel, nextOffset, left, right, tailPos, tail, fn, reverse)) === false) {
3116
+ return false;
3117
+ }
3118
+ }
3119
+ }
3120
+ const makeList = (origin, capacity, level, root, tail, ownerID, hash) => new ListImpl(origin, capacity, level, root, tail, ownerID, hash);
3121
+ const emptyList = () => makeList(0, 0, SHIFT);
3122
+ function updateList(list, index, value) {
3123
+ index = wrapIndex(list, index);
3124
+ if (Number.isNaN(index)) {
3125
+ return list;
3126
+ }
3127
+ if (index >= list.size || index < 0) {
3128
+ return list.withMutations(list => {
3129
+ if (index < 0) {
3130
+ setListBounds(list, index).set(0, value);
3131
+ } else {
3132
+ setListBounds(list, 0, index + 1).set(index, value);
3133
+ }
3134
+ });
3135
+ }
3136
+ index += list._origin;
3137
+ let newTail = list._tail;
3138
+ let newRoot = list._root;
3139
+ const didAlter = MakeRef();
3140
+ if (index >= getTailOffset(list._capacity)) {
3141
+ newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);
3142
+ } else {
3143
+ newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter);
3144
+ }
3145
+ if (!didAlter.value) {
3146
+ return list;
3147
+ }
3148
+ if (list.__ownerID) {
3149
+ list._root = newRoot;
3150
+ list._tail = newTail;
3151
+ list.__hash = undefined;
3152
+ list.__altered = true;
3153
+ return list;
3154
+ }
3155
+ return makeList(list._origin, list._capacity, list._level, newRoot, newTail);
3156
+ }
3157
+ function updateVNode(node, ownerID, level, index, value, didAlter) {
3158
+ const idx = index >>> level & MASK;
3159
+ const nodeHas = node && idx < node.array.length;
3160
+ if (!nodeHas && value === undefined) {
3161
+ return node;
3162
+ }
3163
+ let newNode;
3164
+ if (level > 0) {
3165
+ const lowerNode = node?.array[idx];
3166
+ const newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter);
3167
+ if (newLowerNode === lowerNode) {
3168
+ return node;
3169
+ }
3170
+ newNode = editableVNode(node, ownerID);
3171
+ newNode.array[idx] = newLowerNode;
3172
+ return newNode;
3173
+ }
3174
+ if (nodeHas && node.array[idx] === value) {
3175
+ return node;
3176
+ }
3177
+ if (didAlter) {
3178
+ SetRef(didAlter);
3179
+ }
3180
+ newNode = editableVNode(node, ownerID);
3181
+ if (value === undefined && idx === newNode.array.length - 1) {
3182
+ newNode.array.pop();
3183
+ } else {
3184
+ newNode.array[idx] = value;
3185
+ }
3186
+ return newNode;
3187
+ }
3188
+ function editableVNode(node, ownerID) {
3189
+ if (ownerID && ownerID === node?.ownerID) {
3190
+ return node;
3191
+ }
3192
+ return new VNode(node?.array.slice() ?? [], ownerID);
3193
+ }
3194
+ function listNodeFor(list, rawIndex) {
3195
+ if (rawIndex >= getTailOffset(list._capacity)) {
3196
+ return list._tail;
3197
+ }
3198
+ if (rawIndex < 1 << list._level + SHIFT) {
3199
+ let node = list._root;
3200
+ let level = list._level;
3201
+ while (node && level > 0) {
3202
+ node = node.array[rawIndex >>> level & MASK];
3203
+ level -= SHIFT;
3204
+ }
3205
+ return node;
3206
+ }
3207
+ }
3208
+ function setListBounds(list, begin, end) {
3209
+ if (begin !== undefined) {
3210
+ begin |= 0;
3211
+ }
3212
+ if (end !== undefined) {
3213
+ end |= 0;
3214
+ }
3215
+ const owner = list.__ownerID || new OwnerID;
3216
+ let oldOrigin = list._origin;
3217
+ let oldCapacity = list._capacity;
3218
+ let newOrigin = oldOrigin + begin;
3219
+ let newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end;
3220
+ if (newOrigin === oldOrigin && newCapacity === oldCapacity) {
3221
+ return list;
3222
+ }
3223
+ if (newOrigin >= newCapacity) {
3224
+ return list.clear();
3225
+ }
3226
+ let newLevel = list._level;
3227
+ let newRoot = list._root;
3228
+ let offsetShift = 0;
3229
+ while (newOrigin + offsetShift < 0) {
3230
+ newRoot = new VNode(newRoot?.array.length ? [ undefined, newRoot ] : [], owner);
3231
+ newLevel += SHIFT;
3232
+ offsetShift += 1 << newLevel;
3233
+ }
3234
+ if (offsetShift) {
3235
+ newOrigin += offsetShift;
3236
+ oldOrigin += offsetShift;
3237
+ newCapacity += offsetShift;
3238
+ oldCapacity += offsetShift;
3239
+ }
3240
+ const oldTailOffset = getTailOffset(oldCapacity);
3241
+ const newTailOffset = getTailOffset(newCapacity);
3242
+ while (newTailOffset >= 1 << newLevel + SHIFT) {
3243
+ newRoot = new VNode(newRoot?.array.length ? [ newRoot ] : [], owner);
3244
+ newLevel += SHIFT;
3245
+ }
3246
+ const oldTail = list._tail;
3247
+ let newTail = newTailOffset < oldTailOffset ? listNodeFor(list, newCapacity - 1) : newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail;
3248
+ if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) {
3249
+ newRoot = editableVNode(newRoot, owner);
3250
+ let node = newRoot;
3251
+ for (let level = newLevel; level > SHIFT; level -= SHIFT) {
3252
+ const idx = oldTailOffset >>> level & MASK;
3253
+ node = node.array[idx] = editableVNode(node.array[idx], owner);
3254
+ }
3255
+ node.array[oldTailOffset >>> SHIFT & MASK] = oldTail;
3256
+ }
3257
+ if (newCapacity < oldCapacity) {
3258
+ newTail = newTail?.removeAfter(owner, 0, newCapacity);
3259
+ }
3260
+ if (newOrigin >= newTailOffset) {
3261
+ newOrigin -= newTailOffset;
3262
+ newCapacity -= newTailOffset;
3263
+ newLevel = SHIFT;
3264
+ newRoot = null;
3265
+ newTail = newTail?.removeBefore(owner, 0, newOrigin);
3266
+ } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {
3267
+ offsetShift = 0;
3268
+ while (newRoot) {
3269
+ const beginIndex = newOrigin >>> newLevel & MASK;
3270
+ if (beginIndex !== newTailOffset >>> newLevel & MASK) {
3271
+ break;
3272
+ }
3273
+ if (beginIndex) {
3274
+ offsetShift += (1 << newLevel) * beginIndex;
3275
+ }
3276
+ newLevel -= SHIFT;
3277
+ newRoot = newRoot.array[beginIndex];
3278
+ }
3279
+ if (newRoot && newOrigin > oldOrigin) {
3280
+ newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);
3281
+ }
3282
+ if (newRoot && newTailOffset < oldTailOffset) {
3283
+ newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift);
3284
+ }
3285
+ if (offsetShift) {
3286
+ newOrigin -= offsetShift;
3287
+ newCapacity -= offsetShift;
3288
+ }
3289
+ }
3290
+ if (list.__ownerID) {
3291
+ list.size = newCapacity - newOrigin;
3292
+ list._origin = newOrigin;
3293
+ list._capacity = newCapacity;
3294
+ list._level = newLevel;
3295
+ list._root = newRoot;
3296
+ list._tail = newTail;
3297
+ list.__hash = undefined;
3298
+ list.__altered = true;
3299
+ return list;
3300
+ }
3301
+ return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);
3302
+ }
3303
+ const getTailOffset = size => size < SIZE ? 0 : size - 1 >>> SHIFT << SHIFT;
3304
+ const OrderedMap = value => value === undefined || value === null ? emptyOrderedMap() : isOrderedMap(value) ? value : emptyOrderedMap().withMutations(map => {
3305
+ const iter = KeyedCollection(value);
3306
+ assertNotInfinite(iter.size);
3307
+ iter.forEach((v, k) => map.set(k, v));
3308
+ });
3309
+ OrderedMap.of = (...values) => OrderedMap(values);
3310
+ class OrderedMapImpl extends MapImpl {
3311
+ static {
3312
+ mixin(this, {
3313
+ [IS_ORDERED_SYMBOL]: true,
3314
+ [DELETE]: this.prototype.remove,
3315
+ [Symbol.iterator]: this.prototype.entries,
3316
+ [Symbol.toStringTag]: "Immutable.OrderedMap",
3317
+ keys: CollectionImpl.prototype.keys,
3318
+ values: CollectionImpl.prototype.values,
3319
+ __iterate: CollectionImpl.prototype.__iterate
3320
+ });
3321
+ }
3322
+ constructor(map, list, ownerID, hash) {
3323
+ super(map ? map.size : 0, undefined, ownerID, hash);
3324
+ this._map = map;
3325
+ this._list = list;
3326
+ }
3327
+ create(value) {
3328
+ return OrderedMap(value);
3329
+ }
3330
+ toString() {
3331
+ return this.__toString("OrderedMap {", "}");
3332
+ }
3333
+ get(k, notSetValue) {
3334
+ const index = this._map.get(k);
3335
+ return index !== undefined ? this._list.get(index)[1] : notSetValue;
3336
+ }
3337
+ clear() {
3338
+ if (this.size === 0) {
3339
+ return this;
3340
+ }
3341
+ if (this.__ownerID) {
3342
+ this.size = 0;
3343
+ this._map.clear();
3344
+ this._list.clear();
3345
+ this.__altered = true;
3346
+ return this;
3347
+ }
3348
+ return emptyOrderedMap();
3349
+ }
3350
+ set(k, v) {
3351
+ return updateOrderedMap(this, k, v);
3352
+ }
3353
+ remove(k) {
3354
+ return updateOrderedMap(this, k, NOT_SET);
3355
+ }
3356
+ entries() {
3357
+ return this.__iterator(false);
3358
+ }
3359
+ __iterator(reverse) {
3360
+ const listIter = this._list.__iterator(reverse);
3361
+ return makeEntryIterator(entry => {
3362
+ while (true) {
3363
+ const step = listIter.next();
3364
+ if (step.done) {
3365
+ return false;
3366
+ }
3367
+ const e = step.value[1];
3368
+ if (e) {
3369
+ entry[0] = e[0];
3370
+ entry[1] = e[1];
3371
+ return true;
3372
+ }
3373
+ }
3374
+ });
3375
+ }
3376
+ __ensureOwner(ownerID) {
3377
+ if (ownerID === this.__ownerID) {
3378
+ return this;
3379
+ }
3380
+ const newMap = this._map.__ensureOwner(ownerID);
3381
+ const newList = this._list.__ensureOwner(ownerID);
3382
+ if (!ownerID) {
3383
+ if (this.size === 0) {
3384
+ return emptyOrderedMap();
3385
+ }
3386
+ this.__ownerID = ownerID;
3387
+ this.__altered = false;
3388
+ this._map = newMap;
3389
+ this._list = newList;
3390
+ return this;
3391
+ }
3392
+ return makeOrderedMap(newMap, newList, ownerID, this.__hash);
3393
+ }
3394
+ }
3395
+ OrderedMap.isOrderedMap = isOrderedMap;
3396
+ const makeOrderedMap = (map, list, ownerID, hash) => new OrderedMapImpl(map, list, ownerID, hash);
3397
+ const emptyOrderedMap = () => makeOrderedMap(emptyMap(), emptyList());
3398
+ function updateOrderedMap(omap, k, v) {
3399
+ const {_map: map, _list: list} = omap;
3400
+ const i = map.get(k);
3401
+ const has = i !== undefined;
3402
+ let newMap;
3403
+ let newList;
3404
+ if (v === NOT_SET) {
3405
+ if (!has) {
3406
+ return omap;
3407
+ }
3408
+ if (list.size >= SIZE && list.size >= map.size * 2) {
3409
+ const entries = [];
3410
+ list.forEach((entry, idx) => {
3411
+ if (entry !== undefined && i !== idx) {
3412
+ entries.push(entry);
3413
+ }
3414
+ });
3415
+ newList = emptyList().withMutations(l => {
3416
+ for (let j = 0; j < entries.length; j++) {
3417
+ l.set(j, entries[j]);
3418
+ }
3419
+ });
3420
+ newMap = emptyMap().withMutations(m => {
3421
+ for (let j = 0; j < entries.length; j++) {
3422
+ m.set(entries[j][0], j);
3423
+ }
3424
+ });
3425
+ if (omap.__ownerID) {
3426
+ newMap.__ownerID = newList.__ownerID = omap.__ownerID;
3427
+ }
3428
+ } else {
3429
+ newMap = map.remove(k);
3430
+ newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);
3431
+ }
3432
+ } else if (has) {
3433
+ if (v === list.get(i)[1]) {
3434
+ return omap;
3435
+ }
3436
+ newMap = map;
3437
+ newList = list.set(i, [ k, v ]);
3438
+ } else {
3439
+ const newIdx = list.size;
3440
+ newMap = map.set(k, newIdx);
3441
+ newList = list.set(newIdx, [ k, v ]);
3442
+ }
3443
+ if (omap.__ownerID) {
3444
+ omap.size = newMap.size;
3445
+ omap._map = newMap;
3446
+ omap._list = newList;
3447
+ omap.__hash = undefined;
3448
+ omap.__altered = true;
3449
+ return omap;
3450
+ }
3451
+ return makeOrderedMap(newMap, newList);
3452
+ }
3453
+ const Stack = value => value === undefined || value === null ? emptyStack() : isStack(value) ? value : emptyStack().pushAll(value);
3454
+ Stack.of = (...values) => Stack(values);
3455
+ class StackImpl extends IndexedCollectionImpl {
3456
+ static {
3457
+ mixin(this, {
3458
+ asImmutable,
3459
+ asMutable,
3460
+ wasAltered,
3461
+ withMutations,
3462
+ [IS_STACK_SYMBOL]: true,
3463
+ shift: this.prototype.pop,
3464
+ unshift: this.prototype.push,
3465
+ unshiftAll: this.prototype.pushAll,
3466
+ [Symbol.toStringTag]: "Immutable.Stack",
3467
+ [Symbol.iterator]: this.prototype.values
3468
+ });
3469
+ }
3470
+ constructor(size, head, ownerID, hash) {
3471
+ super();
3472
+ this.size = size;
3473
+ this._head = head;
3474
+ this.__ownerID = ownerID;
3475
+ this.__hash = hash;
3476
+ this.__altered = false;
3477
+ }
3478
+ create(value) {
3479
+ return Stack(value);
3480
+ }
3481
+ toString() {
3482
+ return this.__toString("Stack [", "]");
3483
+ }
3484
+ get(index, notSetValue) {
3485
+ let head = this._head;
3486
+ index = wrapIndex(this, index);
3487
+ while (head && index--) {
3488
+ head = head.next;
3489
+ }
3490
+ return head ? head.value : notSetValue;
3491
+ }
3492
+ peek() {
3493
+ return this._head?.value;
3494
+ }
3495
+ push(...values) {
3496
+ if (values.length === 0) {
3497
+ return this;
3498
+ }
3499
+ const newSize = this.size + values.length;
3500
+ let head = this._head;
3501
+ for (let ii = values.length - 1; ii >= 0; ii--) {
3502
+ head = {
3503
+ value: values[ii],
3504
+ next: head
3505
+ };
3506
+ }
3507
+ return returnStack(this, newSize, head);
3508
+ }
3509
+ pushAll(iter) {
3510
+ iter = IndexedCollection(iter);
3511
+ if (iter.size === 0) {
3512
+ return this;
3513
+ }
3514
+ if (this.size === 0 && isStack(iter)) {
3515
+ return iter;
3516
+ }
3517
+ assertNotInfinite(iter.size);
3518
+ let newSize = this.size;
3519
+ let head = this._head;
3520
+ iter.__iterate(value => {
3521
+ newSize++;
3522
+ head = {
3523
+ value,
3524
+ next: head
3525
+ };
3526
+ }, true);
3527
+ return returnStack(this, newSize, head);
3528
+ }
3529
+ pop() {
3530
+ return this.slice(1);
3531
+ }
3532
+ clear() {
3533
+ if (this.size === 0) {
3534
+ return this;
3535
+ }
3536
+ if (this.__ownerID) {
3537
+ this.size = 0;
3538
+ this._head = undefined;
3539
+ this.__hash = undefined;
3540
+ this.__altered = true;
3541
+ return this;
3542
+ }
3543
+ return emptyStack();
3544
+ }
3545
+ slice(begin, end) {
3546
+ if (wholeSlice(begin, end, this.size)) {
3547
+ return this;
3548
+ }
3549
+ let resolvedBegin = resolveBegin(begin, this.size);
3550
+ const resolvedEnd = resolveEnd(end, this.size);
3551
+ if (resolvedEnd !== this.size) {
3552
+ return IndexedCollectionImpl.prototype.slice.call(this, begin, end);
3553
+ }
3554
+ const newSize = this.size - resolvedBegin;
3555
+ let head = this._head;
3556
+ while (resolvedBegin--) {
3557
+ head = head.next;
3558
+ }
3559
+ return returnStack(this, newSize, head);
3560
+ }
3561
+ __ensureOwner(ownerID) {
3562
+ if (ownerID === this.__ownerID) {
3563
+ return this;
3564
+ }
3565
+ if (!ownerID) {
3566
+ if (this.size === 0) {
3567
+ return emptyStack();
3568
+ }
3569
+ this.__ownerID = ownerID;
3570
+ this.__altered = false;
3571
+ return this;
3572
+ }
3573
+ return makeStack(this.size, this._head, ownerID, this.__hash);
3574
+ }
3575
+ __iterate(fn, reverse) {
3576
+ if (reverse) {
3577
+ const arr = this.toArray();
3578
+ const size = arr.length;
3579
+ let i = 0;
3580
+ while (i !== size) {
3581
+ if (fn(arr[size - ++i], size - i, this) === false) {
3582
+ break;
3583
+ }
3584
+ }
3585
+ return i;
3586
+ }
3587
+ let iterations = 0;
3588
+ let node = this._head;
3589
+ while (node) {
3590
+ if (fn(node.value, iterations++, this) === false) {
3591
+ break;
3592
+ }
3593
+ node = node.next;
3594
+ }
3595
+ return iterations;
3596
+ }
3597
+ __iterator(reverse) {
3598
+ if (reverse) {
3599
+ const arr = this.toArray();
3600
+ const size = arr.length;
3601
+ let i = 0;
3602
+ return makeEntryIterator(entry => {
3603
+ if (i === size) {
3604
+ return false;
3605
+ }
3606
+ const ii = size - ++i;
3607
+ entry[0] = ii;
3608
+ entry[1] = arr[ii];
3609
+ return true;
3610
+ });
3611
+ }
3612
+ let iterations = 0;
3613
+ let node = this._head;
3614
+ return makeEntryIterator(entry => {
3615
+ if (!node) {
3616
+ return false;
3617
+ }
3618
+ entry[0] = iterations++;
3619
+ entry[1] = node.value;
3620
+ node = node.next;
3621
+ return true;
3622
+ });
3623
+ }
3624
+ values() {
3625
+ let node = this._head;
3626
+ const result = {
3627
+ done: false,
3628
+ value: undefined
3629
+ };
3630
+ return makeIterator(() => {
3631
+ if (!node) return DONE;
3632
+ result.value = node.value;
3633
+ node = node.next;
3634
+ return result;
3635
+ });
3636
+ }
3637
+ keys() {
3638
+ return makeIndexKeys(this.size);
3639
+ }
3640
+ }
3641
+ Stack.isStack = isStack;
3642
+ function returnStack(stack, newSize, head) {
3643
+ if (stack.__ownerID) {
3644
+ stack.size = newSize;
3645
+ stack._head = head;
3646
+ stack.__hash = undefined;
3647
+ stack.__altered = true;
3648
+ return stack;
3649
+ }
3650
+ return makeStack(newSize, head);
3651
+ }
3652
+ const makeStack = (size, head, ownerID, hash) => new StackImpl(size, head, ownerID, hash);
3653
+ let EMPTY_STACK;
3654
+ const emptyStack = () => EMPTY_STACK || (EMPTY_STACK = makeStack(0));
3655
+ const Set = value => value === undefined || value === null ? emptySet() : isSet(value) && !isOrdered(value) ? value : emptySet().withMutations(set => {
3656
+ const iter = SetCollection(value);
3657
+ assertNotInfinite(iter.size);
3658
+ iter.forEach(v => set.add(v));
3659
+ });
3660
+ Set.of = (...values) => Set(values);
3661
+ Set.fromKeys = value => Set(KeyedCollection(value).keySeq());
3662
+ Set.intersect = sets => {
3663
+ sets = Collection(sets).toArray();
3664
+ return sets.length ? Set(sets.pop()).intersect(...sets) : emptySet();
3665
+ };
3666
+ Set.union = sets => {
3667
+ const setArray = Collection(sets).toArray();
3668
+ return setArray.length ? Set(setArray.pop()).union(...setArray) : emptySet();
3669
+ };
3670
+ class SetImpl extends SetCollectionImpl {
3671
+ static {
3672
+ mixin(this, {
3673
+ withMutations,
3674
+ asImmutable,
3675
+ asMutable,
3676
+ [IS_SET_SYMBOL]: true,
3677
+ [DELETE]: this.prototype.remove,
3678
+ merge: this.prototype.union,
3679
+ concat: this.prototype.union,
3680
+ [Symbol.toStringTag]: "Immutable.Set"
3681
+ });
3682
+ }
3683
+ constructor(map, ownerID) {
3684
+ super();
3685
+ this.size = map ? map.size : 0;
3686
+ this._map = map;
3687
+ this.__ownerID = ownerID;
3688
+ }
3689
+ create(value) {
3690
+ return Set(value);
3691
+ }
3692
+ toString() {
3693
+ return this.__toString("Set {", "}");
3694
+ }
3695
+ has(value) {
3696
+ return this._map.has(value);
3697
+ }
3698
+ add(value) {
3699
+ return updateSet(this, this._map.set(value, value));
3700
+ }
3701
+ remove(value) {
3702
+ return updateSet(this, this._map.remove(value));
3703
+ }
3704
+ clear() {
3705
+ return updateSet(this, this._map.clear());
3706
+ }
3707
+ map(mapper, context) {
3708
+ let didChanges = false;
3709
+ const newMap = updateSet(this, this._map.mapEntries(([, v]) => {
3710
+ const mapped = mapper.call(context, v, v, this);
3711
+ if (mapped !== v) {
3712
+ didChanges = true;
3713
+ }
3714
+ return [ mapped, mapped ];
3715
+ }, context));
3716
+ return didChanges ? newMap : this;
3717
+ }
3718
+ union(...iters) {
3719
+ iters = iters.filter(x => x.size !== 0);
3720
+ if (iters.length === 0) {
3721
+ return this;
3722
+ }
3723
+ if (this.size === 0 && !this.__ownerID && iters.length === 1) {
3724
+ return Set(iters[0]);
3725
+ }
3726
+ return this.withMutations(set => {
3727
+ for (const iter of iters) {
3728
+ if (typeof iter === "string") {
3729
+ set.add(iter);
3730
+ } else {
3731
+ SetCollection(iter).forEach(value => set.add(value));
3732
+ }
3733
+ }
3734
+ });
3735
+ }
3736
+ intersect(...iters) {
3737
+ return filterByIters(this, iters, (value, sets) => !sets.every(iter => iter.includes(value)));
3738
+ }
3739
+ subtract(...iters) {
3740
+ return filterByIters(this, iters, (value, sets) => sets.some(iter => iter.includes(value)));
3741
+ }
3742
+ wasAltered() {
3743
+ return this._map.wasAltered();
3744
+ }
3745
+ __iterator(reverse) {
3746
+ return this._map.__iterator(reverse);
3747
+ }
3748
+ __empty() {
3749
+ return emptySet();
3750
+ }
3751
+ __make(map, ownerID) {
3752
+ return makeSet(map, ownerID);
3753
+ }
3754
+ __ensureOwner(ownerID) {
3755
+ if (ownerID === this.__ownerID) {
3756
+ return this;
3757
+ }
3758
+ const newMap = this._map.__ensureOwner(ownerID);
3759
+ if (!ownerID) {
3760
+ if (this.size === 0) {
3761
+ return this.__empty();
3762
+ }
3763
+ this.__ownerID = ownerID;
3764
+ this._map = newMap;
3765
+ return this;
3766
+ }
3767
+ return this.__make(newMap, ownerID);
3768
+ }
3769
+ }
3770
+ Set.isSet = isSet;
3771
+ const makeSet = (map, ownerID) => new SetImpl(map, ownerID);
3772
+ let EMPTY_SET;
3773
+ const emptySet = () => EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));
3774
+ function filterByIters(set, iters, shouldRemove) {
3775
+ if (iters.length === 0) {
3776
+ return set;
3777
+ }
3778
+ iters = iters.map(iter => SetCollection(iter));
3779
+ return set.withMutations(s => {
3780
+ set.forEach(value => {
3781
+ if (shouldRemove(value, iters)) {
3782
+ s.remove(value);
3783
+ }
3784
+ });
3785
+ });
3786
+ }
3787
+ function updateSet(set, newMap) {
3788
+ if (set.__ownerID) {
3789
+ set.size = newMap.size;
3790
+ set._map = newMap;
3791
+ return set;
3792
+ }
3793
+ return newMap === set._map ? set : newMap.size === 0 ? set.__empty() : set.__make(newMap);
3794
+ }
3795
+ const OrderedSet = value => value === undefined || value === null ? emptyOrderedSet() : isOrderedSet(value) ? value : emptyOrderedSet().withMutations(set => {
3796
+ const iter = SetCollection(value);
3797
+ assertNotInfinite(iter.size);
3798
+ iter.forEach(v => set.add(v));
3799
+ });
3800
+ OrderedSet.of = (...values) => OrderedSet(values);
3801
+ OrderedSet.fromKeys = value => OrderedSet(KeyedCollection(value).keySeq());
3802
+ class OrderedSetImpl extends SetImpl {
3803
+ static {
3804
+ mixin(this, {
3805
+ [IS_ORDERED_SYMBOL]: true,
3806
+ [Symbol.toStringTag]: "Immutable.OrderedSet",
3807
+ zip: IndexedCollectionPrototype.zip,
3808
+ zipWith: IndexedCollectionPrototype.zipWith,
3809
+ zipAll: IndexedCollectionPrototype.zipAll
3810
+ });
3811
+ }
3812
+ create(value) {
3813
+ return OrderedSet(value);
3814
+ }
3815
+ toString() {
3816
+ return this.__toString("OrderedSet {", "}");
3817
+ }
3818
+ __empty() {
3819
+ return emptyOrderedSet();
3820
+ }
3821
+ __make(map, ownerID) {
3822
+ return makeOrderedSet(map, ownerID);
3823
+ }
3824
+ }
3825
+ OrderedSet.isOrderedSet = isOrderedSet;
3826
+ const makeOrderedSet = (map, ownerID) => new OrderedSetImpl(map, ownerID);
3827
+ const emptyOrderedSet = () => makeOrderedSet(emptyOrderedMap());
3828
+ const PairSorting = {
3829
+ LeftThenRight: -1,
3830
+ RightThenLeft: 1
3831
+ };
3832
+ function throwOnInvalidDefaultValues(defaultValues) {
3833
+ if (isRecord(defaultValues)) {
3834
+ throw new Error("Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.");
3835
+ }
3836
+ if (isImmutable(defaultValues)) {
3837
+ throw new Error("Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.");
3838
+ }
3839
+ if (defaultValues === null || typeof defaultValues !== "object") {
3840
+ throw new Error("Can not call `Record` with a non-object as default values. Use a plain javascript object instead.");
3841
+ }
3842
+ }
3843
+ const Record = (defaultValues, name) => {
3844
+ let hasInitialized;
3845
+ throwOnInvalidDefaultValues(defaultValues);
3846
+ const RecordType = function Record(values) {
3847
+ if (values instanceof RecordType) {
3848
+ return values;
3849
+ }
3850
+ if (!(this instanceof RecordType)) {
3851
+ return new RecordType(values);
3852
+ }
3853
+ if (!hasInitialized) {
3854
+ hasInitialized = true;
3855
+ const keys = Object.keys(defaultValues);
3856
+ const indices = RecordTypePrototype._indices = {};
3857
+ RecordTypePrototype._name = name;
3858
+ RecordTypePrototype._keys = keys;
3859
+ RecordTypePrototype._defaultValues = defaultValues;
3860
+ for (let i = 0; i < keys.length; i++) {
3861
+ const propName = keys[i];
3862
+ indices[propName] = i;
3863
+ if (RecordTypePrototype[propName]) {
3864
+ console.warn(`Cannot define ${recordName(this)} with property "${propName}" since that property name is part of the Record API.`);
3865
+ } else {
3866
+ setProp(RecordTypePrototype, propName);
3867
+ }
3868
+ }
3869
+ }
3870
+ this.__ownerID = undefined;
3871
+ this._values = List().withMutations(l => {
3872
+ l.setSize(this._keys.length);
3873
+ KeyedCollection(values).forEach((v, k) => {
3874
+ l.set(this._indices[k], v === this._defaultValues[k] ? undefined : v);
3875
+ });
3876
+ });
3877
+ return this;
3878
+ };
3879
+ const RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype);
3880
+ RecordTypePrototype.constructor = RecordType;
3881
+ RecordTypePrototype.create = RecordType;
3882
+ if (name) {
3883
+ RecordType.displayName = name;
3884
+ }
3885
+ return RecordType;
3886
+ };
3887
+ class RecordImpl {
3888
+ static {
3889
+ mixin(this, {
3890
+ asImmutable,
3891
+ asMutable,
3892
+ deleteIn,
3893
+ getIn,
3894
+ hasIn,
3895
+ merge,
3896
+ mergeWith,
3897
+ mergeDeep,
3898
+ mergeDeepWith,
3899
+ mergeDeepIn,
3900
+ mergeIn,
3901
+ setIn,
3902
+ toObject,
3903
+ update,
3904
+ updateIn,
3905
+ withMutations,
3906
+ removeIn: deleteIn,
3907
+ toJSON: toObject,
3908
+ [IS_RECORD_SYMBOL]: true,
3909
+ [DELETE]: this.prototype.remove,
3910
+ [Symbol.iterator]: this.prototype.entries,
3911
+ [Symbol.toStringTag]: "Immutable.Record"
3912
+ });
3913
+ }
3914
+ toString() {
3915
+ const body = this._keys.map(k => `${k}: ${quoteString(this.get(k))}`).join(", ");
3916
+ return `${recordName(this)} { ${body} }`;
3917
+ }
3918
+ equals(other) {
3919
+ return this === other || isRecord(other) && recordSeq(this).equals(recordSeq(other));
3920
+ }
3921
+ hashCode() {
3922
+ return recordSeq(this).hashCode();
3923
+ }
3924
+ has(k) {
3925
+ return Object.hasOwn(this._indices, k);
3926
+ }
3927
+ get(k, notSetValue) {
3928
+ if (!this.has(k)) {
3929
+ return notSetValue;
3930
+ }
3931
+ const index = this._indices[k];
3932
+ const value = this._values.get(index);
3933
+ return value === undefined ? this._defaultValues[k] : value;
3934
+ }
3935
+ set(k, v) {
3936
+ if (this.has(k)) {
3937
+ const newValues = this._values.set(this._indices[k], v === this._defaultValues[k] ? undefined : v);
3938
+ if (newValues !== this._values && !this.__ownerID) {
3939
+ return makeRecord(this, newValues);
3940
+ }
3941
+ }
3942
+ return this;
3943
+ }
3944
+ remove(k) {
3945
+ return this.set(k);
3946
+ }
3947
+ clear() {
3948
+ const newValues = this._values.clear().setSize(this._keys.length);
3949
+ return this.__ownerID ? this : makeRecord(this, newValues);
3950
+ }
3951
+ wasAltered() {
3952
+ return this._values.wasAltered();
3953
+ }
3954
+ toSeq() {
3955
+ return recordSeq(this);
3956
+ }
3957
+ toJS() {
3958
+ return toJS(this);
3959
+ }
3960
+ entries() {
3961
+ return this.__iterator();
3962
+ }
3963
+ __iterate(fn, reverse) {
3964
+ return recordSeq(this).__iterate(fn, reverse);
3965
+ }
3966
+ __iterator(reverse) {
3967
+ return recordSeq(this).__iterator(reverse);
3968
+ }
3969
+ __ensureOwner(ownerID) {
3970
+ if (ownerID === this.__ownerID) {
3971
+ return this;
3972
+ }
3973
+ const newValues = this._values.__ensureOwner(ownerID);
3974
+ if (!ownerID) {
3975
+ this.__ownerID = ownerID;
3976
+ this._values = newValues;
3977
+ return this;
3978
+ }
3979
+ return makeRecord(this, newValues, ownerID);
3980
+ }
3981
+ }
3982
+ Record.isRecord = isRecord;
3983
+ const recordName = record => record.constructor.displayName || record.constructor.name || "Record";
3984
+ class RecordSeq extends KeyedSeqImpl {
3985
+ constructor(record) {
3986
+ super();
3987
+ this._record = record;
3988
+ this.size = record._keys.length;
3989
+ }
3990
+ get(key, notSetValue) {
3991
+ return this._record.get(key, notSetValue);
3992
+ }
3993
+ has(key) {
3994
+ return this._record.has(key);
3995
+ }
3996
+ __iterateUncached(fn, reverse) {
3997
+ const record = this._record;
3998
+ const keys = record._keys;
3999
+ const size = keys.length;
4000
+ let i = 0;
4001
+ while (i !== size) {
4002
+ const ii = reverse ? size - ++i : i++;
4003
+ const k = keys[ii];
4004
+ if (fn(record.get(k), k, this) === false) {
4005
+ break;
4006
+ }
4007
+ }
4008
+ return i;
4009
+ }
4010
+ __iteratorUncached(reverse) {
4011
+ const record = this._record;
4012
+ const keys = record._keys;
4013
+ const size = keys.length;
4014
+ let i = 0;
4015
+ return makeEntryIterator(entry => {
4016
+ if (i === size) {
4017
+ return false;
4018
+ }
4019
+ const ii = reverse ? size - ++i : i++;
4020
+ const k = keys[ii];
4021
+ entry[0] = k;
4022
+ entry[1] = record.get(k);
4023
+ return true;
4024
+ });
4025
+ }
4026
+ }
4027
+ const recordSeq = record => new RecordSeq(record);
4028
+ Record.getDescriptiveName = recordName;
4029
+ const RecordPrototype = RecordImpl.prototype;
4030
+ function makeRecord(likeRecord, values, ownerID) {
4031
+ const record = Object.create(Object.getPrototypeOf(likeRecord));
4032
+ record._values = values;
4033
+ record.__ownerID = ownerID;
4034
+ return record;
4035
+ }
4036
+ function setProp(prototype, name) {
4037
+ Object.defineProperty(prototype, name, {
4038
+ get() {
4039
+ return this.get(name);
4040
+ },
4041
+ set(value) {
4042
+ invariant(this.__ownerID, "Cannot set on an immutable record.");
4043
+ this.set(name, value);
4044
+ }
4045
+ });
4046
+ }
4047
+ const Range = (start, end, step = 1) => {
4048
+ invariant(step !== 0, "Cannot step a Range by 0");
4049
+ invariant(start !== undefined, "You must define a start value when using Range");
4050
+ invariant(end !== undefined, "You must define an end value when using Range");
4051
+ step = Math.abs(step);
4052
+ if (end < start) {
4053
+ step = -step;
4054
+ }
4055
+ const size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);
4056
+ return new RangeImpl(start, end, step, size);
4057
+ };
4058
+ class RangeImpl extends IndexedSeqImpl {
4059
+ _start;
4060
+ _end;
4061
+ _step;
4062
+ constructor(start, end, step, size) {
4063
+ super();
4064
+ this._start = start;
4065
+ this._end = end;
4066
+ this._step = step;
4067
+ this.size = size;
4068
+ }
4069
+ toString() {
4070
+ return this.size === 0 ? "Range []" : `Range [ ${this._start}...${this._end}${this._step !== 1 ? ` by ${this._step}` : ""} ]`;
4071
+ }
4072
+ get(index, notSetValue) {
4073
+ return this.has(index) ? this._start + wrapIndex(this, index) * this._step : notSetValue;
4074
+ }
4075
+ includes(searchValue) {
4076
+ const possibleIndex = (searchValue - this._start) / this._step;
4077
+ return possibleIndex >= 0 && possibleIndex < this.size && possibleIndex === Math.floor(possibleIndex);
4078
+ }
4079
+ slice(begin, end) {
4080
+ if (wholeSlice(begin, end, this.size)) {
4081
+ return this;
4082
+ }
4083
+ begin = resolveBegin(begin, this.size);
4084
+ end = resolveEnd(end, this.size);
4085
+ if (end <= begin) {
4086
+ return Range(0, 0);
4087
+ }
4088
+ return Range(this.get(begin, this._end), this.get(end, this._end), this._step);
4089
+ }
4090
+ indexOf(searchValue) {
4091
+ const offsetValue = searchValue - this._start;
4092
+ if (offsetValue % this._step === 0) {
4093
+ const index = offsetValue / this._step;
4094
+ if (index >= 0 && index < this.size) {
4095
+ return index;
4096
+ }
4097
+ }
4098
+ return -1;
4099
+ }
4100
+ lastIndexOf(searchValue) {
4101
+ return this.indexOf(searchValue);
4102
+ }
4103
+ __iterateUncached(fn, reverse = false) {
4104
+ const size = this.size;
4105
+ const step = this._step;
4106
+ let value = reverse ? this._start + (size - 1) * step : this._start;
4107
+ let i = 0;
4108
+ while (i !== size) {
4109
+ const v = value;
4110
+ value += reverse ? -step : step;
4111
+ const ii = reverse ? size - ++i : i++;
4112
+ if (fn(v, ii, this) === false) {
4113
+ break;
4114
+ }
4115
+ }
4116
+ return i;
4117
+ }
4118
+ __iteratorUncached(reverse = false) {
4119
+ const size = this.size;
4120
+ const step = this._step;
4121
+ let value = reverse ? this._start + (size - 1) * step : this._start;
4122
+ let i = 0;
4123
+ return makeEntryIterator(entry => {
4124
+ if (i === size) {
4125
+ return false;
4126
+ }
4127
+ const v = value;
4128
+ value += reverse ? -step : step;
4129
+ entry[0] = reverse ? size - ++i : i++;
4130
+ entry[1] = v;
4131
+ return true;
4132
+ });
4133
+ }
4134
+ values() {
4135
+ const size = this.size;
4136
+ const step = this._step;
4137
+ let value = this._start;
4138
+ let i = 0;
4139
+ const result = {
4140
+ done: false,
4141
+ value: undefined
4142
+ };
4143
+ return makeIterator(() => {
4144
+ if (i === size) return DONE;
4145
+ result.value = value;
4146
+ value += step;
4147
+ i++;
4148
+ return result;
4149
+ });
4150
+ }
4151
+ keys() {
4152
+ return makeIndexKeys(this.size);
4153
+ }
4154
+ equals(other) {
4155
+ return other instanceof RangeImpl ? this._start === other._start && this._end === other._end && this._step === other._step : deepEqual(this, other);
4156
+ }
4157
+ static {
4158
+ this.prototype[Symbol.iterator] = this.prototype.values;
4159
+ }
4160
+ }
4161
+ const Repeat = (value, times) => {
4162
+ const size = times === undefined ? Infinity : Math.max(0, times);
4163
+ return new RepeatImpl(value, size);
4164
+ };
4165
+ class RepeatImpl extends IndexedSeqImpl {
4166
+ constructor(value, size) {
4167
+ super();
4168
+ this._value = value;
4169
+ this.size = size;
4170
+ }
4171
+ toString() {
4172
+ if (this.size === 0) {
4173
+ return "Repeat []";
4174
+ }
4175
+ return `Repeat [ ${this._value} ${this.size} times ]`;
4176
+ }
4177
+ get(index, notSetValue) {
4178
+ return this.has(index) ? this._value : notSetValue;
4179
+ }
4180
+ includes(searchValue) {
4181
+ return is(this._value, searchValue);
4182
+ }
4183
+ slice(begin, end) {
4184
+ const size = this.size;
4185
+ return wholeSlice(begin, end, size) ? this : new RepeatImpl(this._value, resolveEnd(end, size) - resolveBegin(begin, size));
4186
+ }
4187
+ reverse() {
4188
+ return this;
4189
+ }
4190
+ indexOf(searchValue) {
4191
+ if (is(this._value, searchValue)) {
4192
+ return 0;
4193
+ }
4194
+ return -1;
4195
+ }
4196
+ lastIndexOf(searchValue) {
4197
+ if (is(this._value, searchValue)) {
4198
+ return this.size;
4199
+ }
4200
+ return -1;
4201
+ }
4202
+ __iterateUncached(fn, reverse) {
4203
+ const size = this.size;
4204
+ let i = 0;
4205
+ while (i !== size) {
4206
+ if (fn(this._value, reverse ? size - ++i : i++, this) === false) {
4207
+ break;
4208
+ }
4209
+ }
4210
+ return i;
4211
+ }
4212
+ __iteratorUncached(reverse) {
4213
+ const size = this.size;
4214
+ const val = this._value;
4215
+ let i = 0;
4216
+ return makeEntryIterator(entry => {
4217
+ if (i === size) {
4218
+ return false;
4219
+ }
4220
+ entry[0] = reverse ? size - ++i : i++;
4221
+ entry[1] = val;
4222
+ return true;
4223
+ });
4224
+ }
4225
+ values() {
4226
+ const size = this.size;
4227
+ const val = this._value;
4228
+ let i = 0;
4229
+ const result = {
4230
+ done: false,
4231
+ value: undefined
4232
+ };
4233
+ return makeIterator(() => {
4234
+ if (i === size) return DONE;
4235
+ i++;
4236
+ result.value = val;
4237
+ return result;
4238
+ });
4239
+ }
4240
+ keys() {
4241
+ return makeIndexKeys(this.size);
4242
+ }
4243
+ equals(other) {
4244
+ return other instanceof RepeatImpl ? this.size === other.size && is(this._value, other._value) : deepEqual(this, other);
4245
+ }
4246
+ static {
4247
+ this.prototype[Symbol.iterator] = this.prototype.values;
4248
+ }
4249
+ }
4250
+ const fromJS = (value, converter) => fromJSWith([], converter ?? defaultConverter, value, "", converter?.length > 2 ? [] : undefined, {
4251
+ "": value
4252
+ });
4253
+ function fromJSWith(stack, converter, value, key, keyPath, parentValue) {
4254
+ if (typeof value !== "string" && !isImmutable(value) && (isArrayLike(value) || hasIterator(value) || isPlainObject(value))) {
4255
+ if (stack.includes(value)) {
4256
+ throw new TypeError("Cannot convert circular structure to Immutable");
4257
+ }
4258
+ stack.push(value);
4259
+ if (keyPath && key !== "") {
4260
+ keyPath.push(key);
4261
+ }
4262
+ const converted = converter.call(parentValue, key, Seq(value).map((v, k) => fromJSWith(stack, converter, v, k, keyPath, value)), keyPath?.slice());
4263
+ stack.pop();
4264
+ if (keyPath) {
4265
+ keyPath.pop();
4266
+ }
4267
+ return converted;
4268
+ }
4269
+ return value;
4270
+ }
4271
+ const defaultConverter = (k, v) => isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet();
4272
+ const asValues = collection => isKeyed(collection) ? collection.valueSeq() : collection;
4273
+ function initCollectionConversions() {
4274
+ CollectionImpl.prototype.toMap = function toMap() {
4275
+ return Map(this.toKeyedSeq());
4276
+ };
4277
+ CollectionImpl.prototype.toOrderedMap = function toOrderedMap() {
4278
+ return OrderedMap(this.toKeyedSeq());
4279
+ };
4280
+ CollectionImpl.prototype.toOrderedSet = function toOrderedSet() {
4281
+ return OrderedSet(asValues(this));
4282
+ };
4283
+ CollectionImpl.prototype.toSet = function toSet() {
4284
+ return Set(asValues(this));
4285
+ };
4286
+ CollectionImpl.prototype.toStack = function toStack() {
4287
+ return Stack(asValues(this));
4288
+ };
4289
+ CollectionImpl.prototype.toList = function toList() {
4290
+ return List(asValues(this));
4291
+ };
4292
+ CollectionImpl.prototype.countBy = function countBy(grouper, context) {
4293
+ const groups = Map().asMutable();
4294
+ this.__iterate((v, k) => {
4295
+ groups.update(grouper.call(context, v, k, this), 0, a => a + 1);
4296
+ });
4297
+ return groups.asImmutable();
4298
+ };
4299
+ CollectionImpl.prototype.groupBy = function groupBy(grouper, context) {
4300
+ const isKeyedIter = isKeyed(this);
4301
+ const groups = (isOrdered(this) ? OrderedMap() : Map()).asMutable();
4302
+ this.__iterate((v, k) => {
4303
+ groups.update(grouper.call(context, v, k, this), a => {
4304
+ a ??= [];
4305
+ a.push(isKeyedIter ? [ k, v ] : v);
4306
+ return a;
4307
+ });
4308
+ });
4309
+ return groups.map(arr => reifyValues(this, arr)).asImmutable();
4310
+ };
4311
+ IndexedCollectionImpl.prototype.keySeq = function keySeq() {
4312
+ return Range(0, this.size);
4313
+ };
4314
+ MapImpl.prototype.sort = function sort(comparator) {
4315
+ return OrderedMap(sortFactory(this, comparator));
4316
+ };
4317
+ MapImpl.prototype.sortBy = function sortBy(mapper, comparator) {
4318
+ return OrderedMap(sortFactory(this, comparator, mapper));
4319
+ };
4320
+ SetImpl.prototype.sort = function sort(comparator) {
4321
+ return OrderedSet(sortFactory(this, comparator));
4322
+ };
4323
+ SetImpl.prototype.sortBy = function sortBy(mapper, comparator) {
4324
+ return OrderedSet(sortFactory(this, comparator, mapper));
4325
+ };
4326
+ }
4327
+ var version$1 = "7.0.0";
4328
+ var pkg = {
4329
+ version: version$1
4330
+ };
4331
+ initCollectionConversions();
4332
+ const {version} = pkg;
4333
+ export { Collection, List, Map, OrderedMap, OrderedSet, PairSorting, Range, Record, Repeat, Seq, Set, Stack, fromJS, get, getIn$1 as getIn, has, hasIn$1 as hasIn, hash, is, isAssociative, isCollection, isImmutable, isIndexed, isKeyed, isList, isMap, isOrdered, isOrderedMap, isOrderedSet, isPlainObject, isRecord, isSeq, isSet, isStack, isValueObject, merge$1 as merge, mergeDeep$1 as mergeDeep, mergeDeepWith$1 as mergeDeepWith, mergeWith$1 as mergeWith, remove, removeIn, set, setIn$1 as setIn, update$1 as update, updateIn$1 as updateIn, version };