diff --git a/.eslintrc b/.eslintrc index d06b090c..f6d976ba 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,6 +12,7 @@ } ], "unicorn/no-reduce": [0], + "sonarjs/cognitive-complexity": ["error", 30], "react/jsx-props-no-spreading": [0], "import/no-extraneous-dependencies": [2, { "devDependencies": true }], "react/static-property-placement": [0], diff --git a/flow-typed/npm/lodash_v4.x.x.js b/flow-typed/npm/lodash_v4.x.x.js new file mode 100644 index 00000000..9370fc48 --- /dev/null +++ b/flow-typed/npm/lodash_v4.x.x.js @@ -0,0 +1,6113 @@ +// flow-typed signature: 1ef367da1bb1b9d6ec1962296ee3afc0 +// flow-typed version: 2f1ddf67d5/lodash_v4.x.x/flow_>=v0.104.x + +declare module "lodash" { + declare type Path = $ReadOnlyArray | string | number; + declare type __CurriedFunction1 = (...r: [AA]) => R; + declare type CurriedFunction1 = __CurriedFunction1; + + declare type __CurriedFunction2 = (( + ...r: [AA] + ) => CurriedFunction1) & + ((...r: [AA, BB]) => R); + declare type CurriedFunction2 = __CurriedFunction2; + + declare type __CurriedFunction3 = (( + ...r: [AA] + ) => CurriedFunction2) & + ((...r: [AA, BB]) => CurriedFunction1) & + ((...r: [AA, BB, CC]) => R); + declare type CurriedFunction3 = __CurriedFunction3< + A, + B, + C, + R, + *, + *, + * + >; + + declare type __CurriedFunction4< + A, + B, + C, + D, + R, + AA: A, + BB: B, + CC: C, + DD: D + > = ((...r: [AA]) => CurriedFunction3) & + ((...r: [AA, BB]) => CurriedFunction2) & + ((...r: [AA, BB, CC]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD]) => R); + declare type CurriedFunction4 = __CurriedFunction4< + A, + B, + C, + D, + R, + *, + *, + *, + * + >; + + declare type __CurriedFunction5< + A, + B, + C, + D, + E, + R, + AA: A, + BB: B, + CC: C, + DD: D, + EE: E + > = ((...r: [AA]) => CurriedFunction4) & + ((...r: [AA, BB]) => CurriedFunction3) & + ((...r: [AA, BB, CC]) => CurriedFunction2) & + ((...r: [AA, BB, CC, DD]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD, EE]) => R); + declare type CurriedFunction5 = __CurriedFunction5< + A, + B, + C, + D, + E, + R, + *, + *, + *, + *, + * + >; + + declare type __CurriedFunction6< + A, + B, + C, + D, + E, + F, + R, + AA: A, + BB: B, + CC: C, + DD: D, + EE: E, + FF: F + > = ((...r: [AA]) => CurriedFunction5) & + ((...r: [AA, BB]) => CurriedFunction4) & + ((...r: [AA, BB, CC]) => CurriedFunction3) & + ((...r: [AA, BB, CC, DD]) => CurriedFunction2) & + ((...r: [AA, BB, CC, DD, EE]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD, EE, FF]) => R); + declare type CurriedFunction6 = __CurriedFunction6< + A, + B, + C, + D, + E, + F, + R, + *, + *, + *, + *, + *, + * + >; + + declare type Curry = (((...r: [A]) => R) => CurriedFunction1) & + (((...r: [A, B]) => R) => CurriedFunction2) & + (((...r: [A, B, C]) => R) => CurriedFunction3) & + (( + (...r: [A, B, C, D]) => R + ) => CurriedFunction4) & + (( + (...r: [A, B, C, D, E]) => R + ) => CurriedFunction5) & + (( + (...r: [A, B, C, D, E, F]) => R + ) => CurriedFunction6); + + declare type UnaryFn = (a: A) => R; + + declare type TemplateSettings = { + escape?: RegExp, + evaluate?: RegExp, + imports?: Object, + interpolate?: RegExp, + variable?: string, + ... + }; + + declare type TruncateOptions = { + length?: number, + omission?: string, + separator?: RegExp | string, + ... + }; + + declare type Cancelable = { + cancel: () => void, + flush: () => mixed, + ... + }; + + declare type DebounceOptions = { + leading?: boolean, + maxWait?: number, + trailing?: boolean, + ... + }; + + declare type ThrottleOptions = { + leading?: boolean, + trailing?: boolean, + ... + }; + + // using opaque type for object key is not supported by Flow atm: https://github.com/facebook/flow/issues/5407 + declare type Key = string | number; + declare type IndexerObject = { [key: K]: V, ... }; + declare type ReadOnlyIndexerObject = $ReadOnly>; + declare type NestedArray = Array>; + declare type Collection = $ReadOnlyArray | ReadOnlyIndexerObject; + + declare type matchesIterateeShorthand = { [Key]: any, ... }; + declare type matchesPropertyIterateeShorthand = [string, any]; + declare type propertyIterateeShorthand = string; + + declare type OPredicate = + | ((value: A, key: string, object: O) => any) + | matchesIterateeShorthand + | matchesPropertyIterateeShorthand + | propertyIterateeShorthand; + + declare type IterateeWithResult = + | ((value: V, key: K, object: O) => R) + | string; + + declare type OIterateeWithResult = + | ReadOnlyIndexerObject + | IterateeWithResult; + declare type OIteratee = OIterateeWithResult; + + declare type AFlatMapIteratee = + | ((item: V, index: number, array: O) => $ReadOnlyArray | R) + | string + declare type OFlatMapIteratee = IterateeWithResult | R>; + + declare type Predicate = + | ((value: T, index: number, array: Array) => any) + | matchesIterateeShorthand + | matchesPropertyIterateeShorthand + | propertyIterateeShorthand; + + declare type _ValueOnlyIteratee = (value: T) => mixed; + declare type ValueOnlyIteratee = _ValueOnlyIteratee | string; + declare type _Iteratee = ( + item: T, + index: number, + array: ?Array + ) => mixed; + declare type Iteratee = _Iteratee | Object | string; + declare type Comparator = (item: T, item2: T) => boolean; + + declare type ReadOnlyMapIterator = + | ((item: T, index: number, array: $ReadOnlyArray) => U) + | propertyIterateeShorthand; + + declare type OMapIterator = + | ((item: T, key: string, object: O) => U) + | propertyIterateeShorthand; + + declare class Lodash { + // Array + chunk(array?: ?$ReadOnlyArray, size?: ?number): Array>; + compact(array?: ?$ReadOnlyArray): Array; + concat( + base?: ?$ReadOnlyArray, + ...elements: $ReadOnlyArray + ): Array; + difference( + array?: ?$ReadOnlyArray, + ...values: $ReadOnlyArray> + ): Array; + differenceBy( + array?: ?$ReadOnlyArray, + values?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + differenceWith( + array?: ?$ReadOnlyArray, + values?: ?$ReadOnlyArray, + comparator?: ?(item: T, item2: U) => boolean + ): Array; + drop(array?: ?$ReadOnlyArray, n?: ?number): Array; + dropRight(array?: ?$ReadOnlyArray, n?: ?number): Array; + dropRightWhile(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + dropWhile(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + fill( + array?: ?Array, + value?: ?U, + start?: ?number, + end?: ?number + ): Array; + findIndex( + array: $ReadOnlyArray, + predicate?: ?Predicate, + fromIndex?: ?number + ): number; + findIndex( + array: void | null, + predicate?: ?Predicate, + fromIndex?: ?number + ): -1; + findLastIndex( + array: $ReadOnlyArray, + predicate?: ?Predicate, + fromIndex?: ?number + ): number; + findLastIndex( + array: void | null, + predicate?: ?Predicate, + fromIndex?: ?number + ): -1; + // alias of _.head + first(array: ?$ReadOnlyArray): T; + flatten(array?: ?$ReadOnlyArray<$ReadOnlyArray | X>): Array; + flattenDeep(array?: ?$ReadOnlyArray): Array; + flattenDepth(array?: ?$ReadOnlyArray, depth?: ?number): Array; + fromPairs(pairs?: ?$ReadOnlyArray<[A, B]>): {| [key: A]: B |}; + head(array: ?$ReadOnlyArray): T; + indexOf(array: $ReadOnlyArray, value: T, fromIndex?: number): number; + indexOf(array: void | null, value?: ?T, fromIndex?: ?number): -1; + initial(array: ?$ReadOnlyArray): Array; + intersection(...arrays?: Array<$ReadOnlyArray>): Array; + //Workaround until (...parameter: T, parameter2: U) works + intersectionBy( + a1?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + intersectionBy( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + intersectionBy( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + a3?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + intersectionBy( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + a3?: ?$ReadOnlyArray, + a4?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + //Workaround until (...parameter: T, parameter2: U) works + intersectionWith( + a1?: ?$ReadOnlyArray, + comparator?: ?Comparator + ): Array; + intersectionWith( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + comparator?: ?Comparator + ): Array; + intersectionWith( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + a3?: ?$ReadOnlyArray, + comparator?: ?Comparator + ): Array; + intersectionWith( + a1?: ?$ReadOnlyArray, + a2?: ?$ReadOnlyArray, + a3?: ?$ReadOnlyArray, + a4?: ?$ReadOnlyArray, + comparator?: ?Comparator + ): Array; + join(array: $ReadOnlyArray, separator?: ?string): string; + join(array: void | null, separator?: ?string): ""; + last(array: ?$ReadOnlyArray): T; + lastIndexOf(array: $ReadOnlyArray, value?: ?T, fromIndex?: ?number): number; + lastIndexOf(array: void | null, value?: ?T, fromIndex?: ?number): -1; + nth(array: $ReadOnlyArray, n?: ?number): T; + nth(array: void | null, n?: ?number): void; + pull(array: Array, ...values?: $ReadOnlyArray): Array; + pull(array: T, ...values?: $ReadOnlyArray): T; + pullAll(array: Array, values?: ?$ReadOnlyArray): Array; + pullAll(array: T, values?: ?$ReadOnlyArray): T; + pullAllBy( + array: Array, + values?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + pullAllBy( + array: T, + values?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): T; + pullAllWith( + array: T, + values?: ?$ReadOnlyArray, + comparator?: ?Function + ): T; + pullAllWith(array: Array, values?: ?($ReadOnlyArray), comparator?: ?Function): Array; + pullAt(array?: ?Array, ...indexed?: $ReadOnlyArray): Array; + pullAt(array?: ?Array, indexed?: ?$ReadOnlyArray): Array; + remove(array?: ?Array, predicate?: ?Predicate): Array; + reverse(array: Array): Array; + reverse(array: T): T; + slice( + array?: ?$ReadOnlyArray, + start?: ?number, + end?: ?number + ): Array; + sortedIndex(array: $ReadOnlyArray, value: T): number; + sortedIndex(array: void | null, value: ?T): 0; + sortedIndexBy( + array: $ReadOnlyArray, + value?: ?T, + iteratee?: ?ValueOnlyIteratee + ): number; + sortedIndexBy( + array: void | null, + value?: ?T, + iteratee?: ?ValueOnlyIteratee + ): 0; + sortedIndexOf(array: $ReadOnlyArray, value: T): number; + sortedIndexOf(array: void | null, value?: ?T): -1; + sortedLastIndex(array: $ReadOnlyArray, value: T): number; + sortedLastIndex(array: void | null, value?: ?T): 0; + sortedLastIndexBy( + array: $ReadOnlyArray, + value: T, + iteratee?: ValueOnlyIteratee + ): number; + sortedLastIndexBy( + array: void | null, + value?: ?T, + iteratee?: ?ValueOnlyIteratee + ): 0; + sortedLastIndexOf(array: $ReadOnlyArray, value: T): number; + sortedLastIndexOf(array: void | null, value?: ?T): -1; + sortedUniq(array?: ?$ReadOnlyArray): Array; + sortedUniqBy( + array?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + tail(array?: ?$ReadOnlyArray): Array; + take(array?: ?$ReadOnlyArray, n?: ?number): Array; + takeRight(array?: ?$ReadOnlyArray, n?: ?number): Array; + takeRightWhile(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + takeWhile(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + union(...arrays?: Array<$ReadOnlyArray>): Array; + //Workaround until (...parameter: T, parameter2: U) works + unionBy( + a1?: ?$ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): Array; + unionBy( + a1?: ?$ReadOnlyArray, + a2: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + unionBy( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + unionBy( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + //Workaround until (...parameter: T, parameter2: U) works + unionWith(a1?: ?$ReadOnlyArray, comparator?: ?Comparator): Array; + unionWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + comparator?: Comparator + ): Array; + unionWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + comparator?: Comparator + ): Array; + unionWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + comparator?: Comparator + ): Array; + uniq(array?: ?$ReadOnlyArray): Array; + uniqBy(array?: ?$ReadOnlyArray, iteratee?: ?ValueOnlyIteratee): Array; + uniqWith(array?: ?$ReadOnlyArray, comparator?: ?Comparator): Array; + unzip(array?: ?$ReadOnlyArray): Array; + unzipWith(array: ?$ReadOnlyArray, iteratee?: ?Iteratee): Array; + without(array?: ?$ReadOnlyArray, ...values?: Array): Array; + xor(...array: $ReadOnlyArray<$ReadOnlyArray>): Array; + //Workaround until (...parameter: T, parameter2: U) works + xorBy(a1?: ?$ReadOnlyArray, iteratee?: ?ValueOnlyIteratee): Array; + xorBy( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + xorBy( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + xorBy( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + iteratee?: ValueOnlyIteratee + ): Array; + //Workaround until (...parameter: T, parameter2: U) works + xorWith(a1?: ?$ReadOnlyArray, comparator?: ?Comparator): Array; + xorWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + comparator?: Comparator + ): Array; + xorWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + comparator?: Comparator + ): Array; + xorWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + comparator?: Comparator + ): Array; + zip(a1?: ?($ReadOnlyArray), a2?: ?($ReadOnlyArray)): Array<[A, B]>; + zip(a1: $ReadOnlyArray, a2: $ReadOnlyArray, a3: $ReadOnlyArray): Array<[A, B, C]>; + zip(a1: $ReadOnlyArray, a2: $ReadOnlyArray, a3: $ReadOnlyArray, a4: $ReadOnlyArray): Array<[A, B, C, D]>; + zip( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + a5: $ReadOnlyArray + ): Array<[A, B, C, D, E]>; + + zipObject(props: $ReadOnlyArray, values?: ?$ReadOnlyArray): { [key: K]: V, ... }; + zipObject(props: void | null, values?: ?$ReadOnlyArray): {...}; + zipObjectDeep(props: $ReadOnlyArray, values?: ?any): Object; + zipObjectDeep(props: void | null, values?: ?any): {...}; + + zipWith(a1?: ?$ReadOnlyArray): Array<[A]>; + zipWith(a1: $ReadOnlyArray, iteratee: (A) => T): Array; + + zipWith(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array<[A, B]>; + zipWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + iteratee: (A, B) => T + ): Array; + + zipWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray + ): Array<[A, B, C]>; + zipWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + iteratee: (A, B, C) => T + ): Array; + + zipWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray + ): Array<[A, B, C, D]>; + zipWith( + a1: $ReadOnlyArray, + a2: $ReadOnlyArray, + a3: $ReadOnlyArray, + a4: $ReadOnlyArray, + iteratee: (A, B, C, D) => T + ): Array; + + // Collection + countBy(array: $ReadOnlyArray, iteratee?: ?ValueOnlyIteratee): { [string]: number, ... }; + countBy(array: void | null, iteratee?: ?ValueOnlyIteratee): {...}; + countBy(string: string, iteratee?: ?ValueOnlyIteratee): { [string]: number, ... }; + countBy(object: ReadOnlyIndexerObject, iteratee?: ?ValueOnlyIteratee): { [string]: number, ... }; + // alias of _.forEach + each | $ReadOnlyArray | string | void | null>(collection: T, iteratee?: ?IterateeWithResult): T; + // alias of _.forEachRight + eachRight | $ReadOnlyArray | string | void | null>(collection: T, iteratee?: ?IterateeWithResult): T; + every(array?: ?$ReadOnlyArray, iteratee?: ?Iteratee): boolean; + every(str: string, iteratee?: ?Iteratee): boolean; + every>(object: T, iteratee?: OIterateeWithResult): boolean; + filter(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + filter>( + object: T, + predicate?: OPredicate + ): Array; + find( + array: $ReadOnlyArray, + predicate?: ?Predicate, + fromIndex?: ?number + ): T | void; + find( + array: void | null, + predicate?: ?Predicate, + fromIndex?: ?number + ): void; + find>( + object: T, + predicate?: ?OPredicate, + fromIndex?: ?number + ): R; + findLast( + array: $ReadOnlyArray, + predicate?: ?Predicate, + fromIndex?: ?number + ): T | void; + findLast( + array: void | null, + predicate?: ?Predicate, + fromIndex?: ?number + ): void; + findLast>( + object: T, + predicate?: ?OPredicate, + fromIndex?: ?number + ): R; + flatMap = Array>( + array: T, + iteratee?: ?AFlatMapIteratee + ): Array; + flatMap | string = IndexerObject>( + object: T, + iteratee?: ?OFlatMapIteratee + ): Array; + flatMapDeep = Array>( + array: T, + iteratee?: ?AFlatMapIteratee + ): Array; + flatMapDeep | string = IndexerObject>( + object: T, + iteratee?: ?OFlatMapIteratee + ): Array; + flatMapDepth = Array>( + array: T, + iteratee?: ?AFlatMapIteratee, + depth?: ?number + ): Array; + flatMapDepth | string = IndexerObject>( + object: T, + iteratee?: ?OFlatMapIteratee, + depth?: ?number + ): Array; + forEach | $ReadOnlyArray | string | void | null>(collection: T, iteratee?: ?IterateeWithResult): T; + forEachRight | $ReadOnlyArray | string | void | null>(collection: T, iteratee?: ?IterateeWithResult): T; + groupBy( + array: $ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): { [key: V]: Array, ... }; + groupBy(array: void | null, iteratee?: ?ValueOnlyIteratee): {...}; + groupBy>( + object: T, + iteratee?: ValueOnlyIteratee + ): { [key: V]: Array, ... }; + includes( + array: $ReadOnlyArray, + value: T, + fromIndex?: ?number + ): boolean; + includes(array: void | null, value?: ?T, fromIndex?: ?number): false; + includes(object: ReadOnlyIndexerObject, value: A, fromIndex?: number): boolean; + includes(str: string, value: string, fromIndex?: number): boolean; + invokeMap( + array?: ?$ReadOnlyArray, + path?: ?((value: T) => Path) | Path, + ...args?: $ReadOnlyArray + ): Array; + invokeMap( + object: ReadOnlyIndexerObject, + path: ((value: any) => Path) | Path, + ...args?: $ReadOnlyArray + ): Array; + keyBy( + array: $ReadOnlyArray, + iteratee?: ?ValueOnlyIteratee + ): { [key: V]: T, ... }; + keyBy(array: void | null, iteratee?: ?ValueOnlyIteratee<*>): {...}; + keyBy>( + object: T, + iteratee?: ?ValueOnlyIteratee + ): { [key: V]: A, ... }; + map( + array?: ?$ReadOnlyArray, + iteratee?: ?ReadOnlyMapIterator + ): Array; + map, U>( + object: ?T, + iteratee?: OMapIterator + ): Array; + map( + str: ?string, + iteratee?: (char: string, index: number, str: string) => any + ): string; + orderBy( + array: $ReadOnlyArray, + iteratees?: ?$ReadOnlyArray> | ?string, + orders?: ?$ReadOnlyArray<"asc" | "desc"> | ?string + ): Array; + orderBy( + array: null | void, + iteratees?: ?$ReadOnlyArray> | ?string, + orders?: ?$ReadOnlyArray<"asc" | "desc"> | ?string + ): Array; + orderBy>( + object: T, + iteratees?: $ReadOnlyArray> | string, + orders?: $ReadOnlyArray<"asc" | "desc"> | string + ): Array; + partition( + array?: ?$ReadOnlyArray, + predicate?: ?Predicate + ): [Array, Array]; + partition>( + object: T, + predicate?: OPredicate + ): [Array, Array]; + reduce( + array: $ReadOnlyArray, + iteratee?: ( + accumulator: U, + value: T, + index: number, + array: ?Array + ) => U, + accumulator?: U + ): U; + reduce( + array: void | null, + iteratee?: ?( + accumulator: U, + value: T, + index: any, + array: ?Array + ) => U, + accumulator?: U + ): U; + reduce, U>( + object: T, + iteratee?: (accumulator: U, value: any, key: string, object: T) => U, + accumulator?: U + ): U; + reduceRight( + array: void | null, + iteratee?: ?( + accumulator: U, + value: T, + index: any, + array: ?Array + ) => U, + accumulator?: U + ): U; + reduceRight( + array: $ReadOnlyArray, + iteratee?: ?( + accumulator: U, + value: T, + index: number, + array: ?Array + ) => U, + accumulator?: ?U + ): U; + reduceRight, U>( + object: T, + iteratee?: ?(accumulator: U, value: any, key: string, object: T) => U, + accumulator?: ?U + ): U; + reject(array?: ?$ReadOnlyArray, predicate?: ?Predicate): Array; + reject>( + object?: ?T, + predicate?: ?OPredicate + ): Array; + sample(collection: ?Collection): T; + sampleSize(collection?: ?Collection, n?: ?number): Array; + shuffle(array?: ?Collection): Array; + size(collection?: ?Collection | string): number; + some(array: void | null, predicate?: ?Predicate): false; + some(array: ?$ReadOnlyArray, predicate?: Predicate): boolean; + some>( + object?: ?T, + predicate?: OPredicate + ): boolean; + sortBy( + array: ?$ReadOnlyArray, + ...iteratees?: $ReadOnlyArray> + ): Array; + sortBy( + array: ?$ReadOnlyArray, + iteratees?: $ReadOnlyArray> + ): Array; + sortBy>( + object: T, + ...iteratees?: $ReadOnlyArray> + ): Array; + sortBy>( + object: T, + iteratees?: $ReadOnlyArray> + ): Array; + + // Date + now(): number; + + // Function + after(n: number, fn: Function): Function; + ary(func: Function, n?: number): Function; + before(n: number, fn: Function): Function; + bind) => any>(func: F, thisArg: any, ...partials: $ReadOnlyArray): F; + bindKey(obj?: ?Object, key?: ?string, ...partials?: $ReadOnlyArray): Function; + curry: Curry; + curry(func: Function, arity?: number): Function; + curryRight(func: Function, arity?: number): Function; + debounce) => any>( + func: F, + wait?: number, + options?: DebounceOptions + ): F & Cancelable; + defer(func: (...$ReadOnlyArray) => any, ...args?: $ReadOnlyArray): TimeoutID; + delay(func: Function, wait: number, ...args?: $ReadOnlyArray): TimeoutID; + flip(func: (...$ReadOnlyArray) => R): (...Array) => R; + memoize(func: (...A) => R, resolver?: (...A) => any): (...A) => R; + negate(predicate: (...A) => R): (...A) => boolean; + once) => any>(func: F): F; + overArgs(func?: ?Function, ...transforms?: $ReadOnlyArray): Function; + overArgs(func?: ?Function, transforms?: ?$ReadOnlyArray): Function; + partial(func: (...$ReadOnlyArray) => R, ...partials: $ReadOnlyArray): (...Array) => R; + partialRight(func: (...$ReadOnlyArray) => R, ...partials: $ReadOnlyArray): (...Array) => R; + partialRight(func: (...$ReadOnlyArray) => R, partials: $ReadOnlyArray): (...Array) => R; + rearg(func: Function, ...indexes: $ReadOnlyArray): Function; + rearg(func: Function, indexes: $ReadOnlyArray): Function; + rest(func: Function, start?: number): Function; + spread(func: Function): Function; + throttle) => any>( + func: F, + wait?: number, + options?: ThrottleOptions + ): F & Cancelable; + unary) => any>(func: F): F; + wrap(value?: any, wrapper?: ?Function): Function; + + // Lang + castArray(value: *): Array; + clone(value: T): T; + cloneDeep(value: T): T; + cloneDeepWith( + value: T, + customizer?: ?(value: T, key: number | string, object: T, stack: any) => U + ): U; + cloneWith( + value: T, + customizer?: ?(value: T, key: number | string, object: T, stack: any) => U + ): U; + conformsTo>( + source: T, + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }> + ): boolean; + eq(value: any, other: any): boolean; + gt(value: any, other: any): boolean; + gte(value: any, other: any): boolean; + isArguments(value: void | null): false; + isArguments(value: any): boolean; + isArray(value: $ReadOnlyArray): true; + isArray(value: any): false; + isArrayBuffer(value: ArrayBuffer): true; + isArrayBuffer(value: any): false; + isArrayLike(value: $ReadOnlyArray | string | { length: number, ... }): true; + isArrayLike(value: any): false; + isArrayLikeObject(value: { length: number, ... } | $ReadOnlyArray): true; + isArrayLikeObject(value: any): false; + isBoolean(value: boolean): true; + isBoolean(value: any): false; + isBuffer(value: void | null): false; + isBuffer(value: any): boolean; + isDate(value: Date): true; + isDate(value: any): false; + isElement(value: Element): true; + isElement(value: any): false; + isEmpty(value: void | null | "" | {...} | [] | number | boolean): true; + isEmpty(value: any): boolean; + isEqual(value: any, other: any): boolean; + isEqualWith( + value?: ?T, + other?: ?U, + customizer?: ?( + objValue: any, + otherValue: any, + key: number | string, + object: T, + other: U, + stack: any + ) => boolean | void + ): boolean; + isError(value: Error): true; + isError(value: any): false; + isFinite(value: number): boolean; + isFinite(value: any): false; + isFunction(value: Function): true; + isFunction(value: any): false; + isInteger(value: number): boolean; + isInteger(value: any): false; + isLength(value: void | null): false; + isLength(value: any): boolean; + isMap(value: Map): true; + isMap(value: any): false; + isMatch(object?: ?Object, source?: ?Object): boolean; + isMatchWith( + object?: ?T, + source?: ?U, + customizer?: ?( + objValue: any, + srcValue: any, + key: number | string, + object: T, + source: U + ) => boolean | void + ): boolean; + isNaN(value: number): boolean; + isNaN(value: any): false; + isNative(value: number | string | void | null | Object): false; + isNative(value: any): boolean; + isNil(value: void | null): true; + isNil(value: any): false; + isNull(value: null): true; + isNull(value: any): false; + isNumber(value: number): true; + isNumber(value: any): false; + isObject(value: any): boolean; + isObjectLike(value: void | null): false; + isObjectLike(value: any): boolean; + isPlainObject(value: any): boolean; + isRegExp(value: RegExp): true; + isRegExp(value: any): false; + isSafeInteger(value: number): boolean; + isSafeInteger(value: any): false; + isSet(value: Set): true; + isSet(value: any): false; + isString(value: string): true; + isString(value: any): false; + isSymbol(value: Symbol): true; + isSymbol(value: any): false; + isTypedArray(value: $TypedArray): true; + isTypedArray(value: any): false; + isUndefined(value: void): true; + isUndefined(value: any): false; + isWeakMap(value: WeakMap): true; + isWeakMap(value: any): false; + isWeakSet(value: WeakSet): true; + isWeakSet(value: any): false; + lt(value: any, other: any): boolean; + lte(value: any, other: any): boolean; + toArray(value: any): Array; + toFinite(value: void | null): 0; + toFinite(value: any): number; + toInteger(value: void | null): 0; + toInteger(value: any): number; + toLength(value: void | null): 0; + toLength(value: any): number; + toNumber(value: void | null): 0; + toNumber(value: any): number; + toPlainObject(value: any): Object; + toSafeInteger(value: void | null): 0; + toSafeInteger(value: any): number; + toString(value: void | null): ""; + toString(value: any): string; + + // Math + add(augend: number, addend: number): number; + ceil(number: number, precision?: number): number; + divide(dividend: number, divisor: number): number; + floor(number: number, precision?: number): number; + max(array: ?$ReadOnlyArray): T; + maxBy(array: ?$ReadOnlyArray, iteratee?: Iteratee): T; + mean(array: $ReadOnlyArray<*>): number; + meanBy(array: $ReadOnlyArray, iteratee?: Iteratee): number; + min(array: ?$ReadOnlyArray): T; + minBy(array: ?$ReadOnlyArray, iteratee?: Iteratee): T; + multiply(multiplier: number, multiplicand: number): number; + round(number: number, precision?: number): number; + subtract(minuend: number, subtrahend: number): number; + sum(array: $ReadOnlyArray<*>): number; + sumBy(array: $ReadOnlyArray, iteratee?: Iteratee): number; + + // number + clamp(number?: number, lower?: ?number, upper?: ?number): number; + clamp(number: ?number, lower?: ?number, upper?: ?number): 0; + inRange(number: number, start?: number, end: number): boolean; + random(lower?: number, upper?: number, floating?: boolean): number; + + // Object + assign(object?: ?Object, ...sources?: $ReadOnlyArray): Object; + assignIn(): {...}; + assignIn(a: A, b: B): A & B; + assignIn(a: A, b: B, c: C): A & B & C; + assignIn(a: A, b: B, c: C, d: D): A & B & C & D; + assignIn(a: A, b: B, c: C, d: D, e: E): A & B & C & D & E; + assignInWith(): {...}; + assignInWith( + object: T, + s1: A, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): Object; + assignInWith( + object: T, + s1: A, + s2: B, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void + ): Object; + assignInWith( + object: T, + s1: A, + s2: B, + s3: C, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C + ) => any | void + ): Object; + assignInWith( + object: T, + s1: A, + s2: B, + s3: C, + s4: D, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C | D + ) => any | void + ): Object; + assignWith(): {...}; + assignWith( + object: T, + s1: A, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): Object; + assignWith( + object: T, + s1: A, + s2: B, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void + ): Object; + assignWith( + object: T, + s1: A, + s2: B, + s3: C, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C + ) => any | void + ): Object; + assignWith( + object: T, + s1: A, + s2: B, + s3: C, + s4: D, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C | D + ) => any | void + ): Object; + at(object?: ?Object, ...paths: $ReadOnlyArray): Array; + at(object?: ?Object, paths: $ReadOnlyArray): Array; + create(prototype: void | null, properties: void | null): {...}; + create(prototype: T, properties: Object): T; + create(prototype: any, properties: void | null): {...}; + defaults(object?: ?Object, ...sources?: $ReadOnlyArray): Object; + defaultsDeep(object?: ?Object, ...sources?: $ReadOnlyArray): Object; + // alias for _.toPairs + entries(object?: ?Object): Array<[string, any]>; + // alias for _.toPairsIn + entriesIn(object?: ?Object): Array<[string, any]>; + // alias for _.assignIn + extend(a?: ?A, b?: ?B): A & B; + extend(a: A, b: B, c: C): A & B & C; + extend(a: A, b: B, c: C, d: D): A & B & C & D; + extend(a: A, b: B, c: C, d: D, e: E): A & B & C & D & E; + // alias for _.assignInWith + extendWith( + object?: ?T, + s1?: ?A, + customizer?: ?( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): Object; + extendWith( + object: T, + s1: A, + s2: B, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void + ): Object; + extendWith( + object: T, + s1: A, + s2: B, + s3: C, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C + ) => any | void + ): Object; + extendWith( + object: T, + s1: A, + s2: B, + s3: C, + s4: D, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C | D + ) => any | void + ): Object; + findKey>( + object: T, + predicate?: ?OPredicate + ): string | void; + findKey>( + object: void | null, + predicate?: ?OPredicate + ): void; + findLastKey>( + object: T, + predicate?: ?OPredicate + ): string | void; + findLastKey>( + object: void | null, + predicate?: ?OPredicate + ): void; + forIn(object: Object, iteratee?: ?OIteratee<*>): Object; + forIn(object: void | null, iteratee?: ?OIteratee<*>): null; + forInRight(object: Object, iteratee?: ?OIteratee<*>): Object; + forInRight(object: void | null, iteratee?: ?OIteratee<*>): null; + forOwn(object: Object, iteratee?: ?OIteratee<*>): Object; + forOwn(object: void | null, iteratee?: ?OIteratee<*>): null; + forOwnRight(object: Object, iteratee?: ?OIteratee<*>): Object; + forOwnRight(object: void | null, iteratee?: ?OIteratee<*>): null; + functions(object?: ?Object): Array; + functionsIn(object?: ?Object): Array; + get( + object?: ?Object | ?$ReadOnlyArray | void | null, + path?: ?Path, + defaultValue?: any + ): any; + has(object: Object, path: Path): boolean; + has(object: Object, path: void | null): false; + has(object: void | null, path?: ?Path): false; + hasIn(object: Object, path: Path): boolean; + hasIn(object: Object, path: void | null): false; + hasIn(object: void | null, path?: ?Path): false; + invert(object: Object, multiVal?: ?boolean): Object; + invert(object: void | null, multiVal?: ?boolean): {...}; + invertBy(object: Object, iteratee?: ?Function): Object; + invertBy(object: void | null, iteratee?: ?Function): {...}; + invoke( + object?: ?Object, + path?: ?Path, + ...args?: $ReadOnlyArray + ): any; + keys(object?: ?ReadOnlyIndexerObject): Array; + keys(object?: ?Object): Array; + keysIn(object?: ?Object): Array; + mapKeys(object: Object, iteratee?: ?OIteratee<*>): Object; + mapKeys(object: void | null, iteratee?: ?OIteratee<*>): {...}; + mapValues(object: Object, iteratee?: ?OIteratee<*>): Object; + mapValues(object: void | null, iteratee?: ?OIteratee<*>): {...}; + merge(object?: ?Object, ...sources?: $ReadOnlyArray): Object; + mergeWith(): {...}; + mergeWith( + object: T, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): Object; + mergeWith( + object: T, + s1: A, + s2: B, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void + ): Object; + mergeWith( + object: T, + s1: A, + s2: B, + s3: C, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C + ) => any | void + ): Object; + mergeWith( + object: T, + s1: A, + s2: B, + s3: C, + s4: D, + customizer?: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B | C | D + ) => any | void + ): Object; + omit(object?: ?Object, ...props: $ReadOnlyArray): Object; + omit(object?: ?Object, props: $ReadOnlyArray): Object; + omitBy>( + object: $ReadOnly, + predicate?: ?OPredicate + ): Object; + omitBy(object: void | null, predicate?: ?OPredicate): {...}; + pick(object?: ?Object, ...props: $ReadOnlyArray): Object; + pick(object?: ?Object, props: $ReadOnlyArray): Object; + pickBy>( + object: $ReadOnly, + predicate?: ?OPredicate + ): Object; + pickBy(object: void | null, predicate?: ?OPredicate): {...}; + result( + object?: ?Object, + path?: ?Path, + defaultValue?: any + ): any; + set(object: Object, path?: ?Path, value: any): Object; + set( + object: T, + path?: ?Path, + value?: ?any + ): T; + setWith( + object: T, + path?: ?Path, + value: any, + customizer?: (nsValue: any, key: string, nsObject: T) => any + ): Object; + setWith( + object: T, + path?: ?Path, + value?: ?any, + customizer?: ?(nsValue: any, key: string, nsObject: T) => any + ): T; + toPairs(object?: ?Object | $ReadOnlyArray<*>): Array<[string, any]>; + toPairsIn(object?: ?Object): Array<[string, any]>; + transform( + collection: Object | $ReadOnlyArray, + iteratee?: ?OIteratee<*>, + accumulator?: any + ): any; + transform( + collection: void | null, + iteratee?: ?OIteratee<*>, + accumulator?: ?any + ): {...}; + unset(object: void | null, path?: ?Path): true; + unset(object: Object, path?: ?Path): boolean; + update(object: Object, path: Path, updater: Function): Object; + update( + object: T, + path?: ?Path, + updater?: ?Function + ): T; + updateWith( + object: Object, + path?: ?Path, + updater?: ?Function, + customizer?: ?Function + ): Object; + updateWith( + object: T, + path?: ?Path, + updater?: ?Function, + customizer?: ?Function + ): T; + values(object?: ?Object): Array; + valuesIn(object?: ?Object): Array; + + // Seq + // harder to read, but this is _() + (value: any): any; + chain(value: T): any; + tap(value: T, interceptor: (value: T) => any): T; + thru(value: T1, interceptor: (value: T1) => T2): T2; + // TODO: _.prototype.* + + // String + camelCase(string: string): string; + camelCase(string: void | null): ""; + capitalize(string: string): string; + capitalize(string: void | null): ""; + deburr(string: string): string; + deburr(string: void | null): ""; + endsWith(string: string, target?: string, position?: ?number): boolean; + endsWith(string: void | null, target?: ?string, position?: ?number): false; + escape(string: string): string; + escape(string: void | null): ""; + escapeRegExp(string: string): string; + escapeRegExp(string: void | null): ""; + kebabCase(string: string): string; + kebabCase(string: void | null): ""; + lowerCase(string: string): string; + lowerCase(string: void | null): ""; + lowerFirst(string: string): string; + lowerFirst(string: void | null): ""; + pad(string?: ?string, length?: ?number, chars?: ?string): string; + padEnd(string?: ?string, length?: ?number, chars?: ?string): string; + padStart(string?: ?string, length?: ?number, chars?: ?string): string; + parseInt(string: string, radix?: ?number): number; + repeat(string: string, n?: ?number): string; + repeat(string: void | null, n?: ?number): ""; + replace( + string: string, + pattern: RegExp | string, + replacement: ((string: string) => string) | string + ): string; + replace( + string: void | null, + pattern?: ?RegExp | ?string, + replacement: ?((string: string) => string) | ?string + ): ""; + snakeCase(string: string): string; + snakeCase(string: void | null): ""; + split( + string?: ?string, + separator?: ?RegExp | ?string, + limit?: ?number + ): Array; + startCase(string: string): string; + startCase(string: void | null): ""; + startsWith(string: string, target?: string, position?: number): boolean; + startsWith( + string: void | null, + target?: ?string, + position?: ?number + ): false; + template(string?: ?string, options?: ?TemplateSettings): Function; + toLower(string: string): string; + toLower(string: void | null): ""; + toUpper(string: string): string; + toUpper(string: void | null): ""; + trim(string: string, chars?: string): string; + trim(string: void | null, chars?: ?string): ""; + trimEnd(string: string, chars?: ?string): string; + trimEnd(string: void | null, chars?: ?string): ""; + trimStart(string: string, chars?: ?string): string; + trimStart(string: void | null, chars?: ?string): ""; + truncate(string: string, options?: TruncateOptions): string; + truncate(string: void | null, options?: ?TruncateOptions): ""; + unescape(string: string): string; + unescape(string: void | null): ""; + upperCase(string: string): string; + upperCase(string: void | null): ""; + upperFirst(string: string): string; + upperFirst(string: void | null): ""; + words(string?: ?string, pattern?: ?RegExp | ?string): Array; + + // Util + attempt(func: Function, ...args: $ReadOnlyArray): any; + bindAll(object: Object, methodNames?: ?$ReadOnlyArray): Object; + bindAll(object: T, methodNames?: ?$ReadOnlyArray): T; + bindAll(object: Object, ...methodNames: $ReadOnlyArray): Object; + cond(pairs?: ?NestedArray): Function; + conforms(source?: ?Object): Function; + constant(value: T): () => T; + defaultTo(value: T1, defaultValue: T2): T2; + defaultTo( + value: T1, + defaultValue: T2 + ): T1; + // NaN is a number instead of its own type, otherwise it would behave like null/void + defaultTo(value: T1, defaultValue: T2): T1 | T2; + flow: $ComposeReverse & ((funcs: $ReadOnlyArray) => Function); + flowRight: $Compose & ((funcs: $ReadOnlyArray) => Function); + identity(value: T): T; + iteratee(func?: any): Function; + matches(source?: ?Object): Function; + matchesProperty(path?: ?Path, srcValue: any): Function; + method(path?: ?Path, ...args?: $ReadOnlyArray): Function; + methodOf(object?: ?Object, ...args?: $ReadOnlyArray): Function; + mixin( + object?: T, + source: Object, + options?: { chain: boolean, ... } + ): T; + noConflict(): Lodash; + noop(...args: $ReadOnlyArray): void; + nthArg(n?: ?number): Function; + over(...iteratees: $ReadOnlyArray): Function; + over(iteratees: $ReadOnlyArray): Function; + overEvery(...predicates: $ReadOnlyArray): Function; + overEvery(predicates: $ReadOnlyArray): Function; + overSome(...predicates: $ReadOnlyArray): Function; + overSome(predicates: $ReadOnlyArray): Function; + property(path?: ?Path): Function; + propertyOf(object?: ?Object): Function; + range(start: number, end: number, step?: number): Array; + range(end: number, step?: number): Array; + rangeRight(start?: ?number, end?: ?number, step?: ?number): Array; + rangeRight(end?: ?number, step?: ?number): Array; + runInContext(context?: ?Object): Function; + + stubArray(): Array<*>; + stubFalse(): false; + stubObject(): {...}; + stubString(): ""; + stubTrue(): true; + times(n?: ?number, ...rest?: $ReadOnlyArray): Array; + times(n: number, iteratee: (i: number) => T): Array; + toPath(value: any): Array; + uniqueId(prefix?: ?string): string; + + // Properties + VERSION: string; + templateSettings: TemplateSettings; + } + + declare module.exports: Lodash; +} + +declare module "lodash/fp" { + declare type Path = $ReadOnlyArray | string | number; + declare type __CurriedFunction1 = (...r: [AA]) => R; + declare type CurriedFunction1 = __CurriedFunction1; + + declare type __CurriedFunction2 = (( + ...r: [AA] + ) => CurriedFunction1) & + ((...r: [AA, BB]) => R); + declare type CurriedFunction2 = __CurriedFunction2; + + declare type __CurriedFunction3 = (( + ...r: [AA] + ) => CurriedFunction2) & + ((...r: [AA, BB]) => CurriedFunction1) & + ((...r: [AA, BB, CC]) => R); + declare type CurriedFunction3 = __CurriedFunction3< + A, + B, + C, + R, + *, + *, + * + >; + + declare type __CurriedFunction4< + A, + B, + C, + D, + R, + AA: A, + BB: B, + CC: C, + DD: D + > = ((...r: [AA]) => CurriedFunction3) & + ((...r: [AA, BB]) => CurriedFunction2) & + ((...r: [AA, BB, CC]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD]) => R); + declare type CurriedFunction4 = __CurriedFunction4< + A, + B, + C, + D, + R, + *, + *, + *, + * + >; + + declare type __CurriedFunction5< + A, + B, + C, + D, + E, + R, + AA: A, + BB: B, + CC: C, + DD: D, + EE: E + > = ((...r: [AA]) => CurriedFunction4) & + ((...r: [AA, BB]) => CurriedFunction3) & + ((...r: [AA, BB, CC]) => CurriedFunction2) & + ((...r: [AA, BB, CC, DD]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD, EE]) => R); + declare type CurriedFunction5 = __CurriedFunction5< + A, + B, + C, + D, + E, + R, + *, + *, + *, + *, + * + >; + + declare type __CurriedFunction6< + A, + B, + C, + D, + E, + F, + R, + AA: A, + BB: B, + CC: C, + DD: D, + EE: E, + FF: F + > = ((...r: [AA]) => CurriedFunction5) & + ((...r: [AA, BB]) => CurriedFunction4) & + ((...r: [AA, BB, CC]) => CurriedFunction3) & + ((...r: [AA, BB, CC, DD]) => CurriedFunction2) & + ((...r: [AA, BB, CC, DD, EE]) => CurriedFunction1) & + ((...r: [AA, BB, CC, DD, EE, FF]) => R); + declare type CurriedFunction6 = __CurriedFunction6< + A, + B, + C, + D, + E, + F, + R, + *, + *, + *, + *, + *, + * + >; + + declare type Curry = (((...r: [A]) => R) => CurriedFunction1) & + (((...r: [A, B]) => R) => CurriedFunction2) & + (((...r: [A, B, C]) => R) => CurriedFunction3) & + (( + (...r: [A, B, C, D]) => R + ) => CurriedFunction4) & + (( + (...r: [A, B, C, D, E]) => R + ) => CurriedFunction5) & + (( + (...r: [A, B, C, D, E, F]) => R + ) => CurriedFunction6); + + declare type UnaryFn = (a: A) => R; + + declare type TemplateSettings = { + escape?: RegExp, + evaluate?: RegExp, + imports?: Object, + interpolate?: RegExp, + variable?: string, + ... + }; + + declare type TruncateOptions = { + length?: number, + omission?: string, + separator?: RegExp | string, + ... + }; + + declare type DebounceOptions = { + leading?: boolean, + maxWait?: number, + trailing?: boolean, + ... + }; + + declare type ThrottleOptions = { + leading?: boolean, + trailing?: boolean, + ... + }; + + declare type Key = string | number; + declare type ReadOnlyIndexerObject = $ReadOnly<{ [id: K]: V, ... }> + declare type NestedArray = Array>; + declare type Collection = $ReadOnlyArray | ReadOnlyIndexerObject; + + declare type matchesIterateeShorthand = { [Key]: any, ... }; + declare type matchesPropertyIterateeShorthand = [string, any]; + declare type propertyIterateeShorthand = string; + + declare type OPredicate = + | ((value: A) => any) + | matchesIterateeShorthand + | matchesPropertyIterateeShorthand + | propertyIterateeShorthand; + + declare type IterateeWithResult = + | ((value: V) => R) + | string; + + declare type OIterateeWithResult = + | ReadOnlyIndexerObject + | IterateeWithResult; + declare type OIteratee = OIterateeWithResult; + + declare type Predicate = + | ((value: T) => any) + | matchesIterateeShorthand + | matchesPropertyIterateeShorthand + | propertyIterateeShorthand; + + declare type _ValueOnlyIteratee = (value: T) => mixed; + declare type ValueOnlyIteratee = _ValueOnlyIteratee | string; + declare type _Iteratee = (item: T) => mixed; + declare type Iteratee = _Iteratee | Object | string; + declare type AFlatMapIteratee = + | ((item: T) => Array) + | string; + declare type OFlatMapIteratee = IterateeWithResult>; + declare type Comparator = (item: T, item2: T) => boolean; + + declare type MapIterator = ((item: T) => U) | propertyIterateeShorthand; + + declare type OMapIterator = + | ((item: T) => U) + | propertyIterateeShorthand; + + declare class Lodash { + // Array + chunk(size: number): (array: $ReadOnlyArray) => Array>; + chunk(size: number, array: $ReadOnlyArray): Array>; + compact(array?: ?$ReadOnlyArray): Array; + concat | T, B: Array | U>( + base: A + ): (elements: B) => Array; + concat | T, B: Array | U>( + base: A, + elements: B + ): Array; + difference(values: $ReadOnlyArray): (array: $ReadOnlyArray) => Array; + difference(values: $ReadOnlyArray, array: $ReadOnlyArray): Array; + differenceBy( + iteratee: ValueOnlyIteratee + ): ((values: $ReadOnlyArray) => (array: $ReadOnlyArray) => Array) & + ((values: $ReadOnlyArray, array: $ReadOnlyArray) => Array); + differenceBy( + iteratee: ValueOnlyIteratee, + values: $ReadOnlyArray + ): (array: $ReadOnlyArray) => Array; + differenceBy( + iteratee: ValueOnlyIteratee, + values: $ReadOnlyArray, + array: $ReadOnlyArray + ): Array; + differenceWith( + comparator: Comparator + ): ((first: $ReadOnlyArray) => (second: $ReadOnlyArray) => Array) & + ((first: $ReadOnlyArray, second: $ReadOnlyArray) => Array); + differenceWith( + comparator: Comparator, + first: $ReadOnlyArray + ): (second: $ReadOnlyArray) => Array; + differenceWith( + comparator: Comparator, + first: $ReadOnlyArray, + second: $ReadOnlyArray + ): Array; + drop(n: number): (array: $ReadOnlyArray) => Array; + drop(n: number, array: $ReadOnlyArray): Array; + dropLast(n: number): (array: $ReadOnlyArray) => Array; + dropLast(n: number, array: $ReadOnlyArray): Array; + dropRight(n: number): (array: $ReadOnlyArray) => Array; + dropRight(n: number, array: $ReadOnlyArray): Array; + dropRightWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + dropRightWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + dropWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + dropWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + dropLastWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + dropLastWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + fill( + start: number + ): (( + end: number + ) => ((value: U) => (array: Array) => Array) & + ((value: U, array: Array) => Array)) & + ((end: number, value: U) => (array: Array) => Array) & + ((end: number, value: U, array: Array) => Array); + fill( + start: number, + end: number + ): ((value: U) => (array: Array) => Array) & + ((value: U, array: Array) => Array); + fill( + start: number, + end: number, + value: U + ): (array: Array) => Array; + fill( + start: number, + end: number, + value: U, + array: Array + ): Array; + findIndex(predicate: Predicate): (array: $ReadOnlyArray) => number; + findIndex(predicate: Predicate, array: $ReadOnlyArray): number; + findIndexFrom( + predicate: Predicate + ): ((fromIndex: number) => (array: $ReadOnlyArray) => number) & + ((fromIndex: number, array: $ReadOnlyArray) => number); + findIndexFrom( + predicate: Predicate, + fromIndex: number + ): (array: $ReadOnlyArray) => number; + findIndexFrom( + predicate: Predicate, + fromIndex: number, + array: $ReadOnlyArray + ): number; + findLastIndex( + predicate: Predicate + ): (array: $ReadOnlyArray) => number; + findLastIndex(predicate: Predicate, array: $ReadOnlyArray): number; + findLastIndexFrom( + predicate: Predicate + ): ((fromIndex: number) => (array: $ReadOnlyArray) => number) & + ((fromIndex: number, array: $ReadOnlyArray) => number); + findLastIndexFrom( + predicate: Predicate, + fromIndex: number + ): (array: $ReadOnlyArray) => number; + findLastIndexFrom( + predicate: Predicate, + fromIndex: number, + array: $ReadOnlyArray + ): number; + // alias of _.head + first(array: $ReadOnlyArray): T; + flatten(array: $ReadOnlyArray<$ReadOnlyArray | X>): Array; + unnest(array: $ReadOnlyArray<$ReadOnlyArray | X>): Array; + flattenDeep(array: $ReadOnlyArray): Array; + flattenDepth(depth: number): (array: $ReadOnlyArray) => Array; + flattenDepth(depth: number, array: $ReadOnlyArray): Array; + fromPairs(pairs: $ReadOnlyArray<[A, B]>): {| [key: A]: B |}; + head(array: $ReadOnlyArray): T; + indexOf(value: T): (array: $ReadOnlyArray) => number; + indexOf(value: T, array: $ReadOnlyArray): number; + indexOfFrom( + value: T + ): ((fromIndex: number) => (array: $ReadOnlyArray) => number) & + ((fromIndex: number, array: $ReadOnlyArray) => number); + indexOfFrom(value: T, fromIndex: number): (array: $ReadOnlyArray) => number; + indexOfFrom(value: T, fromIndex: number, array: $ReadOnlyArray): number; + initial(array: $ReadOnlyArray): Array; + init(array: $ReadOnlyArray): Array; + intersection(a1: $ReadOnlyArray): (a2: $ReadOnlyArray) => Array; + intersection(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array; + intersectionBy( + iteratee: ValueOnlyIteratee + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + intersectionBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + intersectionBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + intersectionWith( + comparator: Comparator + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + intersectionWith( + comparator: Comparator, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + intersectionWith( + comparator: Comparator, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + join(separator: string): (array: $ReadOnlyArray) => string; + join(separator: string, array: $ReadOnlyArray): string; + last(array: $ReadOnlyArray): T; + lastIndexOf(value: T): (array: $ReadOnlyArray) => number; + lastIndexOf(value: T, array: $ReadOnlyArray): number; + lastIndexOfFrom( + value: T + ): ((fromIndex: number) => (array: $ReadOnlyArray) => number) & + ((fromIndex: number, array: $ReadOnlyArray) => number); + lastIndexOfFrom( + value: T, + fromIndex: number + ): (array: $ReadOnlyArray) => number; + lastIndexOfFrom(value: T, fromIndex: number, array: $ReadOnlyArray): number; + nth(n: number): (array: $ReadOnlyArray) => T; + nth(n: number, array: $ReadOnlyArray): T; + pull(value: T): (array: Array) => Array; + pull(value: T, array: Array): Array; + pullAll(values: $ReadOnlyArray): (array: Array) => Array; + pullAll(values: $ReadOnlyArray, array: Array): Array; + pullAllBy( + iteratee: ValueOnlyIteratee + ): ((values: $ReadOnlyArray) => (array: Array) => Array) & + ((values: $ReadOnlyArray, array: Array) => Array); + pullAllBy( + iteratee: ValueOnlyIteratee, + values: $ReadOnlyArray + ): (array: Array) => Array; + pullAllBy( + iteratee: ValueOnlyIteratee, + values: $ReadOnlyArray, + array: Array + ): Array; + pullAllWith( + comparator: Function + ): ((values: Array) => (array: Array) => Array) & + ((values: Array, array: Array) => Array); + pullAllWith(comparator: Function, values: Array): (array: Array) => Array; + pullAllWith(comparator: Function, values: Array, array: Array): Array; + pullAt(indexed: Array): (array: Array) => Array; + pullAt(indexed: Array, array: Array): Array; + remove(predicate: Predicate): (array: Array) => Array; + remove(predicate: Predicate, array: Array): Array; + reverse(array: Array): Array; + slice( + start: number + ): ((end: number) => (array: $ReadOnlyArray) => Array) & + ((end: number, array: $ReadOnlyArray) => Array); + slice(start: number, end: number): (array: $ReadOnlyArray) => Array; + slice(start: number, end: number, array: $ReadOnlyArray): Array; + sortedIndex(value: T): (array: $ReadOnlyArray) => number; + sortedIndex(value: T, array: $ReadOnlyArray): number; + sortedIndexBy( + iteratee: ValueOnlyIteratee + ): ((value: T) => (array: $ReadOnlyArray) => number) & + ((value: T, array: $ReadOnlyArray) => number); + sortedIndexBy( + iteratee: ValueOnlyIteratee, + value: T + ): (array: $ReadOnlyArray) => number; + sortedIndexBy( + iteratee: ValueOnlyIteratee, + value: T, + array: $ReadOnlyArray + ): number; + sortedIndexOf(value: T): (array: $ReadOnlyArray) => number; + sortedIndexOf(value: T, array: $ReadOnlyArray): number; + sortedLastIndex(value: T): (array: $ReadOnlyArray) => number; + sortedLastIndex(value: T, array: $ReadOnlyArray): number; + sortedLastIndexBy( + iteratee: ValueOnlyIteratee + ): ((value: T) => (array: $ReadOnlyArray) => number) & + ((value: T, array: $ReadOnlyArray) => number); + sortedLastIndexBy( + iteratee: ValueOnlyIteratee, + value: T + ): (array: $ReadOnlyArray) => number; + sortedLastIndexBy( + iteratee: ValueOnlyIteratee, + value: T, + array: $ReadOnlyArray + ): number; + sortedLastIndexOf(value: T): (array: $ReadOnlyArray) => number; + sortedLastIndexOf(value: T, array: $ReadOnlyArray): number; + sortedUniq(array: $ReadOnlyArray): Array; + sortedUniqBy(iteratee: ValueOnlyIteratee, array: $ReadOnlyArray): Array; + tail(array: $ReadOnlyArray): Array; + take(n: number): (array: $ReadOnlyArray) => Array; + take(n: number, array: $ReadOnlyArray): Array; + takeRight(n: number): (array: $ReadOnlyArray) => Array; + takeRight(n: number, array: $ReadOnlyArray): Array; + takeLast(n: number): (array: $ReadOnlyArray) => Array; + takeLast(n: number, array: $ReadOnlyArray): Array; + takeRightWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + takeRightWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + takeLastWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + takeLastWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + takeWhile(predicate: Predicate): (array: $ReadOnlyArray) => Array; + takeWhile(predicate: Predicate, array: $ReadOnlyArray): Array; + union(a1: $ReadOnlyArray): (a2: $ReadOnlyArray) => Array; + union(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array; + unionBy( + iteratee: ValueOnlyIteratee + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + unionBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + unionBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + unionWith( + comparator: Comparator + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + unionWith( + comparator: Comparator, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + unionWith( + comparator: Comparator, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + uniq(array: $ReadOnlyArray): Array; + uniqBy(iteratee: ValueOnlyIteratee): (array: $ReadOnlyArray) => Array; + uniqBy(iteratee: ValueOnlyIteratee, array: $ReadOnlyArray): Array; + uniqWith(comparator: Comparator): (array: $ReadOnlyArray) => Array; + uniqWith(comparator: Comparator, array: $ReadOnlyArray): Array; + unzip(array: $ReadOnlyArray): Array; + unzipWith(iteratee: Iteratee): (array: $ReadOnlyArray) => Array; + unzipWith(iteratee: Iteratee, array: $ReadOnlyArray): Array; + without(values: $ReadOnlyArray): (array: $ReadOnlyArray) => Array; + without(values: $ReadOnlyArray, array: $ReadOnlyArray): Array; + xor(a1: $ReadOnlyArray): (a2: $ReadOnlyArray) => Array; + xor(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array; + symmetricDifference(a1: $ReadOnlyArray): (a2: $ReadOnlyArray) => Array; + symmetricDifference(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array; + xorBy( + iteratee: ValueOnlyIteratee + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + xorBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + xorBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + symmetricDifferenceBy( + iteratee: ValueOnlyIteratee + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + symmetricDifferenceBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + symmetricDifferenceBy( + iteratee: ValueOnlyIteratee, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + xorWith( + comparator: Comparator + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + xorWith( + comparator: Comparator, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + xorWith(comparator: Comparator, a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array; + symmetricDifferenceWith( + comparator: Comparator + ): ((a1: $ReadOnlyArray) => (a2: $ReadOnlyArray) => Array) & + ((a1: $ReadOnlyArray, a2: $ReadOnlyArray) => Array); + symmetricDifferenceWith( + comparator: Comparator, + a1: $ReadOnlyArray + ): (a2: $ReadOnlyArray) => Array; + symmetricDifferenceWith( + comparator: Comparator, + a1: $ReadOnlyArray, + a2: $ReadOnlyArray + ): Array; + zip(a1: $ReadOnlyArray): (a2: $ReadOnlyArray) => Array<[A, B]>; + zip(a1: $ReadOnlyArray, a2: $ReadOnlyArray): Array<[A, B]>; + zipAll(arrays: $ReadOnlyArray<$ReadOnlyArray>): Array; + zipObject(props?: $ReadOnlyArray): (values?: $ReadOnlyArray) => { [key: K]: V, ... }; + zipObject(props?: $ReadOnlyArray, values?: $ReadOnlyArray): { [key: K]: V, ... }; + zipObj(props: $ReadOnlyArray): (values: $ReadOnlyArray) => Object; + zipObj(props: $ReadOnlyArray, values: $ReadOnlyArray): Object; + zipObjectDeep(props: $ReadOnlyArray): (values: any) => Object; + zipObjectDeep(props: $ReadOnlyArray, values: any): Object; + zipWith( + iteratee: Iteratee + ): ((a1: NestedArray) => (a2: NestedArray) => Array) & + ((a1: NestedArray, a2: NestedArray) => Array); + zipWith( + iteratee: Iteratee, + a1: NestedArray + ): (a2: NestedArray) => Array; + zipWith( + iteratee: Iteratee, + a1: NestedArray, + a2: NestedArray + ): Array; + + // Collection + countBy( + iteratee: ValueOnlyIteratee + ): (collection: Collection) => { [string]: number, ... }; + countBy( + iteratee: ValueOnlyIteratee, + collection: Collection + ): { [string]: number, ... }; + // alias of _.forEach + each( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => Array; + each( + iteratee: Iteratee | OIteratee, + collection: Collection + ): Array; + // alias of _.forEachRight + eachRight( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => Array; + eachRight( + iteratee: Iteratee | OIteratee, + collection: Collection + ): Array; + every( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => boolean; + every( + iteratee: Iteratee | OIteratee, + collection: Collection + ): boolean; + all( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => boolean; + all( + iteratee: Iteratee | OIteratee, + collection: Collection + ): boolean; + filter( + predicate: Predicate | OPredicate + ): (collection: Collection) => Array; + filter( + predicate: Predicate | OPredicate, + collection: Collection + ): Array; + find( + predicate: Predicate | OPredicate + ): (collection: Collection) => T | void; + find( + predicate: Predicate | OPredicate, + collection: Collection + ): T | void; + findFrom( + predicate: Predicate | OPredicate + ): (( + fromIndex: number + ) => (collection: Collection) => T | void) & + (( + fromIndex: number, + collection: Collection + ) => T | void); + findFrom( + predicate: Predicate | OPredicate, + fromIndex: number + ): (collection: Collection) => T | void; + findFrom( + predicate: Predicate | OPredicate, + fromIndex: number, + collection: Collection + ): T | void; + findLast( + predicate: Predicate | OPredicate + ): (collection: Collection) => T | void; + findLast( + predicate: Predicate | OPredicate, + collection: Collection + ): T | void; + findLastFrom( + predicate: Predicate | OPredicate + ): (( + fromIndex: number + ) => (collection: Collection) => T | void) & + (( + fromIndex: number, + collection: Collection + ) => T | void); + findLastFrom( + predicate: Predicate | OPredicate, + fromIndex: number + ): (collection: Collection) => T | void; + findLastFrom( + predicate: Predicate | OPredicate, + fromIndex: number, + collection: Collection + ): T | void; + flatMap( + iteratee: AFlatMapIteratee | OFlatMapIteratee + ): (collection: Collection) => Array; + flatMap( + iteratee: AFlatMapIteratee | OFlatMapIteratee, + collection: Collection + ): Array; + flatMapDeep( + iteratee: AFlatMapIteratee | OFlatMapIteratee + ): (collection: Collection) => Array; + flatMapDeep( + iteratee: AFlatMapIteratee | OFlatMapIteratee, + collection: Collection + ): Array; + flatMapDepth( + iteratee: AFlatMapIteratee | OFlatMapIteratee + ): (( + depth: number + ) => (collection: Collection) => Array) & + ((depth: number, collection: Collection) => Array); + flatMapDepth( + iteratee: AFlatMapIteratee | OFlatMapIteratee, + depth: number + ): (collection: Collection) => Array; + flatMapDepth( + iteratee: AFlatMapIteratee | OFlatMapIteratee, + depth: number, + collection: Collection + ): Array; + forEach( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => Array; + forEach( + iteratee: Iteratee | OIteratee, + collection: Collection + ): Array; + forEachRight( + iteratee: Iteratee | OIteratee + ): (collection: Collection) => Array; + forEachRight( + iteratee: Iteratee | OIteratee, + collection: Collection + ): Array; + groupBy( + iteratee: ValueOnlyIteratee + ): ( + collection: Collection + ) => { [key: V]: Array, ... }; + groupBy( + iteratee: ValueOnlyIteratee, + collection: Collection + ): { [key: V]: Array, ... }; + includes(value: T): (collection: Collection) => boolean; + includes(value: T, collection: Collection): boolean; + includes(value: string): (str: string) => boolean; + includes(value: string, str: string): boolean; + contains(value: string): (str: string) => boolean; + contains(value: string, str: string): boolean; + contains(value: T): (collection: Collection) => boolean; + contains(value: T, collection: Collection): boolean; + includesFrom( + value: string + ): ((fromIndex: number) => (str: string) => boolean) & + ((fromIndex: number, str: string) => boolean); + includesFrom(value: string, fromIndex: number): (str: string) => boolean; + includesFrom(value: string, fromIndex: number, str: string): boolean; + includesFrom( + value: T + ): ((fromIndex: number) => (collection: $ReadOnlyArray) => boolean) & + ((fromIndex: number, collection: $ReadOnlyArray) => boolean); + includesFrom( + value: T, + fromIndex: number + ): (collection: $ReadOnlyArray) => boolean; + includesFrom(value: T, fromIndex: number, collection: $ReadOnlyArray): boolean; + invokeMap( + path: ((value: T) => Path) | Path + ): (collection: Collection) => Array; + invokeMap( + path: ((value: T) => Path) | Path, + collection: Collection + ): Array; + invokeArgsMap( + path: ((value: T) => Path) | Path + ): (( + collection: Collection + ) => (args: $ReadOnlyArray) => Array) & + (( + collection: Collection, + args: $ReadOnlyArray + ) => Array); + invokeArgsMap( + path: ((value: T) => Path) | Path, + collection: Collection + ): (args: $ReadOnlyArray) => Array; + invokeArgsMap( + path: ((value: T) => Path) | Path, + collection: Collection, + args: $ReadOnlyArray + ): Array; + keyBy( + iteratee: ValueOnlyIteratee + ): (collection: Collection) => { [key: V]: T, ... }; + keyBy( + iteratee: ValueOnlyIteratee, + collection: Collection + ): { [key: V]: T, ... }; + indexBy( + iteratee: ValueOnlyIteratee + ): (collection: Collection) => { [key: V]: T, ... }; + indexBy( + iteratee: ValueOnlyIteratee, + collection: Collection + ): { [key: V]: T, ... }; + map( + iteratee: MapIterator | OMapIterator + ): (collection: Collection) => Array; + map( + iteratee: MapIterator | OMapIterator, + collection: Collection + ): Array; + map(iteratee: (char: string) => any): (str: string) => string; + map(iteratee: (char: string) => any, str: string): string; + pluck( + iteratee: MapIterator | OMapIterator + ): (collection: Collection) => Array; + pluck( + iteratee: MapIterator | OMapIterator, + collection: Collection + ): Array; + pluck(iteratee: (char: string) => any): (str: string) => string; + pluck(iteratee: (char: string) => any, str: string): string; + orderBy( + iteratees: $ReadOnlyArray | OIteratee<*>> | string + ): (( + orders: $ReadOnlyArray<"asc" | "desc"> | string + ) => (collection: Collection) => Array) & + (( + orders: $ReadOnlyArray<"asc" | "desc"> | string, + collection: Collection + ) => Array); + orderBy( + iteratees: $ReadOnlyArray | OIteratee<*>> | string, + orders: $ReadOnlyArray<"asc" | "desc"> | string + ): (collection: Collection) => Array; + orderBy( + iteratees: $ReadOnlyArray | OIteratee<*>> | string, + orders: $ReadOnlyArray<"asc" | "desc"> | string, + collection: Collection + ): Array; + partition( + predicate: Predicate | OPredicate + ): (collection: Collection) => [Array, Array]; + partition( + predicate: Predicate | OPredicate, + collection: Collection + ): [Array, Array]; + reduce( + iteratee: (accumulator: U, value: T) => U + ): ((accumulator: U) => (collection: Collection) => U) & + ((accumulator: U, collection: Collection) => U); + reduce( + iteratee: (accumulator: U, value: T) => U, + accumulator: U + ): (collection: Collection) => U; + reduce( + iteratee: (accumulator: U, value: T) => U, + accumulator: U, + collection: Collection + ): U; + reduceRight( + iteratee: (value: T, accumulator: U) => U + ): ((accumulator: U) => (collection: Collection) => U) & + ((accumulator: U, collection: Collection) => U); + reduceRight( + iteratee: (value: T, accumulator: U) => U, + accumulator: U + ): (collection: Collection) => U; + reduceRight( + iteratee: (value: T, accumulator: U) => U, + accumulator: U, + collection: Collection + ): U; + reject( + predicate: Predicate | OPredicate + ): (collection: Collection) => Array; + reject( + predicate: Predicate | OPredicate, + collection: Collection + ): Array; + sample(collection: Collection): T; + sampleSize( + n: number + ): (collection: Collection) => Array; + sampleSize(n: number, collection: Collection): Array; + shuffle(collection: Collection): Array; + size(collection: $ReadOnlyArray | Object | string): number; + some( + predicate: Predicate | OPredicate + ): (collection: Collection) => boolean; + some( + predicate: Predicate | OPredicate, + collection: Collection + ): boolean; + any( + predicate: Predicate | OPredicate + ): (collection: Collection) => boolean; + any( + predicate: Predicate | OPredicate, + collection: Collection + ): boolean; + sortBy( + iteratees: + | $ReadOnlyArray | OIteratee> + | Iteratee + | OIteratee + ): (collection: Collection) => Array; + sortBy( + iteratees: + | $ReadOnlyArray | OIteratee> + | Iteratee + | OIteratee, + collection: Collection + ): Array; + + // Date + now(): number; + + // Function + after(fn: Function): (n: number) => Function; + after(fn: Function, n: number): Function; + ary(func: Function): Function; + nAry(n: number): (func: Function) => Function; + nAry(n: number, func: Function): Function; + before(fn: Function): (n: number) => Function; + before(fn: Function, n: number): Function; + bind(func: Function): (thisArg: any) => Function; + bind(func: Function, thisArg: any): Function; + bindKey(obj: Object): (key: string) => Function; + bindKey(obj: Object, key: string): Function; + curry: Curry; + curryN(arity: number): (func: Function) => Function; + curryN(arity: number, func: Function): Function; + curryRight(func: Function): Function; + curryRightN(arity: number): (func: Function) => Function; + curryRightN(arity: number, func: Function): Function; + debounce(wait: number): (func: (...A) => R) => (...A) => R; + debounce(wait: number, func: (...A) => R): (...A) => R; + defer(func: (...$ReadOnlyArray) => any): TimeoutID; + delay(wait: number): (func: Function) => TimeoutID; + delay(wait: number, func: Function): TimeoutID; + flip(func: Function): Function; + memoize(func: F): F; + negate(predicate: (...A) => R): (...A) => boolean; + complement(predicate: Function): Function; + once(func: Function): Function; + overArgs(func: Function): (transforms: $ReadOnlyArray) => Function; + overArgs(func: Function, transforms: $ReadOnlyArray): Function; + useWith(func: Function): (transforms: $ReadOnlyArray) => Function; + useWith(func: Function, transforms: $ReadOnlyArray): Function; + partial(func: Function): (partials: $ReadOnlyArray) => Function; + partial(func: Function, partials: $ReadOnlyArray): Function; + partialRight(func: Function): (partials: $ReadOnlyArray) => Function; + partialRight(func: Function, partials: $ReadOnlyArray): Function; + rearg(indexes: $ReadOnlyArray): (func: Function) => Function; + rearg(indexes: $ReadOnlyArray, func: Function): Function; + rest(func: Function): Function; + unapply(func: Function): Function; + restFrom(start: number): (func: Function) => Function; + restFrom(start: number, func: Function): Function; + spread(func: Function): Function; + apply(func: Function): Function; + spreadFrom(start: number): (func: Function) => Function; + spreadFrom(start: number, func: Function): Function; + throttle(wait: number): (func: (...A) => R) => (...A) => R; + throttle(wait: number, func: (...A) => R): (...A) => R; + unary(func: (T, ...$ReadOnlyArray) => R): (T) => R; + wrap(wrapper: Function): (value: any) => Function; + wrap(wrapper: Function, value: any): Function; + + // Lang + castArray(value: *): Array; + clone(value: T): T; + cloneDeep(value: T): T; + cloneDeepWith( + customizer: (value: T, key: number | string, object: T, stack: any) => U + ): (value: T) => U; + cloneDeepWith( + customizer: (value: T, key: number | string, object: T, stack: any) => U, + value: T + ): U; + cloneWith( + customizer: (value: T, key: number | string, object: T, stack: any) => U + ): (value: T) => U; + cloneWith( + customizer: (value: T, key: number | string, object: T, stack: any) => U, + value: T + ): U; + conformsTo>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }> + ): (source: T) => boolean; + conformsTo>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }>, + source: T + ): boolean; + where>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }> + ): (source: T) => boolean; + where>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }>, + source: T + ): boolean; + conforms>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }> + ): (source: T) => boolean; + conforms>( + predicates: T & $ReadOnly<{ [key: string]: (x: any) => boolean, ... }>, + source: T + ): boolean; + eq(value: any): (other: any) => boolean; + eq(value: any, other: any): boolean; + identical(value: any): (other: any) => boolean; + identical(value: any, other: any): boolean; + gt(value: any): (other: any) => boolean; + gt(value: any, other: any): boolean; + gte(value: any): (other: any) => boolean; + gte(value: any, other: any): boolean; + isArguments(value: any): boolean; + isArray(value: any): boolean; + isArrayBuffer(value: any): boolean; + isArrayLike(value: any): boolean; + isArrayLikeObject(value: any): boolean; + isBoolean(value: any): boolean; + isBuffer(value: any): boolean; + isDate(value: any): boolean; + isElement(value: any): boolean; + isEmpty(value: any): boolean; + isEqual(value: any): (other: any) => boolean; + isEqual(value: any, other: any): boolean; + equals(value: any): (other: any) => boolean; + equals(value: any, other: any): boolean; + isEqualWith( + customizer: ( + objValue: any, + otherValue: any, + key: number | string, + object: T, + other: U, + stack: any + ) => boolean | void + ): ((value: T) => (other: U) => boolean) & + ((value: T, other: U) => boolean); + isEqualWith( + customizer: ( + objValue: any, + otherValue: any, + key: number | string, + object: T, + other: U, + stack: any + ) => boolean | void, + value: T + ): (other: U) => boolean; + isEqualWith( + customizer: ( + objValue: any, + otherValue: any, + key: number | string, + object: T, + other: U, + stack: any + ) => boolean | void, + value: T, + other: U + ): boolean; + isError(value: any): boolean; + isFinite(value: any): boolean; + isFunction(value: any): boolean; + isInteger(value: any): boolean; + isLength(value: any): boolean; + isMap(value: any): boolean; + isMatch(source: Object): (object: Object) => boolean; + isMatch(source: Object, object: Object): boolean; + whereEq(source: Object): (object: Object) => boolean; + whereEq(source: Object, object: Object): boolean; + isMatchWith( + customizer: ( + objValue: any, + srcValue: any, + key: number | string, + object: T, + source: U + ) => boolean | void + ): ((source: U) => (object: T) => boolean) & + ((source: U, object: T) => boolean); + isMatchWith( + customizer: ( + objValue: any, + srcValue: any, + key: number | string, + object: T, + source: U + ) => boolean | void, + source: U + ): (object: T) => boolean; + isMatchWith( + customizer: ( + objValue: any, + srcValue: any, + key: number | string, + object: T, + source: U + ) => boolean | void, + source: U, + object: T + ): boolean; + isNaN(value: any): boolean; + isNative(value: any): boolean; + isNil(value: any): boolean; + isNull(value: any): boolean; + isNumber(value: any): boolean; + isObject(value: any): boolean; + isObjectLike(value: any): boolean; + isPlainObject(value: any): boolean; + isRegExp(value: any): boolean; + isSafeInteger(value: any): boolean; + isSet(value: any): boolean; + isString(value: string): true; + isString(value: any): false; + isSymbol(value: any): boolean; + isTypedArray(value: any): boolean; + isUndefined(value: any): boolean; + isWeakMap(value: any): boolean; + isWeakSet(value: any): boolean; + lt(value: any): (other: any) => boolean; + lt(value: any, other: any): boolean; + lte(value: any): (other: any) => boolean; + lte(value: any, other: any): boolean; + toArray(value: any): Array; + toFinite(value: any): number; + toInteger(value: any): number; + toLength(value: any): number; + toNumber(value: any): number; + toPlainObject(value: any): Object; + toSafeInteger(value: any): number; + toString(value: any): string; + + // Math + add(augend: number): (addend: number) => number; + add(augend: number, addend: number): number; + ceil(number: number): number; + divide(dividend: number): (divisor: number) => number; + divide(dividend: number, divisor: number): number; + floor(number: number): number; + max(array: $ReadOnlyArray): T; + maxBy(iteratee: Iteratee): (array: $ReadOnlyArray) => T; + maxBy(iteratee: Iteratee, array: $ReadOnlyArray): T; + mean(array: $ReadOnlyArray<*>): number; + meanBy(iteratee: Iteratee): (array: $ReadOnlyArray) => number; + meanBy(iteratee: Iteratee, array: $ReadOnlyArray): number; + min(array: $ReadOnlyArray): T; + minBy(iteratee: Iteratee): (array: $ReadOnlyArray) => T; + minBy(iteratee: Iteratee, array: $ReadOnlyArray): T; + multiply(multiplier: number): (multiplicand: number) => number; + multiply(multiplier: number, multiplicand: number): number; + round(number: number): number; + subtract(minuend: number): (subtrahend: number) => number; + subtract(minuend: number, subtrahend: number): number; + sum(array: $ReadOnlyArray<*>): number; + sumBy(iteratee: Iteratee): (array: $ReadOnlyArray) => number; + sumBy(iteratee: Iteratee, array: $ReadOnlyArray): number; + + // number + clamp( + lower: number + ): ((upper: number) => (number: number) => number) & + ((upper: number, number: number) => number); + clamp(lower: number, upper: number): (number: number) => number; + clamp(lower: number, upper: number, number: number): number; + inRange( + start: number + ): ((end: number) => (number: number) => boolean) & + ((end: number, number: number) => boolean); + inRange(start: number, end: number): (number: number) => boolean; + inRange(start: number, end: number, number: number): boolean; + random(lower: number): (upper: number) => number; + random(lower: number, upper: number): number; + + // Object + assign(object: Object): (source: Object) => Object; + assign(object: Object, source: Object): Object; + assignAll(objects: Array): Object; + assignInAll(objects: Array): Object; + extendAll(objects: Array): Object; + assignIn(a: A): (b: B) => A & B; + assignIn(a: A, b: B): A & B; + assignInWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): ((object: T) => (s1: A) => Object) & ((object: T, s1: A) => Object); + assignInWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T + ): (s1: A) => Object; + assignInWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T, + s1: A + ): Object; + assignWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): ((object: T) => (s1: A) => Object) & ((object: T, s1: A) => Object); + assignWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T + ): (s1: A) => Object; + assignWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T, + s1: A + ): Object; + assignInAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void + ): (objects: Array) => Object; + assignInAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void, + objects: Array + ): Object; + extendAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void + ): (objects: Array) => Object; + extendAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void, + objects: Array + ): Object; + assignAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void + ): (objects: Array) => Object; + assignAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void, + objects: Array + ): Object; + at(paths: $ReadOnlyArray): (object: Object) => Array; + at(paths: $ReadOnlyArray, object: Object): Array; + props(paths: $ReadOnlyArray): (object: Object) => Array; + props(paths: $ReadOnlyArray, object: Object): Array; + paths(paths: $ReadOnlyArray): (object: Object) => Array; + paths(paths: $ReadOnlyArray, object: Object): Array; + create(prototype: T): T; + defaults(source: Object): (object: Object) => Object; + defaults(source: Object, object: Object): Object; + defaultsAll(objects: Array): Object; + defaultsDeep(source: Object): (object: Object) => Object; + defaultsDeep(source: Object, object: Object): Object; + defaultsDeepAll(objects: Array): Object; + // alias for _.toPairs + entries(object: Object): Array<[string, any]>; + // alias for _.toPairsIn + entriesIn(object: Object): Array<[string, any]>; + // alias for _.assignIn + extend(a: A): (b: B) => A & B; + extend(a: A, b: B): A & B; + // alias for _.assignInWith + extendWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void + ): ((object: T) => (s1: A) => Object) & ((object: T, s1: A) => Object); + extendWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T + ): (s1: A) => Object; + extendWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A + ) => any | void, + object: T, + s1: A + ): Object; + findKey>( + predicate: OPredicate + ): (object: T) => string | void; + findKey>( + predicate: OPredicate, + object: T + ): string | void; + findLastKey>( + predicate: OPredicate + ): (object: T) => string | void; + findLastKey>( + predicate: OPredicate, + object: T + ): string | void; + forIn(iteratee: OIteratee<*>): (object: Object) => Object; + forIn(iteratee: OIteratee<*>, object: Object): Object; + forInRight(iteratee: OIteratee<*>): (object: Object) => Object; + forInRight(iteratee: OIteratee<*>, object: Object): Object; + forOwn(iteratee: OIteratee<*>): (object: Object) => Object; + forOwn(iteratee: OIteratee<*>, object: Object): Object; + forOwnRight(iteratee: OIteratee<*>): (object: Object) => Object; + forOwnRight(iteratee: OIteratee<*>, object: Object): Object; + functions(object: Object): Array; + functionsIn(object: Object): Array; + get( + path: Path + ): (object: Object | $ReadOnlyArray | void | null) => any; + get( + path: Path, + object: Object | $ReadOnlyArray | void | null + ): any; + prop(path: Path): (object: Object | $ReadOnlyArray) => any; + prop(path: Path, object: Object | $ReadOnlyArray): any; + path(path: Path): (object: Object | $ReadOnlyArray) => any; + path(path: Path, object: Object | $ReadOnlyArray): any; + getOr( + defaultValue: any + ): (( + path: Path + ) => (object: Object | $ReadOnlyArray) => any) & + (( + path: Path, + object: Object | $ReadOnlyArray | void | null + ) => any); + getOr( + defaultValue: any, + path: Path + ): (object: Object | $ReadOnlyArray | void | null) => any; + getOr( + defaultValue: any, + path: Path, + object: Object | $ReadOnlyArray | void | null + ): any; + propOr( + defaultValue: any + ): (( + path: Path + ) => (object: Object | $ReadOnlyArray) => any) & + ((path: Path, object: Object | $ReadOnlyArray) => any); + propOr( + defaultValue: any, + path: Path + ): (object: Object | $ReadOnlyArray) => any; + propOr( + defaultValue: any, + path: Path, + object: Object | $ReadOnlyArray + ): any; + pathOr( + defaultValue: any + ): (( + path: Path + ) => (object: Object | $ReadOnlyArray) => any) & + ((path: Path, object: Object | $ReadOnlyArray) => any); + pathOr( + defaultValue: any, + path: Path + ): (object: Object | $ReadOnlyArray) => any; + pathOr( + defaultValue: any, + path: Path, + object: Object | $ReadOnlyArray + ): any; + has(path: Path): (object: Object) => boolean; + has(path: Path, object: Object): boolean; + hasIn(path: Path): (object: Object) => boolean; + hasIn(path: Path, object: Object): boolean; + invert(object: Object): Object; + invertObj(object: Object): Object; + invertBy(iteratee: Function): (object: Object) => Object; + invertBy(iteratee: Function, object: Object): Object; + invoke(path: Path): (object: Object) => any; + invoke(path: Path, object: Object): any; + invokeArgs( + path: Path + ): ((object: Object) => (args: Array) => any) & + ((object: Object, args: Array) => any); + invokeArgs( + path: Path, + object: Object + ): (args: Array) => any; + invokeArgs( + path: Path, + object: Object, + args: Array + ): any; + keys(object: ReadOnlyIndexerObject): Array; + keys(object: Object): Array; + keysIn(object: Object): Array; + mapKeys(iteratee: OIteratee<*>): (object: Object) => Object; + mapKeys(iteratee: OIteratee<*>, object: Object): Object; + mapValues(iteratee: OIteratee<*>): (object: Object) => Object; + mapValues(iteratee: OIteratee<*>, object: Object): Object; + merge(object: Object): (source: Object) => Object; + merge(object: Object, source: Object): Object; + mergeAll(objects: $ReadOnlyArray): Object; + mergeWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void + ): ((object: T) => (s1: A) => Object) & ((object: T, s1: A) => Object); + mergeWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void, + object: T + ): (s1: A) => Object; + mergeWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: T, + source: A | B + ) => any | void, + object: T, + s1: A + ): Object; + mergeAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void + ): (objects: $ReadOnlyArray) => Object; + mergeAllWith( + customizer: ( + objValue: any, + srcValue: any, + key: string, + object: Object, + source: Object + ) => any | void, + objects: $ReadOnlyArray + ): Object; + omit(props: $ReadOnlyArray): (object: Object) => Object; + omit(props: $ReadOnlyArray, object: Object): Object; + omitAll(props: $ReadOnlyArray): (object: Object) => Object; + omitAll(props: $ReadOnlyArray, object: Object): Object; + omitBy>( + predicate: OPredicate + ): (object: T) => Object; + omitBy>(predicate: OPredicate, object: T): Object; + pick(...props: $ReadOnlyArray): Object; + pick(props: $ReadOnlyArray, object: Object): Object; + pick(...props: $ReadOnlyArray): (object: Object) => Object; + pick(props: $ReadOnlyArray): (object: Object) => Object; + pickAll(props: $ReadOnlyArray): (object: Object) => Object; + pickAll(props: $ReadOnlyArray, object: Object): Object; + pickBy>( + predicate: OPredicate + ): (object: T) => Object; + pickBy>(predicate: OPredicate, object: T): Object; + result(path: Path): (object: Object) => any; + result(path: Path, object: Object): any; + set( + path: Path + ): ((value: any) => (object: Object) => Object) & + ((value: any, object: Object) => Object); + set(path: Path, value: any): (object: Object) => Object; + set(path: Path, value: any, object: Object): Object; + assoc( + path: Path + ): ((value: any) => (object: Object) => Object) & + ((value: any, object: Object) => Object); + assoc(path: Path, value: any): (object: Object) => Object; + assoc(path: Path, value: any, object: Object): Object; + assocPath( + path: Path + ): ((value: any) => (object: Object) => Object) & + ((value: any, object: Object) => Object); + assocPath( + path: Path, + value: any + ): (object: Object) => Object; + assocPath(path: Path, value: any, object: Object): Object; + setWith( + customizer: (nsValue: any, key: string, nsObject: T) => any + ): (( + path: Path + ) => ((value: any) => (object: T) => Object) & + ((value: any, object: T) => Object)) & + ((path: Path, value: any) => (object: T) => Object) & + ((path: Path, value: any, object: T) => Object); + setWith( + customizer: (nsValue: any, key: string, nsObject: T) => any, + path: Path + ): ((value: any) => (object: T) => Object) & + ((value: any, object: T) => Object); + setWith( + customizer: (nsValue: any, key: string, nsObject: T) => any, + path: Path, + value: any + ): (object: T) => Object; + setWith( + customizer: (nsValue: any, key: string, nsObject: T) => any, + path: Path, + value: any, + object: T + ): Object; + toPairs(object: Object | $ReadOnlyArray<*>): Array<[string, any]>; + toPairsIn(object: Object): Array<[string, any]>; + transform( + iteratee: OIteratee<*> + ): (( + accumulator: any + ) => (collection: Object | $ReadOnlyArray) => any) & + ((accumulator: any, collection: Object | $ReadOnlyArray) => any); + transform( + iteratee: OIteratee<*>, + accumulator: any + ): (collection: Object | $ReadOnlyArray) => any; + transform( + iteratee: OIteratee<*>, + accumulator: any, + collection: Object | $ReadOnlyArray + ): any; + unset(path: Path): (object: Object) => Object; + unset(path: Path, object: Object): Object; + dissoc(path: Path): (object: Object) => Object; + dissoc(path: Path, object: Object): Object; + dissocPath(path: Path): (object: Object) => Object; + dissocPath(path: Path, object: Object): Object; + update( + path: Path + ): ((updater: Function) => (object: Object) => Object) & + ((updater: Function, object: Object) => Object); + update( + path: Path, + updater: Function + ): (object: Object) => Object; + update(path: Path, updater: Function, object: Object): Object; + updateWith( + customizer: Function + ): (( + path: Path + ) => ((updater: Function) => (object: Object) => Object) & + ((updater: Function, object: Object) => Object)) & + (( + path: Path, + updater: Function + ) => (object: Object) => Object) & + ((path: Path, updater: Function, object: Object) => Object); + updateWith( + customizer: Function, + path: Path + ): ((updater: Function) => (object: Object) => Object) & + ((updater: Function, object: Object) => Object); + updateWith( + customizer: Function, + path: Path, + updater: Function + ): (object: Object) => Object; + updateWith( + customizer: Function, + path: Path, + updater: Function, + object: Object + ): Object; + values(object: Object): Array; + valuesIn(object: Object): Array; + + tap(interceptor: (value: T) => any): (value: T) => T; + tap(interceptor: (value: T) => any, value: T): T; + thru(interceptor: (value: T1) => T2): (value: T1) => T2; + thru(interceptor: (value: T1) => T2, value: T1): T2; + + // String + camelCase(string: string): string; + capitalize(string: string): string; + deburr(string: string): string; + endsWith(target: string): (string: string) => boolean; + endsWith(target: string, string: string): boolean; + escape(string: string): string; + escapeRegExp(string: string): string; + kebabCase(string: string): string; + lowerCase(string: string): string; + lowerFirst(string: string): string; + pad(length: number): (string: string) => string; + pad(length: number, string: string): string; + padChars( + chars: string + ): ((length: number) => (string: string) => string) & + ((length: number, string: string) => string); + padChars(chars: string, length: number): (string: string) => string; + padChars(chars: string, length: number, string: string): string; + padEnd(length: number): (string: string) => string; + padEnd(length: number, string: string): string; + padCharsEnd( + chars: string + ): ((length: number) => (string: string) => string) & + ((length: number, string: string) => string); + padCharsEnd(chars: string, length: number): (string: string) => string; + padCharsEnd(chars: string, length: number, string: string): string; + padStart(length: number): (string: string) => string; + padStart(length: number, string: string): string; + padCharsStart( + chars: string + ): ((length: number) => (string: string) => string) & + ((length: number, string: string) => string); + padCharsStart(chars: string, length: number): (string: string) => string; + padCharsStart(chars: string, length: number, string: string): string; + parseInt(radix: number): (string: string) => number; + parseInt(radix: number, string: string): number; + repeat(n: number): (string: string) => string; + repeat(n: number, string: string): string; + replace( + pattern: RegExp | string + ): (( + replacement: ((string: string) => string) | string + ) => (string: string) => string) & + (( + replacement: ((string: string) => string) | string, + string: string + ) => string); + replace( + pattern: RegExp | string, + replacement: ((string: string) => string) | string + ): (string: string) => string; + replace( + pattern: RegExp | string, + replacement: ((string: string) => string) | string, + string: string + ): string; + snakeCase(string: string): string; + split(separator: RegExp | string): (string: string) => Array; + split(separator: RegExp | string, string: string): Array; + startCase(string: string): string; + startsWith(target: string): (string: string) => boolean; + startsWith(target: string, string: string): boolean; + template(string: string): Function; + toLower(string: string): string; + toUpper(string: string): string; + trim(string: string): string; + trimChars(chars: string): (string: string) => string; + trimChars(chars: string, string: string): string; + trimEnd(string: string): string; + trimCharsEnd(chars: string): (string: string) => string; + trimCharsEnd(chars: string, string: string): string; + trimStart(string: string): string; + trimCharsStart(chars: string): (string: string) => string; + trimCharsStart(chars: string, string: string): string; + truncate(options: TruncateOptions): (string: string) => string; + truncate(options: TruncateOptions, string: string): string; + unescape(string: string): string; + upperCase(string: string): string; + upperFirst(string: string): string; + words(string: string): Array; + + // Util + attempt(func: Function): any; + bindAll(methodNames: $ReadOnlyArray): (object: Object) => Object; + bindAll(methodNames: $ReadOnlyArray, object: Object): Object; + cond(pairs: NestedArray): Function; + constant(value: T): () => T; + always(value: T): () => T; + defaultTo(defaultValue: T2): (value: T1) => T2; + defaultTo(defaultValue: T2, value: T1): T2; + defaultTo( + defaultValue: T2 + ): (value: T1) => T1; + defaultTo( + defaultValue: T2, + value: T1 + ): T1; + // NaN is a number instead of its own type, otherwise it would behave like null/void + defaultTo(defaultValue: T2): (value: T1) => T1 | T2; + defaultTo(defaultValue: T2, value: T1): T1 | T2; + flow: $ComposeReverse & ((funcs: $ReadOnlyArray) => Function); + pipe: $ComposeReverse & ((funcs: $ReadOnlyArray) => Function); + flowRight: $Compose & ((funcs: $ReadOnlyArray) => Function); + compose: $Compose & ((funcs: $ReadOnlyArray) => Function); + compose(funcs: $ReadOnlyArray): Function; + identity(value: T): T; + iteratee(func: any): Function; + matches(source: Object): (object: Object) => boolean; + matches(source: Object, object: Object): boolean; + matchesProperty(path: Path): (srcValue: any) => Function; + matchesProperty(path: Path, srcValue: any): Function; + propEq(path: Path): (srcValue: any) => Function; + propEq(path: Path, srcValue: any): Function; + pathEq(path: Path): (srcValue: any) => Function; + pathEq(path: Path, srcValue: any): Function; + method(path: Path): Function; + methodOf(object: Object): Function; + mixin( + object: T + ): ((source: Object) => (options: { chain: boolean, ... }) => T) & + ((source: Object, options: { chain: boolean, ... }) => T); + mixin( + object: T, + source: Object + ): (options: { chain: boolean, ... }) => T; + mixin( + object: T, + source: Object, + options: { chain: boolean, ... } + ): T; + noConflict(): Lodash; + noop(...args: $ReadOnlyArray): void; + nthArg(n: number): Function; + over(iteratees: $ReadOnlyArray): Function; + juxt(iteratees: $ReadOnlyArray): Function; + overEvery(predicates: $ReadOnlyArray): Function; + allPass(predicates: $ReadOnlyArray): Function; + overSome(predicates: $ReadOnlyArray): Function; + anyPass(predicates: $ReadOnlyArray): Function; + property( + path: Path + ): (object: Object | $ReadOnlyArray) => any; + property(path: Path, object: Object | $ReadOnlyArray): any; + propertyOf(object: Object): (path: Path) => Function; + propertyOf(object: Object, path: Path): Function; + range(start: number): (end: number) => Array; + range(start: number, end: number): Array; + rangeStep( + step: number + ): ((start: number) => (end: number) => Array) & + ((start: number, end: number) => Array); + rangeStep(step: number, start: number): (end: number) => Array; + rangeStep(step: number, start: number, end: number): Array; + rangeRight(start: number): (end: number) => Array; + rangeRight(start: number, end: number): Array; + rangeStepRight( + step: number + ): ((start: number) => (end: number) => Array) & + ((start: number, end: number) => Array); + rangeStepRight(step: number, start: number): (end: number) => Array; + rangeStepRight(step: number, start: number, end: number): Array; + runInContext(context: Object): Function; + + stubArray(): Array<*>; + stubFalse(): false; + F(): false; + stubObject(): {...}; + stubString(): ""; + stubTrue(): true; + T(): true; + times(iteratee: (i: number) => T): (n: number) => Array; + times(iteratee: (i: number) => T, n: number): Array; + toPath(value: any): Array; + uniqueId(prefix: string): string; + + __: any; + placeholder: any; + + convert(options: { + cap?: boolean, + curry?: boolean, + fixed?: boolean, + immutable?: boolean, + rearg?: boolean, + ... + }): void; + + // Properties + VERSION: string; + templateSettings: TemplateSettings; + } + + declare module.exports: Lodash; +} + +declare module "lodash/chunk" { + declare module.exports: $PropertyType<$Exports<"lodash">, "chunk">; +} + +declare module "lodash/compact" { + declare module.exports: $PropertyType<$Exports<"lodash">, "compact">; +} + +declare module "lodash/concat" { + declare module.exports: $PropertyType<$Exports<"lodash">, "concat">; +} + +declare module "lodash/difference" { + declare module.exports: $PropertyType<$Exports<"lodash">, "difference">; +} + +declare module "lodash/differenceBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "differenceBy">; +} + +declare module "lodash/differenceWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "differenceWith">; +} + +declare module "lodash/drop" { + declare module.exports: $PropertyType<$Exports<"lodash">, "drop">; +} + +declare module "lodash/dropRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "dropRight">; +} + +declare module "lodash/dropRightWhile" { + declare module.exports: $PropertyType<$Exports<"lodash">, "dropRightWhile">; +} + +declare module "lodash/dropWhile" { + declare module.exports: $PropertyType<$Exports<"lodash">, "dropWhile">; +} + +declare module "lodash/fill" { + declare module.exports: $PropertyType<$Exports<"lodash">, "fill">; +} + +declare module "lodash/findIndex" { + declare module.exports: $PropertyType<$Exports<"lodash">, "findIndex">; +} + +declare module "lodash/findLastIndex" { + declare module.exports: $PropertyType<$Exports<"lodash">, "findLastIndex">; +} + +declare module "lodash/first" { + declare module.exports: $PropertyType<$Exports<"lodash">, "first">; +} + +declare module "lodash/flatten" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flatten">; +} + +declare module "lodash/flattenDeep" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flattenDeep">; +} + +declare module "lodash/flattenDepth" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flattenDepth">; +} + +declare module "lodash/fromPairs" { + declare module.exports: $PropertyType<$Exports<"lodash">, "fromPairs">; +} + +declare module "lodash/head" { + declare module.exports: $PropertyType<$Exports<"lodash">, "head">; +} + +declare module "lodash/indexOf" { + declare module.exports: $PropertyType<$Exports<"lodash">, "indexOf">; +} + +declare module "lodash/initial" { + declare module.exports: $PropertyType<$Exports<"lodash">, "initial">; +} + +declare module "lodash/intersection" { + declare module.exports: $PropertyType<$Exports<"lodash">, "intersection">; +} + +declare module "lodash/intersectionBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "intersectionBy">; +} + +declare module "lodash/intersectionWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "intersectionWith">; +} + +declare module "lodash/join" { + declare module.exports: $PropertyType<$Exports<"lodash">, "join">; +} + +declare module "lodash/last" { + declare module.exports: $PropertyType<$Exports<"lodash">, "last">; +} + +declare module "lodash/lastIndexOf" { + declare module.exports: $PropertyType<$Exports<"lodash">, "lastIndexOf">; +} + +declare module "lodash/nth" { + declare module.exports: $PropertyType<$Exports<"lodash">, "nth">; +} + +declare module "lodash/pull" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pull">; +} + +declare module "lodash/pullAll" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pullAll">; +} + +declare module "lodash/pullAllBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pullAllBy">; +} + +declare module "lodash/pullAllWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pullAllWith">; +} + +declare module "lodash/pullAt" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pullAt">; +} + +declare module "lodash/remove" { + declare module.exports: $PropertyType<$Exports<"lodash">, "remove">; +} + +declare module "lodash/reverse" { + declare module.exports: $PropertyType<$Exports<"lodash">, "reverse">; +} + +declare module "lodash/slice" { + declare module.exports: $PropertyType<$Exports<"lodash">, "slice">; +} + +declare module "lodash/sortedIndex" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedIndex">; +} + +declare module "lodash/sortedIndexBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedIndexBy">; +} + +declare module "lodash/sortedIndexOf" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedIndexOf">; +} + +declare module "lodash/sortedLastIndex" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedLastIndex">; +} + +declare module "lodash/sortedLastIndexBy" { + declare module.exports: $PropertyType< + $Exports<"lodash">, + "sortedLastIndexBy" + >; +} + +declare module "lodash/sortedLastIndexOf" { + declare module.exports: $PropertyType< + $Exports<"lodash">, + "sortedLastIndexOf" + >; +} + +declare module "lodash/sortedUniq" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedUniq">; +} + +declare module "lodash/sortedUniqBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortedUniqBy">; +} + +declare module "lodash/tail" { + declare module.exports: $PropertyType<$Exports<"lodash">, "tail">; +} + +declare module "lodash/take" { + declare module.exports: $PropertyType<$Exports<"lodash">, "take">; +} + +declare module "lodash/takeRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "takeRight">; +} + +declare module "lodash/takeRightWhile" { + declare module.exports: $PropertyType<$Exports<"lodash">, "takeRightWhile">; +} + +declare module "lodash/takeWhile" { + declare module.exports: $PropertyType<$Exports<"lodash">, "takeWhile">; +} + +declare module "lodash/union" { + declare module.exports: $PropertyType<$Exports<"lodash">, "union">; +} + +declare module "lodash/unionBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unionBy">; +} + +declare module "lodash/unionWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unionWith">; +} + +declare module "lodash/uniq" { + declare module.exports: $PropertyType<$Exports<"lodash">, "uniq">; +} + +declare module "lodash/uniqBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "uniqBy">; +} + +declare module "lodash/uniqWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "uniqWith">; +} + +declare module "lodash/unzip" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unzip">; +} + +declare module "lodash/unzipWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unzipWith">; +} + +declare module "lodash/without" { + declare module.exports: $PropertyType<$Exports<"lodash">, "without">; +} + +declare module "lodash/xor" { + declare module.exports: $PropertyType<$Exports<"lodash">, "xor">; +} + +declare module "lodash/xorBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "xorBy">; +} + +declare module "lodash/xorWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "xorWith">; +} + +declare module "lodash/zip" { + declare module.exports: $PropertyType<$Exports<"lodash">, "zip">; +} + +declare module "lodash/zipObject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "zipObject">; +} + +declare module "lodash/zipObjectDeep" { + declare module.exports: $PropertyType<$Exports<"lodash">, "zipObjectDeep">; +} + +declare module "lodash/zipWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "zipWith">; +} + +declare module "lodash/countBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "countBy">; +} + +declare module "lodash/each" { + declare module.exports: $PropertyType<$Exports<"lodash">, "each">; +} + +declare module "lodash/eachRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "eachRight">; +} + +declare module "lodash/every" { + declare module.exports: $PropertyType<$Exports<"lodash">, "every">; +} + +declare module "lodash/filter" { + declare module.exports: $PropertyType<$Exports<"lodash">, "filter">; +} + +declare module "lodash/find" { + declare module.exports: $PropertyType<$Exports<"lodash">, "find">; +} + +declare module "lodash/findLast" { + declare module.exports: $PropertyType<$Exports<"lodash">, "findLast">; +} + +declare module "lodash/flatMap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flatMap">; +} + +declare module "lodash/flatMapDeep" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flatMapDeep">; +} + +declare module "lodash/flatMapDepth" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flatMapDepth">; +} + +declare module "lodash/forEach" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forEach">; +} + +declare module "lodash/forEachRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forEachRight">; +} + +declare module "lodash/groupBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "groupBy">; +} + +declare module "lodash/includes" { + declare module.exports: $PropertyType<$Exports<"lodash">, "includes">; +} + +declare module "lodash/invokeMap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "invokeMap">; +} + +declare module "lodash/keyBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "keyBy">; +} + +declare module "lodash/map" { + declare module.exports: $PropertyType<$Exports<"lodash">, "map">; +} + +declare module "lodash/orderBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "orderBy">; +} + +declare module "lodash/partition" { + declare module.exports: $PropertyType<$Exports<"lodash">, "partition">; +} + +declare module "lodash/reduce" { + declare module.exports: $PropertyType<$Exports<"lodash">, "reduce">; +} + +declare module "lodash/reduceRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "reduceRight">; +} + +declare module "lodash/reject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "reject">; +} + +declare module "lodash/sample" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sample">; +} + +declare module "lodash/sampleSize" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sampleSize">; +} + +declare module "lodash/shuffle" { + declare module.exports: $PropertyType<$Exports<"lodash">, "shuffle">; +} + +declare module "lodash/size" { + declare module.exports: $PropertyType<$Exports<"lodash">, "size">; +} + +declare module "lodash/some" { + declare module.exports: $PropertyType<$Exports<"lodash">, "some">; +} + +declare module "lodash/sortBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sortBy">; +} + +declare module "lodash/now" { + declare module.exports: $PropertyType<$Exports<"lodash">, "now">; +} + +declare module "lodash/after" { + declare module.exports: $PropertyType<$Exports<"lodash">, "after">; +} + +declare module "lodash/ary" { + declare module.exports: $PropertyType<$Exports<"lodash">, "ary">; +} + +declare module "lodash/before" { + declare module.exports: $PropertyType<$Exports<"lodash">, "before">; +} + +declare module "lodash/bind" { + declare module.exports: $PropertyType<$Exports<"lodash">, "bind">; +} + +declare module "lodash/bindKey" { + declare module.exports: $PropertyType<$Exports<"lodash">, "bindKey">; +} + +declare module "lodash/curry" { + declare module.exports: $PropertyType<$Exports<"lodash">, "curry">; +} + +declare module "lodash/curryRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "curryRight">; +} + +declare module "lodash/debounce" { + declare module.exports: $PropertyType<$Exports<"lodash">, "debounce">; +} + +declare module "lodash/defer" { + declare module.exports: $PropertyType<$Exports<"lodash">, "defer">; +} + +declare module "lodash/delay" { + declare module.exports: $PropertyType<$Exports<"lodash">, "delay">; +} + +declare module "lodash/flip" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flip">; +} + +declare module "lodash/memoize" { + declare module.exports: $PropertyType<$Exports<"lodash">, "memoize">; +} + +declare module "lodash/negate" { + declare module.exports: $PropertyType<$Exports<"lodash">, "negate">; +} + +declare module "lodash/once" { + declare module.exports: $PropertyType<$Exports<"lodash">, "once">; +} + +declare module "lodash/overArgs" { + declare module.exports: $PropertyType<$Exports<"lodash">, "overArgs">; +} + +declare module "lodash/partial" { + declare module.exports: $PropertyType<$Exports<"lodash">, "partial">; +} + +declare module "lodash/partialRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "partialRight">; +} + +declare module "lodash/rearg" { + declare module.exports: $PropertyType<$Exports<"lodash">, "rearg">; +} + +declare module "lodash/rest" { + declare module.exports: $PropertyType<$Exports<"lodash">, "rest">; +} + +declare module "lodash/spread" { + declare module.exports: $PropertyType<$Exports<"lodash">, "spread">; +} + +declare module "lodash/throttle" { + declare module.exports: $PropertyType<$Exports<"lodash">, "throttle">; +} + +declare module "lodash/unary" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unary">; +} + +declare module "lodash/wrap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "wrap">; +} + +declare module "lodash/castArray" { + declare module.exports: $PropertyType<$Exports<"lodash">, "castArray">; +} + +declare module "lodash/clone" { + declare module.exports: $PropertyType<$Exports<"lodash">, "clone">; +} + +declare module "lodash/cloneDeep" { + declare module.exports: $PropertyType<$Exports<"lodash">, "cloneDeep">; +} + +declare module "lodash/cloneDeepWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "cloneDeepWith">; +} + +declare module "lodash/cloneWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "cloneWith">; +} + +declare module "lodash/conformsTo" { + declare module.exports: $PropertyType<$Exports<"lodash">, "conformsTo">; +} + +declare module "lodash/eq" { + declare module.exports: $PropertyType<$Exports<"lodash">, "eq">; +} + +declare module "lodash/gt" { + declare module.exports: $PropertyType<$Exports<"lodash">, "gt">; +} + +declare module "lodash/gte" { + declare module.exports: $PropertyType<$Exports<"lodash">, "gte">; +} + +declare module "lodash/isArguments" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isArguments">; +} + +declare module "lodash/isArray" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isArray">; +} + +declare module "lodash/isArrayBuffer" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isArrayBuffer">; +} + +declare module "lodash/isArrayLike" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isArrayLike">; +} + +declare module "lodash/isArrayLikeObject" { + declare module.exports: $PropertyType< + $Exports<"lodash">, + "isArrayLikeObject" + >; +} + +declare module "lodash/isBoolean" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isBoolean">; +} + +declare module "lodash/isBuffer" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isBuffer">; +} + +declare module "lodash/isDate" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isDate">; +} + +declare module "lodash/isElement" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isElement">; +} + +declare module "lodash/isEmpty" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isEmpty">; +} + +declare module "lodash/isEqual" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isEqual">; +} + +declare module "lodash/isEqualWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isEqualWith">; +} + +declare module "lodash/isError" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isError">; +} + +declare module "lodash/isFinite" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isFinite">; +} + +declare module "lodash/isFunction" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isFunction">; +} + +declare module "lodash/isInteger" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isInteger">; +} + +declare module "lodash/isLength" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isLength">; +} + +declare module "lodash/isMap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isMap">; +} + +declare module "lodash/isMatch" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isMatch">; +} + +declare module "lodash/isMatchWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isMatchWith">; +} + +declare module "lodash/isNaN" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isNaN">; +} + +declare module "lodash/isNative" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isNative">; +} + +declare module "lodash/isNil" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isNil">; +} + +declare module "lodash/isNull" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isNull">; +} + +declare module "lodash/isNumber" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isNumber">; +} + +declare module "lodash/isObject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isObject">; +} + +declare module "lodash/isObjectLike" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isObjectLike">; +} + +declare module "lodash/isPlainObject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isPlainObject">; +} + +declare module "lodash/isRegExp" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isRegExp">; +} + +declare module "lodash/isSafeInteger" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isSafeInteger">; +} + +declare module "lodash/isSet" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isSet">; +} + +declare module "lodash/isString" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isString">; +} + +declare module "lodash/isSymbol" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isSymbol">; +} + +declare module "lodash/isTypedArray" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isTypedArray">; +} + +declare module "lodash/isUndefined" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isUndefined">; +} + +declare module "lodash/isWeakMap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isWeakMap">; +} + +declare module "lodash/isWeakSet" { + declare module.exports: $PropertyType<$Exports<"lodash">, "isWeakSet">; +} + +declare module "lodash/lt" { + declare module.exports: $PropertyType<$Exports<"lodash">, "lt">; +} + +declare module "lodash/lte" { + declare module.exports: $PropertyType<$Exports<"lodash">, "lte">; +} + +declare module "lodash/toArray" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toArray">; +} + +declare module "lodash/toFinite" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toFinite">; +} + +declare module "lodash/toInteger" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toInteger">; +} + +declare module "lodash/toLength" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toLength">; +} + +declare module "lodash/toNumber" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toNumber">; +} + +declare module "lodash/toPlainObject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toPlainObject">; +} + +declare module "lodash/toSafeInteger" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toSafeInteger">; +} + +declare module "lodash/toString" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toString">; +} + +declare module "lodash/add" { + declare module.exports: $PropertyType<$Exports<"lodash">, "add">; +} + +declare module "lodash/ceil" { + declare module.exports: $PropertyType<$Exports<"lodash">, "ceil">; +} + +declare module "lodash/divide" { + declare module.exports: $PropertyType<$Exports<"lodash">, "divide">; +} + +declare module "lodash/floor" { + declare module.exports: $PropertyType<$Exports<"lodash">, "floor">; +} + +declare module "lodash/max" { + declare module.exports: $PropertyType<$Exports<"lodash">, "max">; +} + +declare module "lodash/maxBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "maxBy">; +} + +declare module "lodash/mean" { + declare module.exports: $PropertyType<$Exports<"lodash">, "mean">; +} + +declare module "lodash/meanBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "meanBy">; +} + +declare module "lodash/min" { + declare module.exports: $PropertyType<$Exports<"lodash">, "min">; +} + +declare module "lodash/minBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "minBy">; +} + +declare module "lodash/multiply" { + declare module.exports: $PropertyType<$Exports<"lodash">, "multiply">; +} + +declare module "lodash/round" { + declare module.exports: $PropertyType<$Exports<"lodash">, "round">; +} + +declare module "lodash/subtract" { + declare module.exports: $PropertyType<$Exports<"lodash">, "subtract">; +} + +declare module "lodash/sum" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sum">; +} + +declare module "lodash/sumBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "sumBy">; +} + +declare module "lodash/clamp" { + declare module.exports: $PropertyType<$Exports<"lodash">, "clamp">; +} + +declare module "lodash/inRange" { + declare module.exports: $PropertyType<$Exports<"lodash">, "inRange">; +} + +declare module "lodash/random" { + declare module.exports: $PropertyType<$Exports<"lodash">, "random">; +} + +declare module "lodash/assign" { + declare module.exports: $PropertyType<$Exports<"lodash">, "assign">; +} + +declare module "lodash/assignIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "assignIn">; +} + +declare module "lodash/assignInWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "assignInWith">; +} + +declare module "lodash/assignWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "assignWith">; +} + +declare module "lodash/at" { + declare module.exports: $PropertyType<$Exports<"lodash">, "at">; +} + +declare module "lodash/create" { + declare module.exports: $PropertyType<$Exports<"lodash">, "create">; +} + +declare module "lodash/defaults" { + declare module.exports: $PropertyType<$Exports<"lodash">, "defaults">; +} + +declare module "lodash/defaultsDeep" { + declare module.exports: $PropertyType<$Exports<"lodash">, "defaultsDeep">; +} + +declare module "lodash/entries" { + declare module.exports: $PropertyType<$Exports<"lodash">, "entries">; +} + +declare module "lodash/entriesIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "entriesIn">; +} + +declare module "lodash/extend" { + declare module.exports: $PropertyType<$Exports<"lodash">, "extend">; +} + +declare module "lodash/extendWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "extendWith">; +} + +declare module "lodash/findKey" { + declare module.exports: $PropertyType<$Exports<"lodash">, "findKey">; +} + +declare module "lodash/findLastKey" { + declare module.exports: $PropertyType<$Exports<"lodash">, "findLastKey">; +} + +declare module "lodash/forIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forIn">; +} + +declare module "lodash/forInRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forInRight">; +} + +declare module "lodash/forOwn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forOwn">; +} + +declare module "lodash/forOwnRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "forOwnRight">; +} + +declare module "lodash/functions" { + declare module.exports: $PropertyType<$Exports<"lodash">, "functions">; +} + +declare module "lodash/functionsIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "functionsIn">; +} + +declare module "lodash/get" { + declare module.exports: $PropertyType<$Exports<"lodash">, "get">; +} + +declare module "lodash/has" { + declare module.exports: $PropertyType<$Exports<"lodash">, "has">; +} + +declare module "lodash/hasIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "hasIn">; +} + +declare module "lodash/invert" { + declare module.exports: $PropertyType<$Exports<"lodash">, "invert">; +} + +declare module "lodash/invertBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "invertBy">; +} + +declare module "lodash/invoke" { + declare module.exports: $PropertyType<$Exports<"lodash">, "invoke">; +} + +declare module "lodash/keys" { + declare module.exports: $PropertyType<$Exports<"lodash">, "keys">; +} + +declare module "lodash/keysIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "keysIn">; +} + +declare module "lodash/mapKeys" { + declare module.exports: $PropertyType<$Exports<"lodash">, "mapKeys">; +} + +declare module "lodash/mapValues" { + declare module.exports: $PropertyType<$Exports<"lodash">, "mapValues">; +} + +declare module "lodash/merge" { + declare module.exports: $PropertyType<$Exports<"lodash">, "merge">; +} + +declare module "lodash/mergeWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "mergeWith">; +} + +declare module "lodash/omit" { + declare module.exports: $PropertyType<$Exports<"lodash">, "omit">; +} + +declare module "lodash/omitBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "omitBy">; +} + +declare module "lodash/pick" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pick">; +} + +declare module "lodash/pickBy" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pickBy">; +} + +declare module "lodash/result" { + declare module.exports: $PropertyType<$Exports<"lodash">, "result">; +} + +declare module "lodash/set" { + declare module.exports: $PropertyType<$Exports<"lodash">, "set">; +} + +declare module "lodash/setWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "setWith">; +} + +declare module "lodash/toPairs" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toPairs">; +} + +declare module "lodash/toPairsIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toPairsIn">; +} + +declare module "lodash/transform" { + declare module.exports: $PropertyType<$Exports<"lodash">, "transform">; +} + +declare module "lodash/unset" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unset">; +} + +declare module "lodash/update" { + declare module.exports: $PropertyType<$Exports<"lodash">, "update">; +} + +declare module "lodash/updateWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "updateWith">; +} + +declare module "lodash/values" { + declare module.exports: $PropertyType<$Exports<"lodash">, "values">; +} + +declare module "lodash/valuesIn" { + declare module.exports: $PropertyType<$Exports<"lodash">, "valuesIn">; +} + +declare module "lodash/chain" { + declare module.exports: $PropertyType<$Exports<"lodash">, "chain">; +} + +declare module "lodash/tap" { + declare module.exports: $PropertyType<$Exports<"lodash">, "tap">; +} + +declare module "lodash/thru" { + declare module.exports: $PropertyType<$Exports<"lodash">, "thru">; +} + +declare module "lodash/camelCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "camelCase">; +} + +declare module "lodash/capitalize" { + declare module.exports: $PropertyType<$Exports<"lodash">, "capitalize">; +} + +declare module "lodash/deburr" { + declare module.exports: $PropertyType<$Exports<"lodash">, "deburr">; +} + +declare module "lodash/endsWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "endsWith">; +} + +declare module "lodash/escape" { + declare module.exports: $PropertyType<$Exports<"lodash">, "escape">; +} + +declare module "lodash/escapeRegExp" { + declare module.exports: $PropertyType<$Exports<"lodash">, "escapeRegExp">; +} + +declare module "lodash/kebabCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "kebabCase">; +} + +declare module "lodash/lowerCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "lowerCase">; +} + +declare module "lodash/lowerFirst" { + declare module.exports: $PropertyType<$Exports<"lodash">, "lowerFirst">; +} + +declare module "lodash/pad" { + declare module.exports: $PropertyType<$Exports<"lodash">, "pad">; +} + +declare module "lodash/padEnd" { + declare module.exports: $PropertyType<$Exports<"lodash">, "padEnd">; +} + +declare module "lodash/padStart" { + declare module.exports: $PropertyType<$Exports<"lodash">, "padStart">; +} + +declare module "lodash/parseInt" { + declare module.exports: $PropertyType<$Exports<"lodash">, "parseInt">; +} + +declare module "lodash/repeat" { + declare module.exports: $PropertyType<$Exports<"lodash">, "repeat">; +} + +declare module "lodash/replace" { + declare module.exports: $PropertyType<$Exports<"lodash">, "replace">; +} + +declare module "lodash/snakeCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "snakeCase">; +} + +declare module "lodash/split" { + declare module.exports: $PropertyType<$Exports<"lodash">, "split">; +} + +declare module "lodash/startCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "startCase">; +} + +declare module "lodash/startsWith" { + declare module.exports: $PropertyType<$Exports<"lodash">, "startsWith">; +} + +declare module "lodash/template" { + declare module.exports: $PropertyType<$Exports<"lodash">, "template">; +} + +declare module "lodash/toLower" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toLower">; +} + +declare module "lodash/toUpper" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toUpper">; +} + +declare module "lodash/trim" { + declare module.exports: $PropertyType<$Exports<"lodash">, "trim">; +} + +declare module "lodash/trimEnd" { + declare module.exports: $PropertyType<$Exports<"lodash">, "trimEnd">; +} + +declare module "lodash/trimStart" { + declare module.exports: $PropertyType<$Exports<"lodash">, "trimStart">; +} + +declare module "lodash/truncate" { + declare module.exports: $PropertyType<$Exports<"lodash">, "truncate">; +} + +declare module "lodash/unescape" { + declare module.exports: $PropertyType<$Exports<"lodash">, "unescape">; +} + +declare module "lodash/upperCase" { + declare module.exports: $PropertyType<$Exports<"lodash">, "upperCase">; +} + +declare module "lodash/upperFirst" { + declare module.exports: $PropertyType<$Exports<"lodash">, "upperFirst">; +} + +declare module "lodash/words" { + declare module.exports: $PropertyType<$Exports<"lodash">, "words">; +} + +declare module "lodash/attempt" { + declare module.exports: $PropertyType<$Exports<"lodash">, "attempt">; +} + +declare module "lodash/bindAll" { + declare module.exports: $PropertyType<$Exports<"lodash">, "bindAll">; +} + +declare module "lodash/cond" { + declare module.exports: $PropertyType<$Exports<"lodash">, "cond">; +} + +declare module "lodash/conforms" { + declare module.exports: $PropertyType<$Exports<"lodash">, "conforms">; +} + +declare module "lodash/constant" { + declare module.exports: $PropertyType<$Exports<"lodash">, "constant">; +} + +declare module "lodash/defaultTo" { + declare module.exports: $PropertyType<$Exports<"lodash">, "defaultTo">; +} + +declare module "lodash/flow" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flow">; +} + +declare module "lodash/flowRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "flowRight">; +} + +declare module "lodash/identity" { + declare module.exports: $PropertyType<$Exports<"lodash">, "identity">; +} + +declare module "lodash/iteratee" { + declare module.exports: $PropertyType<$Exports<"lodash">, "iteratee">; +} + +declare module "lodash/matches" { + declare module.exports: $PropertyType<$Exports<"lodash">, "matches">; +} + +declare module "lodash/matchesProperty" { + declare module.exports: $PropertyType<$Exports<"lodash">, "matchesProperty">; +} + +declare module "lodash/method" { + declare module.exports: $PropertyType<$Exports<"lodash">, "method">; +} + +declare module "lodash/methodOf" { + declare module.exports: $PropertyType<$Exports<"lodash">, "methodOf">; +} + +declare module "lodash/mixin" { + declare module.exports: $PropertyType<$Exports<"lodash">, "mixin">; +} + +declare module "lodash/noConflict" { + declare module.exports: $PropertyType<$Exports<"lodash">, "noConflict">; +} + +declare module "lodash/noop" { + declare module.exports: $PropertyType<$Exports<"lodash">, "noop">; +} + +declare module "lodash/nthArg" { + declare module.exports: $PropertyType<$Exports<"lodash">, "nthArg">; +} + +declare module "lodash/over" { + declare module.exports: $PropertyType<$Exports<"lodash">, "over">; +} + +declare module "lodash/overEvery" { + declare module.exports: $PropertyType<$Exports<"lodash">, "overEvery">; +} + +declare module "lodash/overSome" { + declare module.exports: $PropertyType<$Exports<"lodash">, "overSome">; +} + +declare module "lodash/property" { + declare module.exports: $PropertyType<$Exports<"lodash">, "property">; +} + +declare module "lodash/propertyOf" { + declare module.exports: $PropertyType<$Exports<"lodash">, "propertyOf">; +} + +declare module "lodash/range" { + declare module.exports: $PropertyType<$Exports<"lodash">, "range">; +} + +declare module "lodash/rangeRight" { + declare module.exports: $PropertyType<$Exports<"lodash">, "rangeRight">; +} + +declare module "lodash/runInContext" { + declare module.exports: $PropertyType<$Exports<"lodash">, "runInContext">; +} + +declare module "lodash/stubArray" { + declare module.exports: $PropertyType<$Exports<"lodash">, "stubArray">; +} + +declare module "lodash/stubFalse" { + declare module.exports: $PropertyType<$Exports<"lodash">, "stubFalse">; +} + +declare module "lodash/stubObject" { + declare module.exports: $PropertyType<$Exports<"lodash">, "stubObject">; +} + +declare module "lodash/stubString" { + declare module.exports: $PropertyType<$Exports<"lodash">, "stubString">; +} + +declare module "lodash/stubTrue" { + declare module.exports: $PropertyType<$Exports<"lodash">, "stubTrue">; +} + +declare module "lodash/times" { + declare module.exports: $PropertyType<$Exports<"lodash">, "times">; +} + +declare module "lodash/toPath" { + declare module.exports: $PropertyType<$Exports<"lodash">, "toPath">; +} + +declare module "lodash/uniqueId" { + declare module.exports: $PropertyType<$Exports<"lodash">, "uniqueId">; +} + +declare module "lodash/fp/chunk" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "chunk">; +} + +declare module "lodash/fp/compact" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "compact">; +} + +declare module "lodash/fp/concat" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "concat">; +} + +declare module "lodash/fp/difference" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "difference">; +} + +declare module "lodash/fp/differenceBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "differenceBy">; +} + +declare module "lodash/fp/differenceWith" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "differenceWith" + >; +} + +declare module "lodash/fp/drop" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "drop">; +} + +declare module "lodash/fp/dropLast" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dropLast">; +} + +declare module "lodash/fp/dropRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dropRight">; +} + +declare module "lodash/fp/dropRightWhile" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "dropRightWhile" + >; +} + +declare module "lodash/fp/dropWhile" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dropWhile">; +} + +declare module "lodash/fp/dropLastWhile" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dropLastWhile">; +} + +declare module "lodash/fp/fill" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "fill">; +} + +declare module "lodash/fp/findIndex" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findIndex">; +} + +declare module "lodash/fp/findIndexFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findIndexFrom">; +} + +declare module "lodash/fp/findLastIndex" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findLastIndex">; +} + +declare module "lodash/fp/findLastIndexFrom" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "findLastIndexFrom" + >; +} + +declare module "lodash/fp/first" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "first">; +} + +declare module "lodash/fp/flatten" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flatten">; +} + +declare module "lodash/fp/unnest" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unnest">; +} + +declare module "lodash/fp/flattenDeep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flattenDeep">; +} + +declare module "lodash/fp/flattenDepth" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flattenDepth">; +} + +declare module "lodash/fp/fromPairs" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "fromPairs">; +} + +declare module "lodash/fp/head" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "head">; +} + +declare module "lodash/fp/indexOf" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "indexOf">; +} + +declare module "lodash/fp/indexOfFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "indexOfFrom">; +} + +declare module "lodash/fp/initial" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "initial">; +} + +declare module "lodash/fp/init" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "init">; +} + +declare module "lodash/fp/intersection" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "intersection">; +} + +declare module "lodash/fp/intersectionBy" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "intersectionBy" + >; +} + +declare module "lodash/fp/intersectionWith" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "intersectionWith" + >; +} + +declare module "lodash/fp/join" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "join">; +} + +declare module "lodash/fp/last" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "last">; +} + +declare module "lodash/fp/lastIndexOf" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "lastIndexOf">; +} + +declare module "lodash/fp/lastIndexOfFrom" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "lastIndexOfFrom" + >; +} + +declare module "lodash/fp/nth" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "nth">; +} + +declare module "lodash/fp/pull" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pull">; +} + +declare module "lodash/fp/pullAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pullAll">; +} + +declare module "lodash/fp/pullAllBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pullAllBy">; +} + +declare module "lodash/fp/pullAllWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pullAllWith">; +} + +declare module "lodash/fp/pullAt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pullAt">; +} + +declare module "lodash/fp/remove" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "remove">; +} + +declare module "lodash/fp/reverse" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "reverse">; +} + +declare module "lodash/fp/slice" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "slice">; +} + +declare module "lodash/fp/sortedIndex" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortedIndex">; +} + +declare module "lodash/fp/sortedIndexBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortedIndexBy">; +} + +declare module "lodash/fp/sortedIndexOf" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortedIndexOf">; +} + +declare module "lodash/fp/sortedLastIndex" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "sortedLastIndex" + >; +} + +declare module "lodash/fp/sortedLastIndexBy" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "sortedLastIndexBy" + >; +} + +declare module "lodash/fp/sortedLastIndexOf" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "sortedLastIndexOf" + >; +} + +declare module "lodash/fp/sortedUniq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortedUniq">; +} + +declare module "lodash/fp/sortedUniqBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortedUniqBy">; +} + +declare module "lodash/fp/tail" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "tail">; +} + +declare module "lodash/fp/take" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "take">; +} + +declare module "lodash/fp/takeRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "takeRight">; +} + +declare module "lodash/fp/takeLast" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "takeLast">; +} + +declare module "lodash/fp/takeRightWhile" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "takeRightWhile" + >; +} + +declare module "lodash/fp/takeLastWhile" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "takeLastWhile">; +} + +declare module "lodash/fp/takeWhile" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "takeWhile">; +} + +declare module "lodash/fp/union" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "union">; +} + +declare module "lodash/fp/unionBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unionBy">; +} + +declare module "lodash/fp/unionWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unionWith">; +} + +declare module "lodash/fp/uniq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "uniq">; +} + +declare module "lodash/fp/uniqBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "uniqBy">; +} + +declare module "lodash/fp/uniqWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "uniqWith">; +} + +declare module "lodash/fp/unzip" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unzip">; +} + +declare module "lodash/fp/unzipWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unzipWith">; +} + +declare module "lodash/fp/without" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "without">; +} + +declare module "lodash/fp/xor" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "xor">; +} + +declare module "lodash/fp/symmetricDifference" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "symmetricDifference" + >; +} + +declare module "lodash/fp/xorBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "xorBy">; +} + +declare module "lodash/fp/symmetricDifferenceBy" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "symmetricDifferenceBy" + >; +} + +declare module "lodash/fp/xorWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "xorWith">; +} + +declare module "lodash/fp/symmetricDifferenceWith" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "symmetricDifferenceWith" + >; +} + +declare module "lodash/fp/zip" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zip">; +} + +declare module "lodash/fp/zipAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zipAll">; +} + +declare module "lodash/fp/zipObject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zipObject">; +} + +declare module "lodash/fp/zipObj" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zipObj">; +} + +declare module "lodash/fp/zipObjectDeep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zipObjectDeep">; +} + +declare module "lodash/fp/zipWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "zipWith">; +} + +declare module "lodash/fp/countBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "countBy">; +} + +declare module "lodash/fp/each" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "each">; +} + +declare module "lodash/fp/eachRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "eachRight">; +} + +declare module "lodash/fp/every" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "every">; +} + +declare module "lodash/fp/all" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "all">; +} + +declare module "lodash/fp/filter" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "filter">; +} + +declare module "lodash/fp/find" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "find">; +} + +declare module "lodash/fp/findFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findFrom">; +} + +declare module "lodash/fp/findLast" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findLast">; +} + +declare module "lodash/fp/findLastFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findLastFrom">; +} + +declare module "lodash/fp/flatMap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flatMap">; +} + +declare module "lodash/fp/flatMapDeep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flatMapDeep">; +} + +declare module "lodash/fp/flatMapDepth" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flatMapDepth">; +} + +declare module "lodash/fp/forEach" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forEach">; +} + +declare module "lodash/fp/forEachRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forEachRight">; +} + +declare module "lodash/fp/groupBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "groupBy">; +} + +declare module "lodash/fp/includes" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "includes">; +} + +declare module "lodash/fp/contains" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "contains">; +} + +declare module "lodash/fp/includesFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "includesFrom">; +} + +declare module "lodash/fp/invokeMap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invokeMap">; +} + +declare module "lodash/fp/invokeArgsMap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invokeArgsMap">; +} + +declare module "lodash/fp/keyBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "keyBy">; +} + +declare module "lodash/fp/indexBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "indexBy">; +} + +declare module "lodash/fp/map" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "map">; +} + +declare module "lodash/fp/pluck" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pluck">; +} + +declare module "lodash/fp/orderBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "orderBy">; +} + +declare module "lodash/fp/partition" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "partition">; +} + +declare module "lodash/fp/reduce" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "reduce">; +} + +declare module "lodash/fp/reduceRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "reduceRight">; +} + +declare module "lodash/fp/reject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "reject">; +} + +declare module "lodash/fp/sample" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sample">; +} + +declare module "lodash/fp/sampleSize" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sampleSize">; +} + +declare module "lodash/fp/shuffle" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "shuffle">; +} + +declare module "lodash/fp/size" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "size">; +} + +declare module "lodash/fp/some" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "some">; +} + +declare module "lodash/fp/any" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "any">; +} + +declare module "lodash/fp/sortBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sortBy">; +} + +declare module "lodash/fp/now" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "now">; +} + +declare module "lodash/fp/after" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "after">; +} + +declare module "lodash/fp/ary" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "ary">; +} + +declare module "lodash/fp/nAry" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "nAry">; +} + +declare module "lodash/fp/before" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "before">; +} + +declare module "lodash/fp/bind" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "bind">; +} + +declare module "lodash/fp/bindKey" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "bindKey">; +} + +declare module "lodash/fp/curry" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "curry">; +} + +declare module "lodash/fp/curryN" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "curryN">; +} + +declare module "lodash/fp/curryRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "curryRight">; +} + +declare module "lodash/fp/curryRightN" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "curryRightN">; +} + +declare module "lodash/fp/debounce" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "debounce">; +} + +declare module "lodash/fp/defer" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "defer">; +} + +declare module "lodash/fp/delay" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "delay">; +} + +declare module "lodash/fp/flip" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flip">; +} + +declare module "lodash/fp/memoize" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "memoize">; +} + +declare module "lodash/fp/negate" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "negate">; +} + +declare module "lodash/fp/complement" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "complement">; +} + +declare module "lodash/fp/once" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "once">; +} + +declare module "lodash/fp/overArgs" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "overArgs">; +} + +declare module "lodash/fp/useWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "useWith">; +} + +declare module "lodash/fp/partial" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "partial">; +} + +declare module "lodash/fp/partialRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "partialRight">; +} + +declare module "lodash/fp/rearg" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "rearg">; +} + +declare module "lodash/fp/rest" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "rest">; +} + +declare module "lodash/fp/unapply" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unapply">; +} + +declare module "lodash/fp/restFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "restFrom">; +} + +declare module "lodash/fp/spread" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "spread">; +} + +declare module "lodash/fp/apply" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "apply">; +} + +declare module "lodash/fp/spreadFrom" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "spreadFrom">; +} + +declare module "lodash/fp/throttle" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "throttle">; +} + +declare module "lodash/fp/unary" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unary">; +} + +declare module "lodash/fp/wrap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "wrap">; +} + +declare module "lodash/fp/castArray" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "castArray">; +} + +declare module "lodash/fp/clone" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "clone">; +} + +declare module "lodash/fp/cloneDeep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "cloneDeep">; +} + +declare module "lodash/fp/cloneDeepWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "cloneDeepWith">; +} + +declare module "lodash/fp/cloneWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "cloneWith">; +} + +declare module "lodash/fp/conformsTo" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "conformsTo">; +} + +declare module "lodash/fp/where" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "where">; +} + +declare module "lodash/fp/conforms" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "conforms">; +} + +declare module "lodash/fp/eq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "eq">; +} + +declare module "lodash/fp/identical" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "identical">; +} + +declare module "lodash/fp/gt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "gt">; +} + +declare module "lodash/fp/gte" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "gte">; +} + +declare module "lodash/fp/isArguments" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isArguments">; +} + +declare module "lodash/fp/isArray" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isArray">; +} + +declare module "lodash/fp/isArrayBuffer" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isArrayBuffer">; +} + +declare module "lodash/fp/isArrayLike" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isArrayLike">; +} + +declare module "lodash/fp/isArrayLikeObject" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "isArrayLikeObject" + >; +} + +declare module "lodash/fp/isBoolean" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isBoolean">; +} + +declare module "lodash/fp/isBuffer" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isBuffer">; +} + +declare module "lodash/fp/isDate" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isDate">; +} + +declare module "lodash/fp/isElement" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isElement">; +} + +declare module "lodash/fp/isEmpty" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isEmpty">; +} + +declare module "lodash/fp/isEqual" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isEqual">; +} + +declare module "lodash/fp/equals" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "equals">; +} + +declare module "lodash/fp/isEqualWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isEqualWith">; +} + +declare module "lodash/fp/isError" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isError">; +} + +declare module "lodash/fp/isFinite" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isFinite">; +} + +declare module "lodash/fp/isFunction" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isFunction">; +} + +declare module "lodash/fp/isInteger" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isInteger">; +} + +declare module "lodash/fp/isLength" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isLength">; +} + +declare module "lodash/fp/isMap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isMap">; +} + +declare module "lodash/fp/isMatch" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isMatch">; +} + +declare module "lodash/fp/whereEq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "whereEq">; +} + +declare module "lodash/fp/isMatchWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isMatchWith">; +} + +declare module "lodash/fp/isNaN" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isNaN">; +} + +declare module "lodash/fp/isNative" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isNative">; +} + +declare module "lodash/fp/isNil" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isNil">; +} + +declare module "lodash/fp/isNull" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isNull">; +} + +declare module "lodash/fp/isNumber" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isNumber">; +} + +declare module "lodash/fp/isObject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isObject">; +} + +declare module "lodash/fp/isObjectLike" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isObjectLike">; +} + +declare module "lodash/fp/isPlainObject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isPlainObject">; +} + +declare module "lodash/fp/isRegExp" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isRegExp">; +} + +declare module "lodash/fp/isSafeInteger" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isSafeInteger">; +} + +declare module "lodash/fp/isSet" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isSet">; +} + +declare module "lodash/fp/isString" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isString">; +} + +declare module "lodash/fp/isSymbol" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isSymbol">; +} + +declare module "lodash/fp/isTypedArray" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isTypedArray">; +} + +declare module "lodash/fp/isUndefined" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isUndefined">; +} + +declare module "lodash/fp/isWeakMap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isWeakMap">; +} + +declare module "lodash/fp/isWeakSet" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "isWeakSet">; +} + +declare module "lodash/fp/lt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "lt">; +} + +declare module "lodash/fp/lte" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "lte">; +} + +declare module "lodash/fp/toArray" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toArray">; +} + +declare module "lodash/fp/toFinite" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toFinite">; +} + +declare module "lodash/fp/toInteger" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toInteger">; +} + +declare module "lodash/fp/toLength" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toLength">; +} + +declare module "lodash/fp/toNumber" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toNumber">; +} + +declare module "lodash/fp/toPlainObject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toPlainObject">; +} + +declare module "lodash/fp/toSafeInteger" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toSafeInteger">; +} + +declare module "lodash/fp/toString" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toString">; +} + +declare module "lodash/fp/add" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "add">; +} + +declare module "lodash/fp/ceil" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "ceil">; +} + +declare module "lodash/fp/divide" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "divide">; +} + +declare module "lodash/fp/floor" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "floor">; +} + +declare module "lodash/fp/max" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "max">; +} + +declare module "lodash/fp/maxBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "maxBy">; +} + +declare module "lodash/fp/mean" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mean">; +} + +declare module "lodash/fp/meanBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "meanBy">; +} + +declare module "lodash/fp/min" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "min">; +} + +declare module "lodash/fp/minBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "minBy">; +} + +declare module "lodash/fp/multiply" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "multiply">; +} + +declare module "lodash/fp/round" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "round">; +} + +declare module "lodash/fp/subtract" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "subtract">; +} + +declare module "lodash/fp/sum" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sum">; +} + +declare module "lodash/fp/sumBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "sumBy">; +} + +declare module "lodash/fp/clamp" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "clamp">; +} + +declare module "lodash/fp/inRange" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "inRange">; +} + +declare module "lodash/fp/random" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "random">; +} + +declare module "lodash/fp/assign" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assign">; +} + +declare module "lodash/fp/assignAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignAll">; +} + +declare module "lodash/fp/assignInAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignInAll">; +} + +declare module "lodash/fp/extendAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "extendAll">; +} + +declare module "lodash/fp/assignIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignIn">; +} + +declare module "lodash/fp/assignInWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignInWith">; +} + +declare module "lodash/fp/assignWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignWith">; +} + +declare module "lodash/fp/assignInAllWith" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "assignInAllWith" + >; +} + +declare module "lodash/fp/extendAllWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "extendAllWith">; +} + +declare module "lodash/fp/assignAllWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assignAllWith">; +} + +declare module "lodash/fp/at" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "at">; +} + +declare module "lodash/fp/props" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "props">; +} + +declare module "lodash/fp/paths" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "paths">; +} + +declare module "lodash/fp/create" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "create">; +} + +declare module "lodash/fp/defaults" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "defaults">; +} + +declare module "lodash/fp/defaultsAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "defaultsAll">; +} + +declare module "lodash/fp/defaultsDeep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "defaultsDeep">; +} + +declare module "lodash/fp/defaultsDeepAll" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "defaultsDeepAll" + >; +} + +declare module "lodash/fp/entries" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "entries">; +} + +declare module "lodash/fp/entriesIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "entriesIn">; +} + +declare module "lodash/fp/extend" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "extend">; +} + +declare module "lodash/fp/extendWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "extendWith">; +} + +declare module "lodash/fp/findKey" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findKey">; +} + +declare module "lodash/fp/findLastKey" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "findLastKey">; +} + +declare module "lodash/fp/forIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forIn">; +} + +declare module "lodash/fp/forInRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forInRight">; +} + +declare module "lodash/fp/forOwn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forOwn">; +} + +declare module "lodash/fp/forOwnRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "forOwnRight">; +} + +declare module "lodash/fp/functions" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "functions">; +} + +declare module "lodash/fp/functionsIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "functionsIn">; +} + +declare module "lodash/fp/get" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "get">; +} + +declare module "lodash/fp/prop" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "prop">; +} + +declare module "lodash/fp/path" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "path">; +} + +declare module "lodash/fp/getOr" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "getOr">; +} + +declare module "lodash/fp/propOr" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "propOr">; +} + +declare module "lodash/fp/pathOr" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pathOr">; +} + +declare module "lodash/fp/has" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "has">; +} + +declare module "lodash/fp/hasIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "hasIn">; +} + +declare module "lodash/fp/invert" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invert">; +} + +declare module "lodash/fp/invertObj" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invertObj">; +} + +declare module "lodash/fp/invertBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invertBy">; +} + +declare module "lodash/fp/invoke" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invoke">; +} + +declare module "lodash/fp/invokeArgs" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "invokeArgs">; +} + +declare module "lodash/fp/keys" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "keys">; +} + +declare module "lodash/fp/keysIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "keysIn">; +} + +declare module "lodash/fp/mapKeys" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mapKeys">; +} + +declare module "lodash/fp/mapValues" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mapValues">; +} + +declare module "lodash/fp/merge" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "merge">; +} + +declare module "lodash/fp/mergeAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mergeAll">; +} + +declare module "lodash/fp/mergeWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mergeWith">; +} + +declare module "lodash/fp/mergeAllWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mergeAllWith">; +} + +declare module "lodash/fp/omit" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "omit">; +} + +declare module "lodash/fp/omitAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "omitAll">; +} + +declare module "lodash/fp/omitBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "omitBy">; +} + +declare module "lodash/fp/pick" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pick">; +} + +declare module "lodash/fp/pickAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pickAll">; +} + +declare module "lodash/fp/pickBy" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pickBy">; +} + +declare module "lodash/fp/result" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "result">; +} + +declare module "lodash/fp/set" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "set">; +} + +declare module "lodash/fp/assoc" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assoc">; +} + +declare module "lodash/fp/assocPath" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "assocPath">; +} + +declare module "lodash/fp/setWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "setWith">; +} + +declare module "lodash/fp/toPairs" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toPairs">; +} + +declare module "lodash/fp/toPairsIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toPairsIn">; +} + +declare module "lodash/fp/transform" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "transform">; +} + +declare module "lodash/fp/unset" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unset">; +} + +declare module "lodash/fp/dissoc" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dissoc">; +} + +declare module "lodash/fp/dissocPath" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "dissocPath">; +} + +declare module "lodash/fp/update" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "update">; +} + +declare module "lodash/fp/updateWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "updateWith">; +} + +declare module "lodash/fp/values" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "values">; +} + +declare module "lodash/fp/valuesIn" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "valuesIn">; +} + +declare module "lodash/fp/tap" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "tap">; +} + +declare module "lodash/fp/thru" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "thru">; +} + +declare module "lodash/fp/camelCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "camelCase">; +} + +declare module "lodash/fp/capitalize" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "capitalize">; +} + +declare module "lodash/fp/deburr" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "deburr">; +} + +declare module "lodash/fp/endsWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "endsWith">; +} + +declare module "lodash/fp/escape" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "escape">; +} + +declare module "lodash/fp/escapeRegExp" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "escapeRegExp">; +} + +declare module "lodash/fp/kebabCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "kebabCase">; +} + +declare module "lodash/fp/lowerCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "lowerCase">; +} + +declare module "lodash/fp/lowerFirst" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "lowerFirst">; +} + +declare module "lodash/fp/pad" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pad">; +} + +declare module "lodash/fp/padChars" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "padChars">; +} + +declare module "lodash/fp/padEnd" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "padEnd">; +} + +declare module "lodash/fp/padCharsEnd" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "padCharsEnd">; +} + +declare module "lodash/fp/padStart" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "padStart">; +} + +declare module "lodash/fp/padCharsStart" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "padCharsStart">; +} + +declare module "lodash/fp/parseInt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "parseInt">; +} + +declare module "lodash/fp/repeat" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "repeat">; +} + +declare module "lodash/fp/replace" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "replace">; +} + +declare module "lodash/fp/snakeCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "snakeCase">; +} + +declare module "lodash/fp/split" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "split">; +} + +declare module "lodash/fp/startCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "startCase">; +} + +declare module "lodash/fp/startsWith" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "startsWith">; +} + +declare module "lodash/fp/template" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "template">; +} + +declare module "lodash/fp/toLower" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toLower">; +} + +declare module "lodash/fp/toUpper" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toUpper">; +} + +declare module "lodash/fp/trim" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "trim">; +} + +declare module "lodash/fp/trimChars" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "trimChars">; +} + +declare module "lodash/fp/trimEnd" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "trimEnd">; +} + +declare module "lodash/fp/trimCharsEnd" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "trimCharsEnd">; +} + +declare module "lodash/fp/trimStart" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "trimStart">; +} + +declare module "lodash/fp/trimCharsStart" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "trimCharsStart" + >; +} + +declare module "lodash/fp/truncate" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "truncate">; +} + +declare module "lodash/fp/unescape" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "unescape">; +} + +declare module "lodash/fp/upperCase" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "upperCase">; +} + +declare module "lodash/fp/upperFirst" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "upperFirst">; +} + +declare module "lodash/fp/words" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "words">; +} + +declare module "lodash/fp/attempt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "attempt">; +} + +declare module "lodash/fp/bindAll" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "bindAll">; +} + +declare module "lodash/fp/cond" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "cond">; +} + +declare module "lodash/fp/constant" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "constant">; +} + +declare module "lodash/fp/always" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "always">; +} + +declare module "lodash/fp/defaultTo" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "defaultTo">; +} + +declare module "lodash/fp/flow" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flow">; +} + +declare module "lodash/fp/pipe" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pipe">; +} + +declare module "lodash/fp/flowRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "flowRight">; +} + +declare module "lodash/fp/compose" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "compose">; +} + +declare module "lodash/fp/identity" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "identity">; +} + +declare module "lodash/fp/iteratee" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "iteratee">; +} + +declare module "lodash/fp/matches" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "matches">; +} + +declare module "lodash/fp/matchesProperty" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "matchesProperty" + >; +} + +declare module "lodash/fp/propEq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "propEq">; +} + +declare module "lodash/fp/pathEq" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "pathEq">; +} + +declare module "lodash/fp/method" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "method">; +} + +declare module "lodash/fp/methodOf" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "methodOf">; +} + +declare module "lodash/fp/mixin" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "mixin">; +} + +declare module "lodash/fp/noConflict" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "noConflict">; +} + +declare module "lodash/fp/noop" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "noop">; +} + +declare module "lodash/fp/nthArg" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "nthArg">; +} + +declare module "lodash/fp/over" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "over">; +} + +declare module "lodash/fp/juxt" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "juxt">; +} + +declare module "lodash/fp/overEvery" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "overEvery">; +} + +declare module "lodash/fp/allPass" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "allPass">; +} + +declare module "lodash/fp/overSome" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "overSome">; +} + +declare module "lodash/fp/anyPass" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "anyPass">; +} + +declare module "lodash/fp/property" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "property">; +} + +declare module "lodash/fp/propertyOf" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "propertyOf">; +} + +declare module "lodash/fp/range" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "range">; +} + +declare module "lodash/fp/rangeStep" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "rangeStep">; +} + +declare module "lodash/fp/rangeRight" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "rangeRight">; +} + +declare module "lodash/fp/rangeStepRight" { + declare module.exports: $PropertyType< + $Exports<"lodash/fp">, + "rangeStepRight" + >; +} + +declare module "lodash/fp/runInContext" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "runInContext">; +} + +declare module "lodash/fp/stubArray" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "stubArray">; +} + +declare module "lodash/fp/stubFalse" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "stubFalse">; +} + +declare module "lodash/fp/F" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "F">; +} + +declare module "lodash/fp/stubObject" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "stubObject">; +} + +declare module "lodash/fp/stubString" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "stubString">; +} + +declare module "lodash/fp/stubTrue" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "stubTrue">; +} + +declare module "lodash/fp/T" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "T">; +} + +declare module "lodash/fp/times" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "times">; +} + +declare module "lodash/fp/toPath" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "toPath">; +} + +declare module "lodash/fp/uniqueId" { + declare module.exports: $PropertyType<$Exports<"lodash/fp">, "uniqueId">; +} diff --git a/package-lock.json b/package-lock.json index 5b36bb0e..f0068615 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12833,9 +12833,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "lodash._reinterpolate": { "version": "3.0.0", diff --git a/package.json b/package.json index 1b9ff314..51f83a4e 100755 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "is-url": "1.2.4", "isomorphic-git": "^1.7.1", "jimp": "0.14.0", + "lodash": "4.17.19", "menubar": "9.0.1", "node-fetch": "2.6.0", "prop-types": "15.7.2", diff --git a/public/libs/git.js b/public/libs/git.js index d7964969..d90d826d 100644 --- a/public/libs/git.js +++ b/public/libs/git.js @@ -1,98 +1,304 @@ -const git = require('isomorphic-git'); -const http = require('isomorphic-git/http/node'); -const fs = require('fs'); +/* eslint-disable no-await-in-loop */ +const fs = require('fs-extra'); +const path = require('path'); +const { compact } = require('lodash'); +const { GitProcess } = require('dugite'); const { wikiCreationProgress } = require('./wiki/progress-message'); -function processUserInfo(userInfo) { - const { login: name, email, accessToken } = userInfo; - const author = { - name, - email, - }; - const committer = { - name: 'tiddly-git', - email: 'tiddlygit@gmail.com', - }; - const onAuth = () => ({ - username: name, - password: accessToken, - }); - return { - author, - committer, - onAuth, - }; -} - -async function commitFiles(wikiFolderPath, author, message = 'Initialize with TiddlyGit-Desktop') { - await git.add({ fs, dir: wikiFolderPath, filepath: '.' }); - await git.commit({ - fs, - dir: wikiFolderPath, - author, - message, - }); +/** + * Git add and commit all file + * @param {string} wikiFolderPath + * @param {string} username + * @param {string} email + * @param {?string} message + */ +async function commitFiles(wikiFolderPath, username, email, message = 'Initialize with TiddlyGit-Desktop') { + await GitProcess.exec(['add', '.'], wikiFolderPath); + return GitProcess.exec(['commit', '-m', message, `--author="${username} <${email}>"`], wikiFolderPath); } async function initWikiGit(wikiFolderPath, githubRepoUrl, userInfo) { wikiCreationProgress('开始初始化本地Git仓库'); - const gitUrl = `${githubRepoUrl}.git`; - const { author, onAuth } = processUserInfo(userInfo); - await git.init({ fs, dir: wikiFolderPath }); - await commitFiles(wikiFolderPath, author); + const { login: username, email, accessToken } = userInfo; + const gitUrl = `${githubRepoUrl}.git`.replace( + 'https://github.com/', + `https://${username}:${accessToken}@github.com/`, + ); + console.info(`Using gitUrl ${gitUrl}`); + await GitProcess.exec(['init'], wikiFolderPath); + await commitFiles(wikiFolderPath, username, email); wikiCreationProgress('仓库初始化完毕,开始配置Github远端仓库'); - await git.addRemote({ - fs, - dir: wikiFolderPath, - remote: 'origin', - url: gitUrl, - }); + await GitProcess.exec(['remote', 'add', 'origin', gitUrl], wikiFolderPath); wikiCreationProgress('正在将Wiki所在的本地Git备份到Github远端仓库'); - await git.push({ - fs, - http, - dir: wikiFolderPath, - remote: 'origin', - ref: 'master', - force: true, - onAuth, - }); - wikiCreationProgress('Git仓库配置完毕'); + const { stderr: pushStdError, exitCode: pushExitCode } = await GitProcess.exec( + ['push', 'origin', 'master', '--force'], + wikiFolderPath, + ); + if (pushExitCode !== 0) { + console.info('pushStdError', pushStdError); + throw new Error('Git仓库配置失败,详见错误日志'); + } else { + wikiCreationProgress('Git仓库配置完毕'); + } +} + +/** + * See if there is any file not being committed + * @param {string} wikiFolderPath repo path to test + */ +async function haveLocalChanges(wikiFolderPath) { + const { stdout } = await GitProcess.exec(['status', '--porcelain']); + const matchResult = stdout.match(/^(\?\?|[ACMR] |[ ACMR][DM])*/gm); + return matchResult.some(match => !!match); +} + +/** + * determine sync state of repository, i.e. how the remote relates to our HEAD + * 'ahead' means our local state is ahead of remote, 'behind' means local state is behind of the remote + * @param {string} wikiFolderPath repo path to test + */ +async function getSyncState(wikiFolderPath) { + const { stdout } = await GitProcess.exec( + ['rev-list', '--count', '--left-right', 'origin/master...HEAD'], + wikiFolderPath, + ); + console.info('Checking sync state with upstream'); + console.info('stdout:', stdout, '(stdout end)'); + if (stdout === '') return 'noUpstream'; + if (stdout.match(/0\t0/)) return 'equal'; + if (stdout.match(/0\t\d+/)) return 'ahead'; + if (stdout.match(/\d+\t0/)) return 'behind'; + return 'diverged'; +} + +async function assumeSync(wikiFolderPath) { + if ((await getSyncState(wikiFolderPath)) === 'equal') return; + throw new Error( + '同步失败!你需要用 Github Desktop 等工具检查当前 Git 仓库的状态。失败可能是网络原因导致的,如果的确如此,可在调整网络后重试。', + ); +} + +/** + * echo the git dir + * @param {string} wikiFolderPath repo path + */ +async function getGitDirectory(wikiFolderPath) { + const { stdout, stderr } = await GitProcess.exec( + ['rev-parse', '--is-inside-work-tree', wikiFolderPath], + wikiFolderPath, + ); + if (stderr) console.info(stderr); + if (stdout.startsWith('true')) { + const { stdout: stdout2 } = await GitProcess.exec(['rev-parse', '--git-dir', wikiFolderPath], wikiFolderPath); + const [gitPath2, gitPath1] = compact(stdout2.split('\n')); + if (gitPath1 && gitPath2) { + return path.resolve(`${gitPath1}/${gitPath2}`); + } + } + throw new Error(`${wikiFolderPath} 不是一个 git 仓库`); +} + +/** + * get various repo state in string format + * @param {string} wikiFolderPath repo path to check + * @returns {string} gitState + */ +async function getGitRepositoryState(wikiFolderPath) { + const gitDirectory = await getGitDirectory(wikiFolderPath); + if (!gitDirectory) return 'NOGIT'; + let result = ''; + if ((await fs.lstat(path.join(gitDirectory, 'rebase-merge', 'interactive')).catch(() => {}))?.isFile()) { + result += 'REBASE-i'; + } else if ((await fs.lstat(path.join(gitDirectory, 'rebase-merge')).catch(() => {}))?.isDirectory()) { + result += 'REBASE-m'; + } else { + if ((await fs.lstat(path.join(gitDirectory, 'rebase-apply')).catch(() => {}))?.isDirectory()) { + result += 'AM/REBASE'; + } + if ((await fs.lstat(path.join(gitDirectory, 'MERGE_HEAD')).catch(() => {}))?.isFile()) { + result += 'MERGING'; + } + if ((await fs.lstat(path.join(gitDirectory, 'CHERRY_PICK_HEAD')).catch(() => {}))?.isFile()) { + result += 'CHERRY-PICKING'; + } + if ((await fs.lstat(path.join(gitDirectory, 'BISECT_LOG')).catch(() => {}))?.isFile()) { + result += 'BISECTING'; + } + } + + if ( + (await GitProcess.exec(['rev-parse', '--is-inside-git-dir', wikiFolderPath], wikiFolderPath)).stdout.startsWith( + 'true', + ) + ) { + if ( + (await GitProcess.exec(['rev-parse', '--is-bare-repository', wikiFolderPath], wikiFolderPath)).stdout.startsWith( + 'true', + ) + ) { + result += '|BARE'; + } else { + result += '|GIT_DIR'; + } + } else if ( + (await GitProcess.exec(['rev-parse', '--is-inside-work-tree', wikiFolderPath], wikiFolderPath)).stdout.startsWith( + 'true', + ) + ) { + const { exitCode } = await GitProcess.exec(['diff', '--no-ext-diff', '--quiet', '--exit-code'], wikiFolderPath); + if (exitCode === 0) { + result += '|DIRTY'; + } + } + + return result; +} + +/** + * try to continue rebase, simply adding and committing all things, leave them to user to resolve in the TiddlyWiki later. + * @param {*} wikiFolderPath + * @param {string} username + * @param {string} email + */ +async function continueRebase(wikiFolderPath, username, email) { + let hasNotCommittedConflict = true; + let rebaseContinueExitCode = 0; + let rebaseContinueStdError = ''; + let repositoryState = await getGitRepositoryState(wikiFolderPath); + // prevent infin loop, if there is some bug that I miss + let loopCount = 0; + while (hasNotCommittedConflict) { + loopCount += 1; + if (loopCount > 1000) { + throw new Error('无法同步,而且同步脚本陷入死循环'); + } + const { exitCode: commitExitCode, stderr: commitStdError } = await commitFiles( + wikiFolderPath, + username, + email, + 'Conflict files committed with TiddlyGit-Desktop', + ); + const rebaseContinueResult = await GitProcess.exec(['rebase', '--continue'], wikiFolderPath); + // get info for logging + rebaseContinueExitCode = rebaseContinueResult.exitCode; + rebaseContinueStdError = rebaseContinueResult.stderr; + const rebaseContinueStdOut = rebaseContinueResult.stdout; + repositoryState = await getGitRepositoryState(wikiFolderPath); + // if git add . + git commit failed or git rebase --continue failed + if (commitExitCode !== 0 || rebaseContinueExitCode !== 0) { + console.info(`rebaseContinueStdError when ${repositoryState}`); + console.info(rebaseContinueStdError); + console.info(`commitStdError when ${repositoryState}`); + console.info(commitStdError); + throw new Error( + `无法同步,这个文件夹处在 ${repositoryState} 状态,不能直接进行同步,已尝试自动修复,但还是出现错误,请先解决所有冲突(例如使用 VSCode 打开),如果还不行,请用 Git 工具解决问题`, + ); + } + hasNotCommittedConflict = + rebaseContinueStdError.startsWith('CONFLICT') || rebaseContinueStdOut.startsWith('CONFLICT'); + } + + console.log(`这个文件夹处在 ${repositoryState} 状态,不能直接进行同步,但已自动修复`); } async function commitAndSync(wikiFolderPath, githubRepoUrl, userInfo) { - const { author, onAuth } = processUserInfo(userInfo); - console.log(`Sync to cloud for ${wikiFolderPath} under ${JSON.stringify(author)}`); - await commitFiles(wikiFolderPath, author, 'Wiki updated with TiddlyGit-Desktop'); - await git.pull({ - fs, - http, - author, - onAuth, - dir: wikiFolderPath, - ref: 'master', - // singleBranch: true, - }); - await git.push({ - fs, - http, - dir: wikiFolderPath, - remote: 'origin', - ref: 'master', - force: true, - onAuth, - }); - console.log(`${wikiFolderPath} Sync completed`); + const { login: username, email } = userInfo; + const commitMessage = 'Wiki updated with TiddlyGit-Desktop'; + const branchMapping = 'master:master'; + + // preflight check + const repoStartingState = await getGitRepositoryState(wikiFolderPath); + if (!repoStartingState || repoStartingState === '|DIRTY') { + console.log(`准备同步 ${wikiFolderPath} ,使用的作者信息为 ${username} <${email}>`); + } else if (repoStartingState === 'NOGIT') { + throw new Error(`无法同步,这个文件夹没有初始化为 Git 仓库`); + } else { + // we may be in middle of a rebase, try fix that + await continueRebase(wikiFolderPath, username, email); + } + + if (await haveLocalChanges(wikiFolderPath)) { + console.log(`有需要提交(commit)的内容,正在自动提交,使用的提交信息为 「${commitMessage}」`); + const { exitCode: commitExitCode, stderr: commitStdError } = await commitFiles( + wikiFolderPath, + username, + email, + commitMessage, + ); + if (commitExitCode !== 0) { + console.info('commit failed'); + console.info(commitStdError); + } + } + console.log('正在拉取云端数据,以便比对'); + await GitProcess.exec(['fetch', 'origin', 'master'], wikiFolderPath); + + // + switch (await getSyncState(wikiFolderPath)) { + case 'noUpstream': { + console.log('同步失败,当前目录可能不是一个初始化好的 git 仓库'); + return; + } + case 'equal': { + console.log('无需同步,本地状态和云端一致'); + return; + } + case 'ahead': { + console.log('本地状态超前于云端,开始上传'); + const { exitCode, stderr } = await GitProcess.exec(['push', 'origin', branchMapping], wikiFolderPath); + if (exitCode === 0) break; + console.log(`git push 的返回值是 ${exitCode},这通常意味着有网络问题`); + console.info('stderr of git push:'); + console.info(stderr); + break; + } + case 'behind': { + console.log('本地状态落后于云端,开始合并云端数据'); + const { exitCode, stderr } = await GitProcess.exec( + ['merge', '--ff', '--ff-only', 'origin/master'], + wikiFolderPath, + ); + if (exitCode === 0) break; + console.log(`git merge 的返回值是 ${exitCode},详见错误日志`); + console.info('stderr of git merge:'); + console.info(stderr); + break; + } + case 'diverged': { + console.log('本地状态与云端有分歧,开始变基(Rebase)'); + const { exitCode, stderr } = await GitProcess.exec(['rebase', 'origin/master'], wikiFolderPath); + if ( + exitCode === 0 && + !(await getGitRepositoryState(wikiFolderPath)) && + (await getSyncState(wikiFolderPath)) === 'ahead' + ) { + console.log('变基(Rebase)成功,开始上传'); + } else { + await continueRebase(wikiFolderPath, username, email); + console.log(`变基(Rebase)时发现冲突,需要解决冲突`); + } + await GitProcess.exec(['push', 'origin', branchMapping], wikiFolderPath); + await assumeSync(wikiFolderPath); + break; + } + default: { + console.log('同步失败,同步系统可能出现问题'); + } + } + + await assumeSync(wikiFolderPath); + console.log(`${wikiFolderPath} 同步完成`); } async function getRemoteUrl(wikiFolderPath) { - try { - const remotes = await git.listRemotes({ fs, dir: wikiFolderPath }); - const githubRemote = remotes.find(remote => remote.remote === 'origin') || remotes[0] || { url: '' }; - return githubRemote.url.replace('.git', ''); - } catch { - return ''; + const { stdout: remoteStdout } = await GitProcess.exec(['remote'], wikiFolderPath); + const remotes = compact(remoteStdout.split('\n')); + const githubRemote = remotes.find(remote => remote === 'origin') || remotes[0] || ''; + if (githubRemote) { + const { stdout: remoteUrlStdout } = await GitProcess.exec(['remote', 'get-url', githubRemote], wikiFolderPath); + return remoteUrlStdout.replace('.git', ''); } + return ''; } module.exports = { diff --git a/public/libs/workspaces-views.js b/public/libs/workspaces-views.js index 64ab839f..11dfe872 100644 --- a/public/libs/workspaces-views.js +++ b/public/libs/workspaces-views.js @@ -13,6 +13,7 @@ const { setWorkspaces, setWorkspacePicture, } = require('./workspaces'); +const sendToAllWindows = require('./send-to-all-windows'); const { addView, diff --git a/public/listeners/index.js b/public/listeners/index.js index cc8a6a52..2b9ddfe6 100755 --- a/public/listeners/index.js +++ b/public/listeners/index.js @@ -69,6 +69,7 @@ const loadListeners = () => { try { await createSubWiki(newFolderPath, folderName, mainWikiToLink, onlyLink); } catch (error) { + console.info(error); return String(error); } }); @@ -76,6 +77,7 @@ const loadListeners = () => { try { await ensureWikiExist(wikiPath, shouldBeMainWiki); } catch (error) { + console.info(error); return String(error); } }); @@ -90,6 +92,8 @@ const loadListeners = () => { try { await initWikiGit(wikiFolderPath, githubRepoUrl, userInfo); } catch (error) { + console.info(error); + removeWiki(wikiFolderPath); return String(error); } }); diff --git a/src/components/dialog-add-workspace/existed-wiki-done-button.js b/src/components/dialog-add-workspace/existed-wiki-done-button.js index 09012649..8af9d483 100644 --- a/src/components/dialog-add-workspace/existed-wiki-done-button.js +++ b/src/components/dialog-add-workspace/existed-wiki-done-button.js @@ -75,7 +75,7 @@ function DoneButton({ { updateForm(workspaceFormData); const creationError = await ensureWikiExist(existedFolderLocation, true); @@ -110,7 +110,7 @@ function DoneButton({ { const wikiFolderName = basename(existedFolderLocation); const parentFolderLocation = dirname(existedFolderLocation); diff --git a/src/components/dialog-add-workspace/new-wiki-done-button.js b/src/components/dialog-add-workspace/new-wiki-done-button.js index eecdd119..0d30bfdf 100644 --- a/src/components/dialog-add-workspace/new-wiki-done-button.js +++ b/src/components/dialog-add-workspace/new-wiki-done-button.js @@ -79,7 +79,7 @@ function NewWikiDoneButton({ { updateForm(workspaceFormData); let creationError = await requestCopyWikiTemplate(parentFolderLocation, wikiFolderName); @@ -118,7 +118,7 @@ function NewWikiDoneButton({ { updateForm(workspaceFormData); let creationError = await requestCreateSubWiki(parentFolderLocation, wikiFolderName, mainWikiToLink);