2413 lines
61 KiB
Text
2413 lines
61 KiB
Text
|
/**
|
||
|
* This file provides type definitions for use with the Flow type checker.
|
||
|
*
|
||
|
* An important caveat when using these definitions is that the types for
|
||
|
* `Collection.Keyed`, `Collection.Indexed`, `Seq.Keyed`, and so on are stubs.
|
||
|
* When referring to those types, you can get the proper definitions by
|
||
|
* importing the types `KeyedCollection`, `IndexedCollection`, `KeyedSeq`, etc.
|
||
|
* For example,
|
||
|
*
|
||
|
* import { Seq } from 'immutable'
|
||
|
* import type { IndexedCollection, IndexedSeq } from 'immutable'
|
||
|
*
|
||
|
* const someSeq: IndexedSeq<number> = Seq.Indexed.of(1, 2, 3)
|
||
|
*
|
||
|
* function takesASeq<T, TS: IndexedCollection<T>>(iter: TS): TS {
|
||
|
* return iter.butLast()
|
||
|
* }
|
||
|
*
|
||
|
* takesASeq(someSeq)
|
||
|
*
|
||
|
* @flow strict
|
||
|
*/
|
||
|
|
||
|
// Helper type that represents plain objects allowed as arguments to
|
||
|
// some constructors and functions.
|
||
|
type PlainObjInput<K, V> = { +[key: K]: V, __proto__: null };
|
||
|
|
||
|
type K<T> = $Keys<T>;
|
||
|
|
||
|
// Helper types to extract the "keys" and "values" use by the *In() methods.
|
||
|
type $KeyOf<C> = $Call<
|
||
|
(<K>(?_Collection<K, mixed>) => K) &
|
||
|
(<T>(?$ReadOnlyArray<T>) => number) &
|
||
|
(<T>(?RecordInstance<T> | T) => $Keys<T>) &
|
||
|
(<T: Object>(T) => $Keys<T>),
|
||
|
C
|
||
|
>;
|
||
|
|
||
|
type $ValOf<C, K = $KeyOf<C>> = $Call<
|
||
|
(<V>(?_Collection<any, V>) => V) &
|
||
|
(<T>(?$ReadOnlyArray<T>) => T) &
|
||
|
(<T, K: $Keys<T>>(?RecordInstance<T> | T, K) => $ElementType<T, K>) &
|
||
|
(<T: Object>(T) => $Values<T>),
|
||
|
C,
|
||
|
K
|
||
|
>;
|
||
|
|
||
|
type $IterableOf<C> = $Call<
|
||
|
(<V: Array<any> | IndexedCollection<any> | SetCollection<any>>(
|
||
|
V
|
||
|
) => Iterable<$ValOf<V>>) &
|
||
|
(<
|
||
|
V:
|
||
|
| KeyedCollection<any, any>
|
||
|
| RecordInstance<any>
|
||
|
| PlainObjInput<any, any>
|
||
|
>(
|
||
|
V
|
||
|
) => Iterable<[$KeyOf<V>, $ValOf<V>]>),
|
||
|
C
|
||
|
>;
|
||
|
|
||
|
const PairSorting: $ReadOnly<{ LeftThenRight: number, RightThenLeft: number }> =
|
||
|
{
|
||
|
LeftThenRight: -1,
|
||
|
RightThenLeft: +1,
|
||
|
};
|
||
|
|
||
|
type Comparator<T> = (left: T, right: T) => number;
|
||
|
|
||
|
declare class _Collection<K, +V> implements ValueObject {
|
||
|
equals(other: mixed): boolean;
|
||
|
hashCode(): number;
|
||
|
get(key: K, ..._: []): V | void;
|
||
|
get<NSV>(key: K, notSetValue: NSV): V | NSV;
|
||
|
has(key: K): boolean;
|
||
|
includes(value: V): boolean;
|
||
|
contains(value: V): boolean;
|
||
|
first<NSV>(notSetValue?: NSV): V | NSV;
|
||
|
last<NSV>(notSetValue?: NSV): V | NSV;
|
||
|
|
||
|
hasIn(keyPath: Iterable<mixed>): boolean;
|
||
|
|
||
|
getIn(keyPath: [], notSetValue?: mixed): this;
|
||
|
getIn<NSV>(keyPath: [K], notSetValue: NSV): V | NSV;
|
||
|
getIn<NSV, K2: $KeyOf<V>>(
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<V, K2> | NSV;
|
||
|
getIn<NSV, K2: $KeyOf<V>, K3: $KeyOf<$ValOf<V, K2>>>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<V, K2>, K3> | NSV;
|
||
|
getIn<
|
||
|
NSV,
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4> | NSV;
|
||
|
getIn<
|
||
|
NSV,
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5> | NSV;
|
||
|
|
||
|
update<U>(updater: (value: this) => U): U;
|
||
|
|
||
|
toJS(): Array<any> | { [key: string]: mixed };
|
||
|
toJSON(): Array<V> | { [key: string]: V };
|
||
|
toArray(): Array<V> | Array<[K, V]>;
|
||
|
toObject(): { [key: string]: V };
|
||
|
toMap(): Map<K, V>;
|
||
|
toOrderedMap(): OrderedMap<K, V>;
|
||
|
toSet(): Set<V>;
|
||
|
toOrderedSet(): OrderedSet<V>;
|
||
|
toList(): List<V>;
|
||
|
toStack(): Stack<V>;
|
||
|
toSeq(): Seq<K, V>;
|
||
|
toKeyedSeq(): KeyedSeq<K, V>;
|
||
|
toIndexedSeq(): IndexedSeq<V>;
|
||
|
toSetSeq(): SetSeq<V>;
|
||
|
|
||
|
keys(): Iterator<K>;
|
||
|
values(): Iterator<V>;
|
||
|
entries(): Iterator<[K, V]>;
|
||
|
|
||
|
keySeq(): IndexedSeq<K>;
|
||
|
valueSeq(): IndexedSeq<V>;
|
||
|
entrySeq(): IndexedSeq<[K, V]>;
|
||
|
|
||
|
reverse(): this;
|
||
|
sort(comparator?: Comparator<V>): this;
|
||
|
|
||
|
sortBy<C>(
|
||
|
comparatorValueMapper: (value: V, key: K, iter: this) => C,
|
||
|
comparator?: Comparator<C>
|
||
|
): this;
|
||
|
|
||
|
groupBy<G>(
|
||
|
grouper: (value: V, key: K, iter: this) => G,
|
||
|
context?: mixed
|
||
|
): KeyedSeq<G, this>;
|
||
|
|
||
|
forEach(
|
||
|
sideEffect: (value: V, key: K, iter: this) => any,
|
||
|
context?: mixed
|
||
|
): number;
|
||
|
|
||
|
slice(begin?: number, end?: number): this;
|
||
|
rest(): this;
|
||
|
butLast(): this;
|
||
|
skip(amount: number): this;
|
||
|
skipLast(amount: number): this;
|
||
|
skipWhile(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): this;
|
||
|
skipUntil(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): this;
|
||
|
take(amount: number): this;
|
||
|
takeLast(amount: number): this;
|
||
|
takeWhile(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): this;
|
||
|
takeUntil(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): this;
|
||
|
|
||
|
filterNot(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): this;
|
||
|
|
||
|
reduce<R>(
|
||
|
reducer: (reduction: R, value: V, key: K, iter: this) => R,
|
||
|
initialReduction: R,
|
||
|
context?: mixed
|
||
|
): R;
|
||
|
reduce<R>(reducer: (reduction: V | R, value: V, key: K, iter: this) => R): R;
|
||
|
|
||
|
reduceRight<R>(
|
||
|
reducer: (reduction: R, value: V, key: K, iter: this) => R,
|
||
|
initialReduction: R,
|
||
|
context?: mixed
|
||
|
): R;
|
||
|
reduceRight<R>(
|
||
|
reducer: (reduction: V | R, value: V, key: K, iter: this) => R
|
||
|
): R;
|
||
|
|
||
|
every(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): boolean;
|
||
|
some(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): boolean;
|
||
|
join(separator?: string): string;
|
||
|
isEmpty(): boolean;
|
||
|
count(
|
||
|
predicate?: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): number;
|
||
|
countBy<G>(
|
||
|
grouper: (value: V, key: K, iter: this) => G,
|
||
|
context?: mixed
|
||
|
): Map<G, number>;
|
||
|
|
||
|
find<NSV>(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed,
|
||
|
notSetValue?: NSV
|
||
|
): V | NSV;
|
||
|
findLast<NSV>(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed,
|
||
|
notSetValue?: NSV
|
||
|
): V | NSV;
|
||
|
|
||
|
findEntry(predicate: (value: V, key: K, iter: this) => mixed): [K, V] | void;
|
||
|
findLastEntry(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed
|
||
|
): [K, V] | void;
|
||
|
|
||
|
findKey(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): K | void;
|
||
|
findLastKey(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): K | void;
|
||
|
|
||
|
keyOf(searchValue: V): K | void;
|
||
|
lastKeyOf(searchValue: V): K | void;
|
||
|
|
||
|
max(comparator?: Comparator<V>): V;
|
||
|
maxBy<C>(
|
||
|
comparatorValueMapper: (value: V, key: K, iter: this) => C,
|
||
|
comparator?: Comparator<C>
|
||
|
): V;
|
||
|
min(comparator?: Comparator<V>): V;
|
||
|
minBy<C>(
|
||
|
comparatorValueMapper: (value: V, key: K, iter: this) => C,
|
||
|
comparator?: Comparator<C>
|
||
|
): V;
|
||
|
|
||
|
isSubset(iter: Iterable<V>): boolean;
|
||
|
isSuperset(iter: Iterable<V>): boolean;
|
||
|
}
|
||
|
|
||
|
declare function isImmutable(
|
||
|
maybeImmutable: mixed
|
||
|
): boolean %checks(maybeImmutable instanceof Collection);
|
||
|
declare function isCollection(
|
||
|
maybeCollection: mixed
|
||
|
): boolean %checks(maybeCollection instanceof Collection);
|
||
|
declare function isKeyed(
|
||
|
maybeKeyed: mixed
|
||
|
): boolean %checks(maybeKeyed instanceof KeyedCollection);
|
||
|
declare function isIndexed(
|
||
|
maybeIndexed: mixed
|
||
|
): boolean %checks(maybeIndexed instanceof IndexedCollection);
|
||
|
declare function isAssociative(
|
||
|
maybeAssociative: mixed
|
||
|
): boolean %checks(maybeAssociative instanceof KeyedCollection ||
|
||
|
maybeAssociative instanceof IndexedCollection);
|
||
|
declare function isOrdered(
|
||
|
maybeOrdered: mixed
|
||
|
): boolean %checks(maybeOrdered instanceof IndexedCollection ||
|
||
|
maybeOrdered instanceof OrderedMap ||
|
||
|
maybeOrdered instanceof OrderedSet);
|
||
|
declare function isValueObject(maybeValue: mixed): boolean;
|
||
|
|
||
|
declare function isSeq(maybeSeq: any): boolean %checks(maybeSeq instanceof Seq);
|
||
|
declare function isList(maybeList: any): boolean %checks(maybeList instanceof
|
||
|
List);
|
||
|
declare function isMap(maybeMap: any): boolean %checks(maybeMap instanceof Map);
|
||
|
declare function isOrderedMap(
|
||
|
maybeOrderedMap: any
|
||
|
): boolean %checks(maybeOrderedMap instanceof OrderedMap);
|
||
|
declare function isStack(maybeStack: any): boolean %checks(maybeStack instanceof
|
||
|
Stack);
|
||
|
declare function isSet(maybeSet: any): boolean %checks(maybeSet instanceof Set);
|
||
|
declare function isOrderedSet(
|
||
|
maybeOrderedSet: any
|
||
|
): boolean %checks(maybeOrderedSet instanceof OrderedSet);
|
||
|
declare function isRecord(
|
||
|
maybeRecord: any
|
||
|
): boolean %checks(maybeRecord instanceof Record);
|
||
|
|
||
|
declare interface ValueObject {
|
||
|
equals(other: mixed): boolean;
|
||
|
hashCode(): number;
|
||
|
}
|
||
|
|
||
|
declare class Collection<K, +V> extends _Collection<K, V> {
|
||
|
static Keyed: typeof KeyedCollection;
|
||
|
static Indexed: typeof IndexedCollection;
|
||
|
static Set: typeof SetCollection;
|
||
|
|
||
|
static isCollection: typeof isCollection;
|
||
|
static isKeyed: typeof isKeyed;
|
||
|
static isIndexed: typeof isIndexed;
|
||
|
static isAssociative: typeof isAssociative;
|
||
|
static isOrdered: typeof isOrdered;
|
||
|
}
|
||
|
|
||
|
declare class KeyedCollection<K, +V> extends Collection<K, V> {
|
||
|
static <K, V>(
|
||
|
values?: Iterable<[K, V]> | PlainObjInput<K, V>
|
||
|
): KeyedCollection<K, V>;
|
||
|
|
||
|
toJS(): { [key: string]: mixed };
|
||
|
toJSON(): { [key: string]: V };
|
||
|
toArray(): Array<[K, V]>;
|
||
|
@@iterator(): Iterator<[K, V]>;
|
||
|
toSeq(): KeyedSeq<K, V>;
|
||
|
flip(): KeyedCollection<V, K>;
|
||
|
|
||
|
concat<KC, VC>(
|
||
|
...iters: Array<Iterable<[KC, VC]> | PlainObjInput<KC, VC>>
|
||
|
): KeyedCollection<K | KC, V | VC>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): KeyedCollection<K, $NonMaybeType<V>>;
|
||
|
filter(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): KeyedCollection<K, V>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: V, key: K, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): KeyedCollection<K, M>;
|
||
|
|
||
|
mapKeys<M>(
|
||
|
mapper: (key: K, value: V, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): KeyedCollection<M, V>;
|
||
|
|
||
|
mapEntries<KM, VM>(
|
||
|
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
|
||
|
context?: mixed
|
||
|
): KeyedCollection<KM, VM>;
|
||
|
|
||
|
flatMap<KM, VM>(
|
||
|
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
|
||
|
context?: mixed
|
||
|
): KeyedCollection<KM, VM>;
|
||
|
|
||
|
flatten(depth?: number): KeyedCollection<any, any>;
|
||
|
flatten(shallow?: boolean): KeyedCollection<any, any>;
|
||
|
}
|
||
|
|
||
|
Collection.Keyed = KeyedCollection;
|
||
|
|
||
|
declare class IndexedCollection<+T> extends Collection<number, T> {
|
||
|
static <T>(iter?: Iterable<T>): IndexedCollection<T>;
|
||
|
|
||
|
toJS(): Array<mixed>;
|
||
|
toJSON(): Array<T>;
|
||
|
toArray(): Array<T>;
|
||
|
@@iterator(): Iterator<T>;
|
||
|
toSeq(): IndexedSeq<T>;
|
||
|
fromEntrySeq<K, V>(): KeyedSeq<K, V>;
|
||
|
interpose(separator: T): this;
|
||
|
interleave(...collections: Iterable<T>[]): this;
|
||
|
splice(index: number, removeNum: number, ...values: T[]): this;
|
||
|
|
||
|
zip<A>(a: Iterable<A>, ..._: []): IndexedCollection<[T, A]>;
|
||
|
zip<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T, A, B]>;
|
||
|
zip<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T, A, B, C]>;
|
||
|
zip<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T, A, B, C, D]>;
|
||
|
zip<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T, A, B, C, D, E]>;
|
||
|
|
||
|
zipAll<A>(a: Iterable<A>, ..._: []): IndexedCollection<[T | void, A | void]>;
|
||
|
zipAll<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T | void, A | void, B | void]>;
|
||
|
zipAll<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T | void, A | void, B | void, C | void]>;
|
||
|
zipAll<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedCollection<[T | void, A | void, B | void, C | void, D | void]>;
|
||
|
zipAll<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedCollection<
|
||
|
[T | void, A | void, B | void, C | void, D | void, E | void]
|
||
|
>;
|
||
|
|
||
|
zipWith<A, R>(
|
||
|
zipper: (value: T, a: A) => R,
|
||
|
a: Iterable<A>,
|
||
|
..._: []
|
||
|
): IndexedCollection<R>;
|
||
|
zipWith<A, B, R>(
|
||
|
zipper: (value: T, a: A, b: B) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): IndexedCollection<R>;
|
||
|
zipWith<A, B, C, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedCollection<R>;
|
||
|
zipWith<A, B, C, D, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedCollection<R>;
|
||
|
zipWith<A, B, C, D, E, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedCollection<R>;
|
||
|
|
||
|
indexOf(searchValue: T): number;
|
||
|
lastIndexOf(searchValue: T): number;
|
||
|
findIndex(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): number;
|
||
|
findLastIndex(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): number;
|
||
|
|
||
|
concat<C>(...iters: Array<Iterable<C> | C>): IndexedCollection<T | C>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): IndexedCollection<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): IndexedCollection<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): IndexedCollection<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): IndexedCollection<M>;
|
||
|
|
||
|
flatten(depth?: number): IndexedCollection<any>;
|
||
|
flatten(shallow?: boolean): IndexedCollection<any>;
|
||
|
}
|
||
|
|
||
|
declare class SetCollection<+T> extends Collection<T, T> {
|
||
|
static <T>(iter?: Iterable<T>): SetCollection<T>;
|
||
|
|
||
|
toJS(): Array<mixed>;
|
||
|
toJSON(): Array<T>;
|
||
|
toArray(): Array<T>;
|
||
|
@@iterator(): Iterator<T>;
|
||
|
toSeq(): SetSeq<T>;
|
||
|
|
||
|
concat<U>(...collections: Iterable<U>[]): SetCollection<T | U>;
|
||
|
|
||
|
// `filter`, `map` and `flatMap` cannot be defined further up the hierarchy,
|
||
|
// because the implementation for `KeyedCollection` allows the value type to
|
||
|
// change without constraining the key type. That does not work for
|
||
|
// `SetCollection` - the value and key types *must* match.
|
||
|
filter(predicate: typeof Boolean): SetCollection<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): SetCollection<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): SetCollection<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): SetCollection<M>;
|
||
|
|
||
|
flatten(depth?: number): SetCollection<any>;
|
||
|
flatten(shallow?: boolean): SetCollection<any>;
|
||
|
}
|
||
|
|
||
|
declare function isSeq(maybeSeq: mixed): boolean %checks(maybeSeq instanceof
|
||
|
Seq);
|
||
|
declare class Seq<K, +V> extends _Collection<K, V> {
|
||
|
static Keyed: typeof KeyedSeq;
|
||
|
static Indexed: typeof IndexedSeq;
|
||
|
static Set: typeof SetSeq;
|
||
|
|
||
|
static <K, V>(values: KeyedSeq<K, V>): KeyedSeq<K, V>;
|
||
|
static <T>(values: SetSeq<T>): SetSeq<K, V>;
|
||
|
static <T>(values: Iterable<T>): IndexedSeq<T>;
|
||
|
static <K, V>(values?: PlainObjInput<K, V>): KeyedSeq<K, V>;
|
||
|
|
||
|
static isSeq: typeof isSeq;
|
||
|
|
||
|
size: number | void;
|
||
|
cacheResult(): this;
|
||
|
toSeq(): this;
|
||
|
}
|
||
|
|
||
|
declare class KeyedSeq<K, +V> extends Seq<K, V> mixins KeyedCollection<K, V> {
|
||
|
static <K, V>(
|
||
|
values?: Iterable<[K, V]> | PlainObjInput<K, V>
|
||
|
): KeyedSeq<K, V>;
|
||
|
|
||
|
// Override specialized return types
|
||
|
flip(): KeyedSeq<V, K>;
|
||
|
|
||
|
concat<KC, VC>(
|
||
|
...iters: Array<Iterable<[KC, VC]> | PlainObjInput<KC, VC>>
|
||
|
): KeyedSeq<K | KC, V | VC>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): KeyedSeq<K, $NonMaybeType<V>>;
|
||
|
filter(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): KeyedSeq<K, V>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: V, key: K, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): KeyedSeq<K, M>;
|
||
|
|
||
|
mapKeys<M>(
|
||
|
mapper: (key: K, value: V, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): KeyedSeq<M, V>;
|
||
|
|
||
|
mapEntries<KM, VM>(
|
||
|
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
|
||
|
context?: mixed
|
||
|
): KeyedSeq<KM, VM>;
|
||
|
|
||
|
flatMap<KM, VM>(
|
||
|
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
|
||
|
context?: mixed
|
||
|
): KeyedSeq<KM, VM>;
|
||
|
|
||
|
flatten(depth?: number): KeyedSeq<any, any>;
|
||
|
flatten(shallow?: boolean): KeyedSeq<any, any>;
|
||
|
}
|
||
|
|
||
|
declare class IndexedSeq<+T>
|
||
|
extends Seq<number, T>
|
||
|
mixins IndexedCollection<T>
|
||
|
{
|
||
|
static <T>(values?: Iterable<T>): IndexedSeq<T>;
|
||
|
|
||
|
static of<T>(...values: T[]): IndexedSeq<T>;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
concat<C>(...iters: Array<Iterable<C> | C>): IndexedSeq<T | C>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): IndexedSeq<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): IndexedSeq<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): IndexedSeq<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): IndexedSeq<M>;
|
||
|
|
||
|
flatten(depth?: number): IndexedSeq<any>;
|
||
|
flatten(shallow?: boolean): IndexedSeq<any>;
|
||
|
|
||
|
zip<A>(a: Iterable<A>, ..._: []): IndexedSeq<[T, A]>;
|
||
|
zip<A, B>(a: Iterable<A>, b: Iterable<B>, ..._: []): IndexedSeq<[T, A, B]>;
|
||
|
zip<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T, A, B, C]>;
|
||
|
zip<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T, A, B, C, D]>;
|
||
|
zip<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T, A, B, C, D, E]>;
|
||
|
|
||
|
zipAll<A>(a: Iterable<A>, ..._: []): IndexedSeq<[T | void, A | void]>;
|
||
|
zipAll<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T | void, A | void, B | void]>;
|
||
|
zipAll<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T | void, A | void, B | void, C | void]>;
|
||
|
zipAll<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T | void, A | void, B | void, C | void, D | void]>;
|
||
|
zipAll<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedSeq<[T | void, A | void, B | void, C | void, D | void, E | void]>;
|
||
|
|
||
|
zipWith<A, R>(
|
||
|
zipper: (value: T, a: A) => R,
|
||
|
a: Iterable<A>,
|
||
|
..._: []
|
||
|
): IndexedSeq<R>;
|
||
|
zipWith<A, B, R>(
|
||
|
zipper: (value: T, a: A, b: B) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): IndexedSeq<R>;
|
||
|
zipWith<A, B, C, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): IndexedSeq<R>;
|
||
|
zipWith<A, B, C, D, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): IndexedSeq<R>;
|
||
|
zipWith<A, B, C, D, E, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): IndexedSeq<R>;
|
||
|
}
|
||
|
|
||
|
declare class SetSeq<+T> extends Seq<T, T> mixins SetCollection<T> {
|
||
|
static <T>(values?: Iterable<T>): SetSeq<T>;
|
||
|
|
||
|
static of<T>(...values: T[]): SetSeq<T>;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
concat<U>(...collections: Iterable<U>[]): SetSeq<T | U>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): SetSeq<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): SetSeq<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): SetSeq<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): SetSeq<M>;
|
||
|
|
||
|
flatten(depth?: number): SetSeq<any>;
|
||
|
flatten(shallow?: boolean): SetSeq<any>;
|
||
|
}
|
||
|
|
||
|
declare class UpdatableInCollection<K, +V> {
|
||
|
setIn<S>(keyPath: [], value: S): S;
|
||
|
setIn(keyPath: [K], value: V): this;
|
||
|
setIn<K2: $KeyOf<V>, S: $ValOf<V, K2>>(keyPath: [K, K2], value: S): this;
|
||
|
setIn<K2: $KeyOf<V>, K3: $KeyOf<$ValOf<V, K2>>, S: $ValOf<$ValOf<V, K2>, K3>>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
value: S
|
||
|
): this;
|
||
|
setIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
value: S
|
||
|
): this;
|
||
|
setIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
value: S
|
||
|
): this;
|
||
|
|
||
|
deleteIn(keyPath: []): void;
|
||
|
deleteIn(keyPath: [K]): this;
|
||
|
deleteIn<K2: $KeyOf<V>>(keyPath: [K, K2]): this;
|
||
|
deleteIn<K2: $KeyOf<V>, K3: $KeyOf<$ValOf<V, K2>>>(
|
||
|
keyPath: [K, K2, K3]
|
||
|
): this;
|
||
|
deleteIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4]
|
||
|
): this;
|
||
|
deleteIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5]
|
||
|
): this;
|
||
|
|
||
|
removeIn(keyPath: []): void;
|
||
|
removeIn(keyPath: [K]): this;
|
||
|
removeIn<K2: $KeyOf<V>>(keyPath: [K, K2]): this;
|
||
|
removeIn<K2: $KeyOf<V>, K3: $KeyOf<$ValOf<V, K2>>>(
|
||
|
keyPath: [K, K2, K3]
|
||
|
): this;
|
||
|
removeIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4]
|
||
|
): this;
|
||
|
removeIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5]
|
||
|
): this;
|
||
|
|
||
|
updateIn<U>(keyPath: [], notSetValue: mixed, updater: (value: this) => U): U;
|
||
|
updateIn<U>(keyPath: [], updater: (value: this) => U): U;
|
||
|
updateIn<NSV>(keyPath: [K], notSetValue: NSV, updater: (value: V) => V): this;
|
||
|
updateIn(keyPath: [K], updater: (value: V) => V): this;
|
||
|
updateIn<NSV, K2: $KeyOf<V>, S: $ValOf<V, K2>>(
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<V, K2> | NSV) => S
|
||
|
): this;
|
||
|
updateIn<K2: $KeyOf<V>, S: $ValOf<V, K2>>(
|
||
|
keyPath: [K, K2],
|
||
|
updater: (value: $ValOf<V, K2>) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
S: $ValOf<$ValOf<V, K2>, K3>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<V, K2>, K3> | NSV) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
S: $ValOf<$ValOf<V, K2>, K3>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
updater: (value: $ValOf<$ValOf<V, K2>, K3>) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4> | NSV) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV,
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5> | NSV
|
||
|
) => S
|
||
|
): this;
|
||
|
updateIn<
|
||
|
K2: $KeyOf<V>,
|
||
|
K3: $KeyOf<$ValOf<V, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<V, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<$ValOf<V, K2>, K3>, K4>, K5>) => S
|
||
|
): this;
|
||
|
}
|
||
|
|
||
|
declare function isList(maybeList: mixed): boolean %checks(maybeList instanceof
|
||
|
List);
|
||
|
declare class List<+T>
|
||
|
extends IndexedCollection<T>
|
||
|
mixins UpdatableInCollection<number, T>
|
||
|
{
|
||
|
static (collection?: Iterable<T>): List<T>;
|
||
|
|
||
|
static of<T>(...values: T[]): List<T>;
|
||
|
|
||
|
static isList: typeof isList;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
set<U>(index: number, value: U): List<T | U>;
|
||
|
delete(index: number): this;
|
||
|
remove(index: number): this;
|
||
|
insert<U>(index: number, value: U): List<T | U>;
|
||
|
clear(): this;
|
||
|
push<U>(...values: U[]): List<T | U>;
|
||
|
pop(): this;
|
||
|
unshift<U>(...values: U[]): List<T | U>;
|
||
|
shift(): this;
|
||
|
|
||
|
update<U>(updater: (value: this) => U): U;
|
||
|
update<U>(index: number, updater: (value: T) => U): List<T | U>;
|
||
|
update<U>(
|
||
|
index: number,
|
||
|
notSetValue: U,
|
||
|
updater: (value: T) => U
|
||
|
): List<T | U>;
|
||
|
|
||
|
merge<U>(...collections: Iterable<U>[]): List<T | U>;
|
||
|
|
||
|
setSize(size: number): this;
|
||
|
|
||
|
mergeIn(keyPath: Iterable<mixed>, ...collections: Iterable<mixed>[]): this;
|
||
|
mergeDeepIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: Iterable<mixed>[]
|
||
|
): this;
|
||
|
|
||
|
withMutations(mutator: (mutable: this) => mixed): this;
|
||
|
asMutable(): this;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
concat<C>(...iters: Array<Iterable<C> | C>): List<T | C>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): List<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): List<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): List<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): List<M>;
|
||
|
|
||
|
flatten(depth?: number): List<any>;
|
||
|
flatten(shallow?: boolean): List<any>;
|
||
|
|
||
|
zip<A>(a: Iterable<A>, ..._: []): List<[T, A]>;
|
||
|
zip<A, B>(a: Iterable<A>, b: Iterable<B>, ..._: []): List<[T, A, B]>;
|
||
|
zip<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): List<[T, A, B, C]>;
|
||
|
zip<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): List<[T, A, B, C, D]>;
|
||
|
zip<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): List<[T, A, B, C, D, E]>;
|
||
|
|
||
|
zipAll<A>(a: Iterable<A>, ..._: []): List<[T | void, A | void]>;
|
||
|
zipAll<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): List<[T | void, A | void, B | void]>;
|
||
|
zipAll<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): List<[T | void, A | void, B | void, C | void]>;
|
||
|
zipAll<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): List<[T | void, A | void, B | void, C | void, D | void]>;
|
||
|
zipAll<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): List<[T | void, A | void, B | void, C | void, D | void, E | void]>;
|
||
|
|
||
|
zipWith<A, R>(
|
||
|
zipper: (value: T, a: A) => R,
|
||
|
a: Iterable<A>,
|
||
|
..._: []
|
||
|
): List<R>;
|
||
|
zipWith<A, B, R>(
|
||
|
zipper: (value: T, a: A, b: B) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): List<R>;
|
||
|
zipWith<A, B, C, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): List<R>;
|
||
|
zipWith<A, B, C, D, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): List<R>;
|
||
|
zipWith<A, B, C, D, E, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): List<R>;
|
||
|
}
|
||
|
|
||
|
declare function isMap(maybeMap: mixed): boolean %checks(maybeMap instanceof
|
||
|
Map);
|
||
|
declare class Map<K, +V>
|
||
|
extends KeyedCollection<K, V>
|
||
|
mixins UpdatableInCollection<K, V>
|
||
|
{
|
||
|
static <K, V>(values?: Iterable<[K, V]> | PlainObjInput<K, V>): Map<K, V>;
|
||
|
|
||
|
static isMap: typeof isMap;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
set<K_, V_>(key: K_, value: V_): Map<K | K_, V | V_>;
|
||
|
delete(key: K): this;
|
||
|
remove(key: K): this;
|
||
|
clear(): this;
|
||
|
|
||
|
deleteAll(keys: Iterable<K>): Map<K, V>;
|
||
|
removeAll(keys: Iterable<K>): Map<K, V>;
|
||
|
|
||
|
update<U>(updater: (value: this) => U): U;
|
||
|
update<V_>(key: K, updater: (value: V) => V_): Map<K, V | V_>;
|
||
|
update<V_>(
|
||
|
key: K,
|
||
|
notSetValue: V_,
|
||
|
updater: (value: V) => V_
|
||
|
): Map<K, V | V_>;
|
||
|
|
||
|
merge<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): Map<K | K_, V | V_>;
|
||
|
concat<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): Map<K | K_, V | V_>;
|
||
|
|
||
|
mergeWith<K_, W, X>(
|
||
|
merger: (oldVal: V, newVal: W, key: K) => X,
|
||
|
...collections: (Iterable<[K_, W]> | PlainObjInput<K_, W>)[]
|
||
|
): Map<K | K_, V | W | X>;
|
||
|
|
||
|
mergeDeep<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): Map<K | K_, V | V_>;
|
||
|
|
||
|
mergeDeepWith<K_, V_>(
|
||
|
merger: (oldVal: any, newVal: any, key: any) => mixed,
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): Map<K | K_, V | V_>;
|
||
|
|
||
|
mergeIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: (Iterable<mixed> | PlainObjInput<mixed, mixed>)[]
|
||
|
): this;
|
||
|
mergeDeepIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: (Iterable<mixed> | PlainObjInput<mixed, mixed>)[]
|
||
|
): this;
|
||
|
|
||
|
withMutations(mutator: (mutable: this) => mixed): this;
|
||
|
asMutable(): this;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
flip(): Map<V, K>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): Map<K, $NonMaybeType<V>>;
|
||
|
filter(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): Map<K, V>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: V, key: K, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): Map<K, M>;
|
||
|
|
||
|
mapKeys<M>(
|
||
|
mapper: (key: K, value: V, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): Map<M, V>;
|
||
|
|
||
|
mapEntries<KM, VM>(
|
||
|
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
|
||
|
context?: mixed
|
||
|
): Map<KM, VM>;
|
||
|
|
||
|
flatMap<KM, VM>(
|
||
|
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
|
||
|
context?: mixed
|
||
|
): Map<KM, VM>;
|
||
|
|
||
|
flatten(depth?: number): Map<any, any>;
|
||
|
flatten(shallow?: boolean): Map<any, any>;
|
||
|
}
|
||
|
|
||
|
declare function isOrderedMap(
|
||
|
maybeOrderedMap: mixed
|
||
|
): boolean %checks(maybeOrderedMap instanceof OrderedMap);
|
||
|
declare class OrderedMap<K, +V>
|
||
|
extends Map<K, V>
|
||
|
mixins UpdatableInCollection<K, V>
|
||
|
{
|
||
|
static <K, V>(
|
||
|
values?: Iterable<[K, V]> | PlainObjInput<K, V>
|
||
|
): OrderedMap<K, V>;
|
||
|
|
||
|
static isOrderedMap: typeof isOrderedMap;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
set<K_, V_>(key: K_, value: V_): OrderedMap<K | K_, V | V_>;
|
||
|
delete(key: K): this;
|
||
|
remove(key: K): this;
|
||
|
clear(): this;
|
||
|
|
||
|
update<U>(updater: (value: this) => U): U;
|
||
|
update<V_>(key: K, updater: (value: V) => V_): OrderedMap<K, V | V_>;
|
||
|
update<V_>(
|
||
|
key: K,
|
||
|
notSetValue: V_,
|
||
|
updater: (value: V) => V_
|
||
|
): OrderedMap<K, V | V_>;
|
||
|
|
||
|
merge<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): OrderedMap<K | K_, V | V_>;
|
||
|
concat<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): OrderedMap<K | K_, V | V_>;
|
||
|
|
||
|
mergeWith<K_, W, X>(
|
||
|
merger: (oldVal: V, newVal: W, key: K) => X,
|
||
|
...collections: (Iterable<[K_, W]> | PlainObjInput<K_, W>)[]
|
||
|
): OrderedMap<K | K_, V | W | X>;
|
||
|
|
||
|
mergeDeep<K_, V_>(
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): OrderedMap<K | K_, V | V_>;
|
||
|
|
||
|
mergeDeepWith<K_, V_>(
|
||
|
merger: (oldVal: any, newVal: any, key: any) => mixed,
|
||
|
...collections: (Iterable<[K_, V_]> | PlainObjInput<K_, V_>)[]
|
||
|
): OrderedMap<K | K_, V | V_>;
|
||
|
|
||
|
mergeIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: (Iterable<mixed> | PlainObjInput<mixed, mixed>)[]
|
||
|
): this;
|
||
|
mergeDeepIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: (Iterable<mixed> | PlainObjInput<mixed, mixed>)[]
|
||
|
): this;
|
||
|
|
||
|
withMutations(mutator: (mutable: this) => mixed): this;
|
||
|
asMutable(): this;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
flip(): OrderedMap<V, K>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): OrderedMap<K, $NonMaybeType<V>>;
|
||
|
filter(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): OrderedMap<K, V>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: V, key: K, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: V, key: K, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): OrderedMap<K, M>;
|
||
|
|
||
|
mapKeys<M>(
|
||
|
mapper: (key: K, value: V, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): OrderedMap<M, V>;
|
||
|
|
||
|
mapEntries<KM, VM>(
|
||
|
mapper: (entry: [K, V], index: number, iter: this) => [KM, VM],
|
||
|
context?: mixed
|
||
|
): OrderedMap<KM, VM>;
|
||
|
|
||
|
flatMap<KM, VM>(
|
||
|
mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
|
||
|
context?: mixed
|
||
|
): OrderedMap<KM, VM>;
|
||
|
|
||
|
flatten(depth?: number): OrderedMap<any, any>;
|
||
|
flatten(shallow?: boolean): OrderedMap<any, any>;
|
||
|
}
|
||
|
|
||
|
declare function isSet(maybeSet: mixed): boolean %checks(maybeSet instanceof
|
||
|
Set);
|
||
|
declare class Set<+T> extends SetCollection<T> {
|
||
|
static <T>(values?: Iterable<T>): Set<T>;
|
||
|
|
||
|
static of<T>(...values: T[]): Set<T>;
|
||
|
static fromKeys<T>(
|
||
|
values: Iterable<[T, mixed]> | PlainObjInput<T, mixed>
|
||
|
): Set<T>;
|
||
|
|
||
|
static intersect(sets: Iterable<Iterable<T>>): Set<T>;
|
||
|
static union(sets: Iterable<Iterable<T>>): Set<T>;
|
||
|
|
||
|
static isSet: typeof isSet;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
add<U>(value: U): Set<T | U>;
|
||
|
delete(value: T): this;
|
||
|
remove(value: T): this;
|
||
|
clear(): this;
|
||
|
union<U>(...collections: Iterable<U>[]): Set<T | U>;
|
||
|
merge<U>(...collections: Iterable<U>[]): Set<T | U>;
|
||
|
concat<U>(...collections: Iterable<U>[]): Set<T | U>;
|
||
|
intersect<U>(...collections: Iterable<U>[]): Set<T & U>;
|
||
|
subtract(...collections: Iterable<mixed>[]): this;
|
||
|
|
||
|
withMutations(mutator: (mutable: this) => mixed): this;
|
||
|
asMutable(): this;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
filter(predicate: typeof Boolean): Set<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): Set<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): Set<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): Set<M>;
|
||
|
|
||
|
flatten(depth?: number): Set<any>;
|
||
|
flatten(shallow?: boolean): Set<any>;
|
||
|
}
|
||
|
|
||
|
// Overrides except for `isOrderedSet` are for specialized return types
|
||
|
declare function isOrderedSet(
|
||
|
maybeOrderedSet: mixed
|
||
|
): boolean %checks(maybeOrderedSet instanceof OrderedSet);
|
||
|
declare class OrderedSet<+T> extends Set<T> {
|
||
|
static <T>(values?: Iterable<T>): OrderedSet<T>;
|
||
|
|
||
|
static of<T>(...values: T[]): OrderedSet<T>;
|
||
|
static fromKeys<T>(
|
||
|
values: Iterable<[T, mixed]> | PlainObjInput<T, mixed>
|
||
|
): OrderedSet<T>;
|
||
|
|
||
|
static isOrderedSet: typeof isOrderedSet;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
add<U>(value: U): OrderedSet<T | U>;
|
||
|
union<U>(...collections: Iterable<U>[]): OrderedSet<T | U>;
|
||
|
merge<U>(...collections: Iterable<U>[]): OrderedSet<T | U>;
|
||
|
concat<U>(...collections: Iterable<U>[]): OrderedSet<T | U>;
|
||
|
intersect<U>(...collections: Iterable<U>[]): OrderedSet<T & U>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): OrderedSet<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): OrderedSet<T>;
|
||
|
|
||
|
partition(
|
||
|
predicate: (value: T, value: T, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): [this, this];
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): OrderedSet<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, value: T, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): OrderedSet<M>;
|
||
|
|
||
|
flatten(depth?: number): OrderedSet<any>;
|
||
|
flatten(shallow?: boolean): OrderedSet<any>;
|
||
|
|
||
|
zip<A>(a: Iterable<A>, ..._: []): OrderedSet<[T, A]>;
|
||
|
zip<A, B>(a: Iterable<A>, b: Iterable<B>, ..._: []): OrderedSet<[T, A, B]>;
|
||
|
zip<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T, A, B, C]>;
|
||
|
zip<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T, A, B, C, D]>;
|
||
|
zip<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T, A, B, C, D, E]>;
|
||
|
|
||
|
zipAll<A>(a: Iterable<A>, ..._: []): OrderedSet<[T | void, A | void]>;
|
||
|
zipAll<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T | void, A | void, B | void]>;
|
||
|
zipAll<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T | void, A | void, B | void, C | void]>;
|
||
|
zipAll<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T | void, A | void, B | void, C | void, D | void]>;
|
||
|
zipAll<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): OrderedSet<[T | void, A | void, B | void, C | void, D | void, E | void]>;
|
||
|
|
||
|
zipWith<A, R>(
|
||
|
zipper: (value: T, a: A) => R,
|
||
|
a: Iterable<A>,
|
||
|
..._: []
|
||
|
): OrderedSet<R>;
|
||
|
zipWith<A, B, R>(
|
||
|
zipper: (value: T, a: A, b: B) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): OrderedSet<R>;
|
||
|
zipWith<A, B, C, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): OrderedSet<R>;
|
||
|
zipWith<A, B, C, D, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): OrderedSet<R>;
|
||
|
zipWith<A, B, C, D, E, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): OrderedSet<R>;
|
||
|
}
|
||
|
|
||
|
declare function isStack(
|
||
|
maybeStack: mixed
|
||
|
): boolean %checks(maybeStack instanceof Stack);
|
||
|
declare class Stack<+T> extends IndexedCollection<T> {
|
||
|
static <T>(collection?: Iterable<T>): Stack<T>;
|
||
|
|
||
|
static isStack(maybeStack: mixed): boolean;
|
||
|
static of<T>(...values: T[]): Stack<T>;
|
||
|
|
||
|
static isStack: typeof isStack;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
peek(): T;
|
||
|
clear(): this;
|
||
|
unshift<U>(...values: U[]): Stack<T | U>;
|
||
|
unshiftAll<U>(iter: Iterable<U>): Stack<T | U>;
|
||
|
shift(): this;
|
||
|
push<U>(...values: U[]): Stack<T | U>;
|
||
|
pushAll<U>(iter: Iterable<U>): Stack<T | U>;
|
||
|
pop(): this;
|
||
|
|
||
|
withMutations(mutator: (mutable: this) => mixed): this;
|
||
|
asMutable(): this;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this;
|
||
|
|
||
|
// Override specialized return types
|
||
|
|
||
|
concat<C>(...iters: Array<Iterable<C> | C>): Stack<T | C>;
|
||
|
|
||
|
filter(predicate: typeof Boolean): Stack<$NonMaybeType<T>>;
|
||
|
filter(
|
||
|
predicate: (value: T, index: number, iter: this) => mixed,
|
||
|
context?: mixed
|
||
|
): Stack<T>;
|
||
|
|
||
|
map<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => M,
|
||
|
context?: mixed
|
||
|
): Stack<M>;
|
||
|
|
||
|
flatMap<M>(
|
||
|
mapper: (value: T, index: number, iter: this) => Iterable<M>,
|
||
|
context?: mixed
|
||
|
): Stack<M>;
|
||
|
|
||
|
flatten(depth?: number): Stack<any>;
|
||
|
flatten(shallow?: boolean): Stack<any>;
|
||
|
|
||
|
zip<A>(a: Iterable<A>, ..._: []): Stack<[T, A]>;
|
||
|
zip<A, B>(a: Iterable<A>, b: Iterable<B>, ..._: []): Stack<[T, A, B]>;
|
||
|
zip<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): Stack<[T, A, B, C]>;
|
||
|
zip<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): Stack<[T, A, B, C, D]>;
|
||
|
zip<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): Stack<[T, A, B, C, D, E]>;
|
||
|
|
||
|
zipAll<A>(a: Iterable<A>, ..._: []): Stack<[T | void, A | void]>;
|
||
|
zipAll<A, B>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): Stack<[T | void, A | void, B | void]>;
|
||
|
zipAll<A, B, C>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): Stack<[T | void, A | void, B | void, C | void]>;
|
||
|
zipAll<A, B, C, D>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): Stack<[T | void, A | void, B | void, C | void, D | void]>;
|
||
|
zipAll<A, B, C, D, E>(
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): Stack<[T | void, A | void, B | void, C | void, D | void, E | void]>;
|
||
|
|
||
|
zipWith<A, R>(
|
||
|
zipper: (value: T, a: A) => R,
|
||
|
a: Iterable<A>,
|
||
|
..._: []
|
||
|
): Stack<R>;
|
||
|
zipWith<A, B, R>(
|
||
|
zipper: (value: T, a: A, b: B) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
..._: []
|
||
|
): Stack<R>;
|
||
|
zipWith<A, B, C, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
..._: []
|
||
|
): Stack<R>;
|
||
|
zipWith<A, B, C, D, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
..._: []
|
||
|
): Stack<R>;
|
||
|
zipWith<A, B, C, D, E, R>(
|
||
|
zipper: (value: T, a: A, b: B, c: C, d: D, e: E) => R,
|
||
|
a: Iterable<A>,
|
||
|
b: Iterable<B>,
|
||
|
c: Iterable<C>,
|
||
|
d: Iterable<D>,
|
||
|
e: Iterable<E>,
|
||
|
..._: []
|
||
|
): Stack<R>;
|
||
|
}
|
||
|
|
||
|
declare function Range(
|
||
|
start?: number,
|
||
|
end?: number,
|
||
|
step?: number
|
||
|
): IndexedSeq<number>;
|
||
|
declare function Repeat<T>(value: T, times?: number): IndexedSeq<T>;
|
||
|
|
||
|
// The type of a Record factory function.
|
||
|
type RecordFactory<Values: Object> = Class<RecordInstance<Values>>;
|
||
|
|
||
|
// The type of runtime Record instances.
|
||
|
type RecordOf<Values: Object> = RecordInstance<Values> & $ReadOnly<Values>;
|
||
|
|
||
|
// The values of a Record instance.
|
||
|
type _RecordValues<T, R: RecordInstance<T> | T> = R;
|
||
|
type RecordValues<R> = _RecordValues<*, R>;
|
||
|
|
||
|
declare function isRecord(
|
||
|
maybeRecord: any
|
||
|
): boolean %checks(maybeRecord instanceof RecordInstance);
|
||
|
declare class Record {
|
||
|
static <Values: Object>(spec: Values, name?: string): typeof RecordInstance;
|
||
|
constructor<Values: Object>(
|
||
|
spec: Values,
|
||
|
name?: string
|
||
|
): typeof RecordInstance;
|
||
|
|
||
|
static isRecord: typeof isRecord;
|
||
|
|
||
|
static getDescriptiveName(record: RecordInstance<any>): string;
|
||
|
}
|
||
|
|
||
|
declare class RecordInstance<T: Object = Object> {
|
||
|
static (values?: Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>): RecordOf<T>;
|
||
|
// Note: a constructor can only create an instance of RecordInstance<T>,
|
||
|
// it's encouraged to not use `new` when creating Records.
|
||
|
constructor(values?: Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>): void;
|
||
|
|
||
|
size: number;
|
||
|
|
||
|
has(key: string): boolean;
|
||
|
|
||
|
get<K: $Keys<T>>(key: K, ..._: []): $ElementType<T, K>;
|
||
|
get<K: $Keys<T>, NSV>(key: K, notSetValue: NSV): $ElementType<T, K> | NSV;
|
||
|
|
||
|
hasIn(keyPath: Iterable<mixed>): boolean;
|
||
|
|
||
|
getIn(keyPath: [], notSetValue?: mixed): this & $ReadOnly<T>;
|
||
|
getIn<K: $Keys<T>>(keyPath: [K], notSetValue?: mixed): $ElementType<T, K>;
|
||
|
getIn<NSV, K: $Keys<T>, K2: $KeyOf<$ValOf<T, K>>>(
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<T, K>, K2> | NSV;
|
||
|
getIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<T, K>, K2>, K3> | NSV;
|
||
|
getIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4> | NSV;
|
||
|
getIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5> | NSV;
|
||
|
|
||
|
equals(other: any): boolean;
|
||
|
hashCode(): number;
|
||
|
|
||
|
set<K: $Keys<T>>(key: K, value: $ElementType<T, K>): this & $ReadOnly<T>;
|
||
|
update<K: $Keys<T>>(
|
||
|
key: K,
|
||
|
updater: (value: $ElementType<T, K>) => $ElementType<T, K>
|
||
|
): this & $ReadOnly<T>;
|
||
|
merge(
|
||
|
...collections: Array<Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>>
|
||
|
): this & $ReadOnly<T>;
|
||
|
mergeDeep(
|
||
|
...collections: Array<Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>>
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
mergeWith(
|
||
|
merger: (oldVal: $ValOf<T>, newVal: $ValOf<T>, key: $Keys<T>) => $ValOf<T>,
|
||
|
...collections: Array<Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>>
|
||
|
): this & $ReadOnly<T>;
|
||
|
mergeDeepWith(
|
||
|
merger: (oldVal: any, newVal: any, key: any) => any,
|
||
|
...collections: Array<Iterable<[$Keys<T>, $ValOf<T>]> | $Shape<T>>
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
delete<K: $Keys<T>>(key: K): this & $ReadOnly<T>;
|
||
|
remove<K: $Keys<T>>(key: K): this & $ReadOnly<T>;
|
||
|
clear(): this & $ReadOnly<T>;
|
||
|
|
||
|
setIn<S>(keyPath: [], value: S): S;
|
||
|
setIn<K: $Keys<T>, S: $ValOf<T, K>>(
|
||
|
keyPath: [K],
|
||
|
value: S
|
||
|
): this & $ReadOnly<T>;
|
||
|
setIn<K: $Keys<T>, K2: $KeyOf<$ValOf<T, K>>, S: $ValOf<$ValOf<T, K>, K2>>(
|
||
|
keyPath: [K, K2],
|
||
|
value: S
|
||
|
): this & $ReadOnly<T>;
|
||
|
setIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<T, K>, K2>, K3>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
value: S
|
||
|
): this & $ReadOnly<T>;
|
||
|
setIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
value: S
|
||
|
): this & $ReadOnly<T>;
|
||
|
setIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
value: S
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
deleteIn(keyPath: []): void;
|
||
|
deleteIn<K: $Keys<T>>(keyPath: [K]): this & $ReadOnly<T>;
|
||
|
deleteIn<K: $Keys<T>, K2: $KeyOf<$ValOf<T, K>>>(
|
||
|
keyPath: [K, K2]
|
||
|
): this & $ReadOnly<T>;
|
||
|
deleteIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3]
|
||
|
): this & $ReadOnly<T>;
|
||
|
deleteIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4]
|
||
|
): this & $ReadOnly<T>;
|
||
|
deleteIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5]
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
removeIn(keyPath: []): void;
|
||
|
removeIn<K: $Keys<T>>(keyPath: [K]): this & $ReadOnly<T>;
|
||
|
removeIn<K: $Keys<T>, K2: $KeyOf<$ValOf<T, K>>>(
|
||
|
keyPath: [K, K2]
|
||
|
): this & $ReadOnly<T>;
|
||
|
removeIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3]
|
||
|
): this & $ReadOnly<T>;
|
||
|
removeIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4]
|
||
|
): this & $ReadOnly<T>;
|
||
|
removeIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5]
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
updateIn<U>(
|
||
|
keyPath: [],
|
||
|
notSetValue: mixed,
|
||
|
updater: (value: this & T) => U
|
||
|
): U;
|
||
|
updateIn<U>(keyPath: [], updater: (value: this & T) => U): U;
|
||
|
updateIn<NSV, K: $Keys<T>, S: $ValOf<T, K>>(
|
||
|
keyPath: [K],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<T, K>) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<K: $Keys<T>, S: $ValOf<T, K>>(
|
||
|
keyPath: [K],
|
||
|
updater: (value: $ValOf<T, K>) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
S: $ValOf<$ValOf<T, K>, K2>
|
||
|
>(
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<T, K>, K2> | NSV) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<K: $Keys<T>, K2: $KeyOf<$ValOf<T, K>>, S: $ValOf<$ValOf<T, K>, K2>>(
|
||
|
keyPath: [K, K2],
|
||
|
updater: (value: $ValOf<$ValOf<T, K>, K2>) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<T, K>, K2>, K3>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<T, K>, K2>, K3> | NSV) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<T, K>, K2>, K3>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<T, K>, K2>, K3>) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV,
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4> | NSV
|
||
|
) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
NSV,
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV,
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5> | NSV
|
||
|
) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
updateIn<
|
||
|
K: $Keys<T>,
|
||
|
K2: $KeyOf<$ValOf<T, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<T, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<T, K>, K2>, K3>, K4>, K5>
|
||
|
) => S
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
mergeIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: Array<any>
|
||
|
): this & $ReadOnly<T>;
|
||
|
mergeDeepIn(
|
||
|
keyPath: Iterable<mixed>,
|
||
|
...collections: Array<any>
|
||
|
): this & $ReadOnly<T>;
|
||
|
|
||
|
toSeq(): KeyedSeq<$Keys<T>, any>;
|
||
|
|
||
|
toJS(): { [key: $Keys<T>]: mixed };
|
||
|
toJSON(): T;
|
||
|
toObject(): T;
|
||
|
|
||
|
withMutations(mutator: (mutable: this & T) => mixed): this & $ReadOnly<T>;
|
||
|
asMutable(): this & $ReadOnly<T>;
|
||
|
wasAltered(): boolean;
|
||
|
asImmutable(): this & $ReadOnly<T>;
|
||
|
|
||
|
@@iterator(): Iterator<[$Keys<T>, $ValOf<T>]>;
|
||
|
}
|
||
|
|
||
|
declare function fromJS(
|
||
|
jsValue: mixed,
|
||
|
reviver?: (
|
||
|
key: string | number,
|
||
|
sequence: KeyedCollection<string, mixed> | IndexedCollection<mixed>,
|
||
|
path?: Array<string | number>
|
||
|
) => mixed
|
||
|
): Collection<mixed, mixed>;
|
||
|
|
||
|
declare function is(first: mixed, second: mixed): boolean;
|
||
|
declare function hash(value: mixed): number;
|
||
|
|
||
|
declare function get<C: Object, K: $Keys<C>>(
|
||
|
collection: C,
|
||
|
key: K,
|
||
|
notSetValue: mixed
|
||
|
): $ValOf<C, K>;
|
||
|
declare function get<C, K: $KeyOf<C>, NSV>(
|
||
|
collection: C,
|
||
|
key: K,
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<C, K> | NSV;
|
||
|
|
||
|
declare function has(collection: Object, key: mixed): boolean;
|
||
|
declare function remove<C>(collection: C, key: $KeyOf<C>): C;
|
||
|
declare function set<C, K: $KeyOf<C>, V: $ValOf<C, K>>(
|
||
|
collection: C,
|
||
|
key: K,
|
||
|
value: V
|
||
|
): C;
|
||
|
declare function update<C, K: $KeyOf<C>, V: $ValOf<C, K>, NSV>(
|
||
|
collection: C,
|
||
|
key: K,
|
||
|
notSetValue: NSV,
|
||
|
updater: ($ValOf<C, K> | NSV) => V
|
||
|
): C;
|
||
|
declare function update<C, K: $KeyOf<C>, V: $ValOf<C, K>>(
|
||
|
collection: C,
|
||
|
key: K,
|
||
|
updater: ($ValOf<C, K>) => V
|
||
|
): C;
|
||
|
|
||
|
declare function getIn<C>(collection: C, keyPath: [], notSetValue?: mixed): C;
|
||
|
declare function getIn<C, K: $KeyOf<C>, NSV>(
|
||
|
collection: C,
|
||
|
keyPath: [K],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<C, K> | NSV;
|
||
|
declare function getIn<C, K: $KeyOf<C>, K2: $KeyOf<$ValOf<C, K>>, NSV>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<C, K>, K2> | NSV;
|
||
|
declare function getIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<C, K>, K2>, K3> | NSV;
|
||
|
declare function getIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4> | NSV;
|
||
|
declare function getIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV
|
||
|
): $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5> | NSV;
|
||
|
|
||
|
declare function hasIn(collection: Object, keyPath: Iterable<mixed>): boolean;
|
||
|
|
||
|
declare function removeIn<C>(collection: C, keyPath: []): void;
|
||
|
declare function removeIn<C, K: $KeyOf<C>>(collection: C, keyPath: [K]): C;
|
||
|
declare function removeIn<C, K: $KeyOf<C>, K2: $KeyOf<$ValOf<C, K>>>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2]
|
||
|
): C;
|
||
|
declare function removeIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3]
|
||
|
): C;
|
||
|
declare function removeIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4]
|
||
|
): C;
|
||
|
declare function removeIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4, K5]
|
||
|
): C;
|
||
|
|
||
|
declare function setIn<S>(collection: Object, keyPath: [], value: S): S;
|
||
|
declare function setIn<C, K: $KeyOf<C>, S: $ValOf<C, K>>(
|
||
|
collection: C,
|
||
|
keyPath: [K],
|
||
|
value: S
|
||
|
): C;
|
||
|
declare function setIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
S: $ValOf<$ValOf<C, K>, K2>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2],
|
||
|
value: S
|
||
|
): C;
|
||
|
declare function setIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<C, K>, K2>, K3>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3],
|
||
|
value: S
|
||
|
): C;
|
||
|
declare function setIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
value: S
|
||
|
): C;
|
||
|
declare function setIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
value: S
|
||
|
): C;
|
||
|
|
||
|
declare function updateIn<C, S>(
|
||
|
collection: C,
|
||
|
keyPath: [],
|
||
|
notSetValue: mixed,
|
||
|
updater: (value: C) => S
|
||
|
): S;
|
||
|
declare function updateIn<C, S>(
|
||
|
collection: C,
|
||
|
keyPath: [],
|
||
|
updater: (value: C) => S
|
||
|
): S;
|
||
|
declare function updateIn<C, K: $KeyOf<C>, S: $ValOf<C, K>, NSV>(
|
||
|
collection: C,
|
||
|
keyPath: [K],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<C, K> | NSV) => S
|
||
|
): C;
|
||
|
declare function updateIn<C, K: $KeyOf<C>, S: $ValOf<C, K>>(
|
||
|
collection: C,
|
||
|
keyPath: [K],
|
||
|
updater: (value: $ValOf<C, K>) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
S: $ValOf<$ValOf<C, K>, K2>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<C, K>, K2> | NSV) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
S: $ValOf<$ValOf<C, K>, K2>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2],
|
||
|
updater: (value: $ValOf<$ValOf<C, K>, K2>) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<C, K>, K2>, K3>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<C, K>, K2>, K3> | NSV) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<C, K>, K2>, K3>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<C, K>, K2>, K3>) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
notSetValue: NSV,
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4> | NSV) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4],
|
||
|
updater: (value: $ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5>,
|
||
|
NSV
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
notSetValue: NSV,
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5> | NSV
|
||
|
) => S
|
||
|
): C;
|
||
|
declare function updateIn<
|
||
|
C,
|
||
|
K: $KeyOf<C>,
|
||
|
K2: $KeyOf<$ValOf<C, K>>,
|
||
|
K3: $KeyOf<$ValOf<$ValOf<C, K>, K2>>,
|
||
|
K4: $KeyOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>>,
|
||
|
K5: $KeyOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>>,
|
||
|
S: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5>
|
||
|
>(
|
||
|
collection: C,
|
||
|
keyPath: [K, K2, K3, K4, K5],
|
||
|
updater: (
|
||
|
value: $ValOf<$ValOf<$ValOf<$ValOf<$ValOf<C, K>, K2>, K3>, K4>, K5>
|
||
|
) => S
|
||
|
): C;
|
||
|
|
||
|
declare function merge<C>(
|
||
|
collection: C,
|
||
|
...collections: Array<
|
||
|
| $IterableOf<C>
|
||
|
| $Shape<RecordValues<C>>
|
||
|
| PlainObjInput<$KeyOf<C>, $ValOf<C>>
|
||
|
>
|
||
|
): C;
|
||
|
declare function mergeWith<C>(
|
||
|
merger: (oldVal: $ValOf<C>, newVal: $ValOf<C>, key: $KeyOf<C>) => $ValOf<C>,
|
||
|
collection: C,
|
||
|
...collections: Array<
|
||
|
| $IterableOf<C>
|
||
|
| $Shape<RecordValues<C>>
|
||
|
| PlainObjInput<$KeyOf<C>, $ValOf<C>>
|
||
|
>
|
||
|
): C;
|
||
|
declare function mergeDeep<C>(
|
||
|
collection: C,
|
||
|
...collections: Array<
|
||
|
| $IterableOf<C>
|
||
|
| $Shape<RecordValues<C>>
|
||
|
| PlainObjInput<$KeyOf<C>, $ValOf<C>>
|
||
|
>
|
||
|
): C;
|
||
|
declare function mergeDeepWith<C>(
|
||
|
merger: (oldVal: any, newVal: any, key: any) => mixed,
|
||
|
collection: C,
|
||
|
...collections: Array<
|
||
|
| $IterableOf<C>
|
||
|
| $Shape<RecordValues<C>>
|
||
|
| PlainObjInput<$KeyOf<C>, $ValOf<C>>
|
||
|
>
|
||
|
): C;
|
||
|
|
||
|
export {
|
||
|
Collection,
|
||
|
Seq,
|
||
|
List,
|
||
|
Map,
|
||
|
OrderedMap,
|
||
|
OrderedSet,
|
||
|
Range,
|
||
|
Repeat,
|
||
|
Record,
|
||
|
Set,
|
||
|
Stack,
|
||
|
fromJS,
|
||
|
is,
|
||
|
hash,
|
||
|
isImmutable,
|
||
|
isCollection,
|
||
|
isKeyed,
|
||
|
isIndexed,
|
||
|
isAssociative,
|
||
|
isOrdered,
|
||
|
isRecord,
|
||
|
isValueObject,
|
||
|
get,
|
||
|
has,
|
||
|
remove,
|
||
|
set,
|
||
|
update,
|
||
|
getIn,
|
||
|
hasIn,
|
||
|
removeIn,
|
||
|
setIn,
|
||
|
updateIn,
|
||
|
merge,
|
||
|
mergeWith,
|
||
|
mergeDeep,
|
||
|
mergeDeepWith,
|
||
|
};
|
||
|
|
||
|
export default {
|
||
|
Collection,
|
||
|
Seq,
|
||
|
|
||
|
List,
|
||
|
Map,
|
||
|
OrderedMap,
|
||
|
OrderedSet,
|
||
|
PairSorting,
|
||
|
Range,
|
||
|
Repeat,
|
||
|
Record,
|
||
|
Set,
|
||
|
Stack,
|
||
|
|
||
|
fromJS,
|
||
|
is,
|
||
|
hash,
|
||
|
|
||
|
isImmutable,
|
||
|
isCollection,
|
||
|
isKeyed,
|
||
|
isIndexed,
|
||
|
isAssociative,
|
||
|
isOrdered,
|
||
|
isRecord,
|
||
|
isValueObject,
|
||
|
|
||
|
get,
|
||
|
has,
|
||
|
remove,
|
||
|
set,
|
||
|
update,
|
||
|
getIn,
|
||
|
hasIn,
|
||
|
removeIn,
|
||
|
setIn,
|
||
|
updateIn,
|
||
|
merge,
|
||
|
mergeWith,
|
||
|
mergeDeep,
|
||
|
mergeDeepWith,
|
||
|
};
|
||
|
|
||
|
export type {
|
||
|
Comparator,
|
||
|
KeyedCollection,
|
||
|
IndexedCollection,
|
||
|
SetCollection,
|
||
|
KeyedSeq,
|
||
|
IndexedSeq,
|
||
|
SetSeq,
|
||
|
RecordFactory,
|
||
|
RecordOf,
|
||
|
RecordInstance,
|
||
|
ValueObject,
|
||
|
$KeyOf,
|
||
|
$ValOf,
|
||
|
};
|