From b74bede0e7ef01b506260633dc620cfe8a4eb444 Mon Sep 17 00:00:00 2001 From: paweldomas Date: Tue, 24 Oct 2017 17:26:56 -0500 Subject: [PATCH] feat(web/RN): update React to v16 and React Native to 0.49 --- .flowconfig | 32 +- .../org/jitsi/meet/sdk/JitsiMeetView.java | 2 +- .../jitsi/meet/sdk/ReactPackageAdapter.java | 5 - app.js | 6 + flow-typed/npm/lodash_v4.x.x.js | 3527 +++++++++++++++-- flow-typed/npm/prop-types_v15.x.x.js | 34 + flow-typed/npm/react-redux_v5.x.x.js | 52 +- flow-typed/npm/redux_v3.x.x.js | 54 +- index.android.js | 27 +- index.ios.js | 3 +- ios/Podfile | 4 +- ios/scripts/run-packager.sh | 2 +- ios/sdk/sdk.xcodeproj/project.pbxproj | 2 +- package.json | 8 +- react/features/always-on-top/AlwaysOnTop.js | 2 +- react/features/app/functions.web.js | 5 +- .../components/WaitForOwnerDialog.native.js | 2 +- .../base/dialog/components/AbstractDialog.js | 2 +- .../base/jwt/components/CallOverlay.js | 2 +- .../base/media/components/native/Video.js | 2 +- .../react/components/AbstractContainer.js | 2 +- .../components/native/LoadingIndicator.js | 2 +- .../components/web/InlineDialogFailure.js | 2 +- .../base/react/components/web/Watermarks.js | 2 +- .../base/react/prop-types-polyfill.js | 8 + .../conference/components/Conference.web.js | 2 +- .../components/ContactListPanel.web.js | 2 +- .../components/DesktopPicker.js | 2 +- .../feedback/components/FeedbackButton.web.js | 2 +- .../filmstrip/components/Filmstrip.native.js | 2 +- .../filmstrip/components/Filmstrip.web.js | 2 +- .../invite/components/AddPeopleDialog.web.js | 4 +- .../components/LargeVideo.native.js | 2 +- .../large-video/components/LargeVideo.web.js | 2 +- .../components/NetworkActivityIndicator.js | 2 +- .../components/AbstractPageReloadOverlay.js | 2 +- .../overlay/components/ReloadButton.js | 2 +- react/features/overlay/reducer.js | 4 +- .../PasswordRequiredPrompt.native.js | 2 +- .../components/PasswordRequiredPrompt.web.js | 2 +- .../components/RoomLockPrompt.native.js | 2 +- .../speaker-stats/components/SpeakerStats.js | 2 +- react/features/toolbox/components/Notice.js | 2 +- .../toolbox/components/PrimaryToolbar.web.js | 4 +- .../toolbox/components/ProfileButton.web.js | 2 +- .../components/SecondaryToolbar.web.js | 4 +- .../components/StatelessToolbar.web.js | 4 +- .../components/StatelessToolbarButton.js | 2 +- .../toolbox/components/Toolbar.web.js | 6 +- .../toolbox/components/ToolbarButton.web.js | 4 +- .../toolbox/components/Toolbox.web.js | 8 +- .../components/HideNotificationBarStyle.js | 2 +- .../components/NoMobileApp.js | 2 +- .../components/PluginRequiredBrowser.js | 2 +- .../components/UnsupportedDesktopBrowser.js | 2 +- .../components/UnsupportedMobileBrowser.js | 2 +- .../welcome/components/AbstractWelcomePage.js | 2 +- .../welcome/components/BlankPage.native.js | 2 +- .../LocalVideoTrackUnderlay.native.js | 2 +- react/index.native.js | 5 +- 60 files changed, 3327 insertions(+), 557 deletions(-) create mode 100644 flow-typed/npm/prop-types_v15.x.x.js create mode 100644 react/features/base/react/prop-types-polyfill.js diff --git a/.flowconfig b/.flowconfig index 25b1dc330..34d43bae7 100644 --- a/.flowconfig +++ b/.flowconfig @@ -14,12 +14,20 @@ .*/Libraries/react-native/React.js .*/Libraries/react-native/ReactNative.js +; Ignore polyfills +.*/Libraries/polyfills/.* + ; Ignore packages in node_modules which we (i.e. the jitsi-meet project) have ; seen to cause errors and we have chosen not to fix. -.*/node_modules/babel-.* -.*/node_modules/bower/.* -.*/node_modules/jsonlint/.* -.*/node_modules/promise/index.js.flow +.*/node_modules/@atlassian +.*/node_modules/bower/lib/node_modules/bower-json/test/.* +.*/node_modules/jsonlint/test/.* + +; FIXME Remove once we update past this commit: +; https://github.com/facebook/react-native/commit/df8d0d1db9203cc87ad3682e6138b2a9ed714365 +.*/node_modules/react-native/local-cli/link/link.js + +.*/node_modules/react-native-keep-awake/.* .*/node_modules/styled-components/.* .*/\.git/.* @@ -29,15 +37,12 @@ [libs] node_modules/react-native/Libraries/react-native/react-native-interface.js node_modules/react-native/flow -flow/ [options] emoji=true module.system=haste -experimental.strict_type_args=true - ; FIXME: munge_underscores should be false but right now there are some errors ; if we change the value to false ; Treats class properties with underscore as private. Disabled because currently @@ -45,15 +50,22 @@ experimental.strict_type_args=true ; munge_underscores=false munge_underscores=true +; FIXME Remove once we update past this commit: +; https://github.com/facebook/react-native/commit/df8d0d1db9203cc87ad3682e6138b2a9ed714365 +module.name_mapper='^./link/link$' -> 'emptyObject' + module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' suppress_type=$FlowIssue suppress_type=$FlowFixMe +suppress_type=$FlowFixMeProps +suppress_type=$FlowFixMeState suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-8]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-8]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(5[0-3]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(5[0-3]\\|[1-4][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native_oss[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError suppress_comment=\\(.\\|\n\\)*\\$FlowDisableNextLine unsafe.enable_getters_and_setters=true @@ -71,4 +83,4 @@ module.file_ext=.jsx module.file_ext=.json [version] -^0.38.0 +^0.53.0 diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java index 9cc41b1ee..3c2188cd2 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetView.java @@ -94,7 +94,7 @@ public class JitsiMeetView extends FrameLayout { = ReactInstanceManager.builder() .setApplication(application) .setBundleAssetName("index.android.bundle") - .setJSMainModuleName("index.android") + .setJSMainModulePath("index.android") .addPackage(new com.corbt.keepawake.KCKeepAwakePackage()) .addPackage(new com.facebook.react.shell.MainReactPackage()) .addPackage(new com.oblador.vectoricons.VectorIconsPackage()) diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactPackageAdapter.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactPackageAdapter.java index 834017530..381e396d7 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactPackageAdapter.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactPackageAdapter.java @@ -26,11 +26,6 @@ import java.util.Collections; import java.util.List; public class ReactPackageAdapter implements ReactPackage { - @Override - public List> createJSModules() { - return Collections.emptyList(); - } - @Override public List createNativeModules( ReactApplicationContext reactContext) { diff --git a/app.js b/app.js index d862b419b..8a60a26ba 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,11 @@ /* application specific logic */ +// FIXME: remove once atlaskit work with React 16 +// It seems that @atlaskit/icon is importing PropTypes from React, but it +// happens through some glyph coffee script template. It could be that more +// things are broken there (not only the icon). +import './react/features/base/react/prop-types-polyfill.js'; + import 'jquery'; import 'jquery-contextmenu'; import 'jquery-ui'; diff --git a/flow-typed/npm/lodash_v4.x.x.js b/flow-typed/npm/lodash_v4.x.x.js index 7bdebcd43..0a7ce632f 100644 --- a/flow-typed/npm/lodash_v4.x.x.js +++ b/flow-typed/npm/lodash_v4.x.x.js @@ -1,30 +1,94 @@ -// flow-typed signature: 4420d5c49e3270b55524360665da4981 -// flow-typed version: 9821eaaefe/lodash_v4.x.x/flow_>=v0.38.x <=v0.46.x +// flow-typed signature: 350011086a8f7f4dfc6c85c33627094c +// flow-typed version: 30e72b3fd6/lodash_v4.x.x/flow_>=v0.47.x <=v0.54.x + +declare module "lodash" { + 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 + + declare type __CurriedFunction4 = + & ((...r: [AA]) => CurriedFunction3) + & ((...r: [AA, BB]) => CurriedFunction2) + & ((...r: [AA, BB, CC]) => CurriedFunction1) + & ((...r: [AA, BB, CC, DD]) => R) + declare type CurriedFunction4 = __CurriedFunction4 + + declare type __CurriedFunction5 = + & ((...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 + + declare type __CurriedFunction6 = + & ((...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 + + 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 Flow = ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, fg: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, ...rest: Array) => UnaryFn) + +declare type FlowRight = & ((fg: UnaryFn, ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, ...rest: Array) => UnaryFn) + -declare module 'lodash' { declare type TemplateSettings = { escape?: RegExp, evaluate?: RegExp, imports?: Object, interpolate?: RegExp, - variable?: string, + variable?: string }; declare type TruncateOptions = { length?: number, omission?: string, - separator?: RegExp|string, + separator?: RegExp | string }; declare type DebounceOptions = { - leading?: bool, + leading?: boolean, maxWait?: number, - trailing?: bool, + trailing?: boolean }; declare type ThrottleOptions = { - leading?: bool, - trailing?: bool, + leading?: boolean, + trailing?: boolean }; declare type NestedArray = Array>; @@ -39,7 +103,10 @@ declare module 'lodash' { | matchesPropertyIterateeShorthand | propertyIterateeShorthand; - declare type OIterateeWithResult = Object|string|((value: V, key: string, object: O) => R); + declare type OIterateeWithResult = + | Object + | string + | ((value: V, key: string, object: O) => R); declare type OIteratee = OIterateeWithResult; declare type OFlatMapIteratee = OIterateeWithResult>; @@ -50,465 +117,3089 @@ declare module 'lodash' { | 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 FlatMapIteratee = ((item: T, index: number, array: ?Array) => Array)|Object|string; - declare type Comparator = (item: T, item2: T) => bool; + declare type ValueOnlyIteratee = _ValueOnlyIteratee | string; + declare type _Iteratee = ( + item: T, + index: number, + array: ?Array + ) => mixed; + declare type Iteratee = _Iteratee | Object | string; + declare type FlatMapIteratee = + | ((item: T, index: number, array: ?Array) => Array) + | Object + | string; + declare type Comparator = (item: T, item2: T) => boolean; - declare type MapIterator = + declare type MapIterator = | ((item: T, index: number, array: Array) => U) | propertyIterateeShorthand; - declare type OMapIterator = + declare type OMapIterator = | ((item: T, key: string, object: O) => U) | propertyIterateeShorthand; declare class Lodash { // Array - chunk(array: ?Array, size?: number): Array>; - compact(array: Array): Array; - concat(base: Array, ...elements: Array): Array; - difference(array: ?Array, values?: Array): Array; - differenceBy(array: ?Array, values: Array, iteratee: ValueOnlyIteratee): T[]; - differenceWith(array: T[], values: T[], comparator?: Comparator): T[]; - drop(array: ?Array, n?: number): Array; - dropRight(array: ?Array, n?: number): Array; - dropRightWhile(array: ?Array, predicate?: Predicate): Array; - dropWhile(array: ?Array, predicate?: Predicate): Array; - fill(array: ?Array, value: U, start?: number, end?: number): Array; - findIndex(array: ?Array, predicate?: Predicate): number; - findLastIndex(array: ?Array, predicate?: Predicate): number; + chunk(array: ?Array, size?: number): Array>, + compact(array: Array): Array, + concat(base: Array, ...elements: Array): Array, + difference(array: ?Array, values?: Array): Array, + differenceBy( + array: ?Array, + values: Array, + iteratee: ValueOnlyIteratee + ): T[], + differenceWith(array: T[], values: T[], comparator?: Comparator): T[], + drop(array: ?Array, n?: number): Array, + dropRight(array: ?Array, n?: number): Array, + dropRightWhile(array: ?Array, predicate?: Predicate): Array, + dropWhile(array: ?Array, predicate?: Predicate): Array, + fill( + array: ?Array, + value: U, + start?: number, + end?: number + ): Array, + findIndex( + array: ?Array, + predicate?: Predicate, + fromIndex?: number + ): number, + findLastIndex( + array: ?Array, + predicate?: Predicate, + fromIndex?: number + ): number, // alias of _.head - first(array: ?Array): T; - flatten(array: Array|X>): Array; - flattenDeep(array: any[]): Array; - flattenDepth(array: any[], depth?: number): any[]; - fromPairs(pairs: Array): Object; - head(array: ?Array): T; - indexOf(array: ?Array, value: T, fromIndex?: number): number; - initial(array: ?Array): Array; - intersection(...arrays: Array>): Array; + first(array: ?Array): T, + flatten(array: Array | X>): Array, + flattenDeep(array: any[]): Array, + flattenDepth(array: any[], depth?: number): any[], + fromPairs(pairs: Array): Object, + head(array: ?Array): T, + indexOf(array: ?Array, value: T, fromIndex?: number): number, + initial(array: ?Array): Array, + intersection(...arrays: Array>): Array, //Workaround until (...parameter: T, parameter2: U) works - intersectionBy(a1: Array, iteratee?: ValueOnlyIteratee): Array; - intersectionBy(a1: Array, a2: Array, iteratee?: ValueOnlyIteratee): Array; - intersectionBy(a1: Array, a2: Array, a3: Array, iteratee?: ValueOnlyIteratee): Array; - intersectionBy(a1: Array, a2: Array, a3: Array, a4: Array, iteratee?: ValueOnlyIteratee): Array; + intersectionBy(a1: Array, iteratee?: ValueOnlyIteratee): Array, + intersectionBy( + a1: Array, + a2: Array, + iteratee?: ValueOnlyIteratee + ): Array, + intersectionBy( + a1: Array, + a2: Array, + a3: Array, + iteratee?: ValueOnlyIteratee + ): Array, + intersectionBy( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + iteratee?: ValueOnlyIteratee + ): Array, //Workaround until (...parameter: T, parameter2: U) works - intersectionWith(a1: Array, comparator: Comparator): Array; - intersectionWith(a1: Array, a2: Array, comparator: Comparator): Array; - intersectionWith(a1: Array, a2: Array, a3: Array, comparator: Comparator): Array; - intersectionWith(a1: Array, a2: Array, a3: Array, a4: Array, comparator: Comparator): Array; - join(array: ?Array, separator?: string): string; - last(array: ?Array): T; - lastIndexOf(array: ?Array, value: T, fromIndex?: number): number; - nth(array: T[], n?: number): T; - pull(array: ?Array, ...values?: Array): Array; - pullAll(array: ?Array, values: Array): Array; - pullAllBy(array: ?Array, values: Array, iteratee?: ValueOnlyIteratee): Array; - pullAllWith(array?: T[], values: T[], comparator?: Function): T[]; - pullAt(array: ?Array, ...indexed?: Array): Array; - pullAt(array: ?Array, indexed?: Array): Array; - remove(array: ?Array, predicate?: Predicate): Array; - reverse(array: ?Array): Array; - slice(array: ?Array, start?: number, end?: number): Array; - sortedIndex(array: ?Array, value: T): number; - sortedIndexBy(array: ?Array, value: T, iteratee?: ValueOnlyIteratee): number; - sortedIndexOf(array: ?Array, value: T): number; - sortedLastIndex(array: ?Array, value: T): number; - sortedLastIndexBy(array: ?Array, value: T, iteratee?: ValueOnlyIteratee): number; - sortedLastIndexOf(array: ?Array, value: T): number; - sortedUniq(array: ?Array): Array; - sortedUniqBy(array: ?Array, iteratee?: (value: T) => mixed): Array; - tail(array: ?Array): Array; - take(array: ?Array, n?: number): Array; - takeRight(array: ?Array, n?: number): Array; - takeRightWhile(array: ?Array, predicate?: Predicate): Array; - takeWhile(array: ?Array, predicate?: Predicate): Array; - union(...arrays?: Array>): Array; + intersectionWith(a1: Array, comparator: Comparator): Array, + intersectionWith( + a1: Array, + a2: Array, + comparator: Comparator + ): Array, + intersectionWith( + a1: Array, + a2: Array, + a3: Array, + comparator: Comparator + ): Array, + intersectionWith( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + comparator: Comparator + ): Array, + join(array: ?Array, separator?: string): string, + last(array: ?Array): T, + lastIndexOf(array: ?Array, value: T, fromIndex?: number): number, + nth(array: T[], n?: number): T, + pull(array: ?Array, ...values?: Array): Array, + pullAll(array: ?Array, values: Array): Array, + pullAllBy( + array: ?Array, + values: Array, + iteratee?: ValueOnlyIteratee + ): Array, + pullAllWith(array?: T[], values: T[], comparator?: Function): T[], + pullAt(array: ?Array, ...indexed?: Array): Array, + pullAt(array: ?Array, indexed?: Array): Array, + remove(array: ?Array, predicate?: Predicate): Array, + reverse(array: ?Array): Array, + slice(array: ?Array, start?: number, end?: number): Array, + sortedIndex(array: ?Array, value: T): number, + sortedIndexBy( + array: ?Array, + value: T, + iteratee?: ValueOnlyIteratee + ): number, + sortedIndexOf(array: ?Array, value: T): number, + sortedLastIndex(array: ?Array, value: T): number, + sortedLastIndexBy( + array: ?Array, + value: T, + iteratee?: ValueOnlyIteratee + ): number, + sortedLastIndexOf(array: ?Array, value: T): number, + sortedUniq(array: ?Array): Array, + sortedUniqBy(array: ?Array, iteratee?: (value: T) => mixed): Array, + tail(array: ?Array): Array, + take(array: ?Array, n?: number): Array, + takeRight(array: ?Array, n?: number): Array, + takeRightWhile(array: ?Array, predicate?: Predicate): Array, + takeWhile(array: ?Array, predicate?: Predicate): Array, + union(...arrays?: Array>): Array, //Workaround until (...parameter: T, parameter2: U) works - unionBy(a1: Array, iteratee?: ValueOnlyIteratee): Array; - unionBy(a1: Array, a2: Array, iteratee?: ValueOnlyIteratee): Array; - unionBy(a1: Array, a2: Array, a3: Array, iteratee?: ValueOnlyIteratee): Array; - unionBy(a1: Array, a2: Array, a3: Array, a4: Array, iteratee?: ValueOnlyIteratee): Array; + unionBy(a1: Array, iteratee?: ValueOnlyIteratee): Array, + unionBy( + a1: Array, + a2: Array, + iteratee?: ValueOnlyIteratee + ): Array, + unionBy( + a1: Array, + a2: Array, + a3: Array, + iteratee?: ValueOnlyIteratee + ): Array, + unionBy( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + iteratee?: ValueOnlyIteratee + ): Array, //Workaround until (...parameter: T, parameter2: U) works - unionWith(a1: Array, comparator?: Comparator): Array; - unionWith(a1: Array, a2: Array, comparator?: Comparator): Array; - unionWith(a1: Array, a2: Array, a3: Array, comparator?: Comparator): Array; - unionWith(a1: Array, a2: Array, a3: Array, a4: Array, comparator?: Comparator): Array; - uniq(array: ?Array): Array; - uniqBy(array: ?Array, iteratee?: ValueOnlyIteratee): Array; - uniqWith(array: ?Array, comparator?: Comparator): Array; - unzip(array: ?Array): Array; - unzipWith(array: ?Array, iteratee?: Iteratee): Array; - without(array: ?Array, ...values?: Array): Array; - xor(...array: Array>): Array; + unionWith(a1: Array, comparator?: Comparator): Array, + unionWith( + a1: Array, + a2: Array, + comparator?: Comparator + ): Array, + unionWith( + a1: Array, + a2: Array, + a3: Array, + comparator?: Comparator + ): Array, + unionWith( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + comparator?: Comparator + ): Array, + uniq(array: ?Array): Array, + uniqBy(array: ?Array, iteratee?: ValueOnlyIteratee): Array, + uniqWith(array: ?Array, comparator?: Comparator): Array, + unzip(array: ?Array): Array, + unzipWith(array: ?Array, iteratee?: Iteratee): Array, + without(array: ?Array, ...values?: Array): Array, + xor(...array: Array>): Array, //Workaround until (...parameter: T, parameter2: U) works - xorBy(a1: Array, iteratee?: ValueOnlyIteratee): Array; - xorBy(a1: Array, a2: Array, iteratee?: ValueOnlyIteratee): Array; - xorBy(a1: Array, a2: Array, a3: Array, iteratee?: ValueOnlyIteratee): Array; - xorBy(a1: Array, a2: Array, a3: Array, a4: Array, iteratee?: ValueOnlyIteratee): Array; + xorBy(a1: Array, iteratee?: ValueOnlyIteratee): Array, + xorBy( + a1: Array, + a2: Array, + iteratee?: ValueOnlyIteratee + ): Array, + xorBy( + a1: Array, + a2: Array, + a3: Array, + iteratee?: ValueOnlyIteratee + ): Array, + xorBy( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + iteratee?: ValueOnlyIteratee + ): Array, //Workaround until (...parameter: T, parameter2: U) works - xorWith(a1: Array, comparator?: Comparator): Array; - xorWith(a1: Array, a2: Array, comparator?: Comparator): Array; - xorWith(a1: Array, a2: Array, a3: Array, comparator?: Comparator): Array; - xorWith(a1: Array, a2: Array, a3: Array, a4: Array, comparator?: Comparator): Array; - zip(a1: A[], a2: B[]): Array<[A, B]>; - zip(a1: A[], a2: B[], a3: C[]): Array<[A, B, C]>; - zip(a1: A[], a2: B[], a3: C[], a4: D[]): Array<[A, B, C, D]>; - zip(a1: A[], a2: B[], a3: C[], a4: D[], a5: E[]): Array<[A, B, C, D, E]>; + xorWith(a1: Array, comparator?: Comparator): Array, + xorWith( + a1: Array, + a2: Array, + comparator?: Comparator + ): Array, + xorWith( + a1: Array, + a2: Array, + a3: Array, + comparator?: Comparator + ): Array, + xorWith( + a1: Array, + a2: Array, + a3: Array, + a4: Array, + comparator?: Comparator + ): Array, + zip(a1: A[], a2: B[]): Array<[A, B]>, + zip(a1: A[], a2: B[], a3: C[]): Array<[A, B, C]>, + zip(a1: A[], a2: B[], a3: C[], a4: D[]): Array<[A, B, C, D]>, + zip( + a1: A[], + a2: B[], + a3: C[], + a4: D[], + a5: E[] + ): Array<[A, B, C, D, E]>, - zipObject(props?: Array, values?: Array): Object; - zipObjectDeep(props?: any[], values?: any): Object; + zipObject(props?: Array, values?: Array): Object, + zipObjectDeep(props?: any[], values?: any): Object, //Workaround until (...parameter: T, parameter2: U) works - zipWith(a1: NestedArray, iteratee?: Iteratee): Array; - zipWith(a1: NestedArray, a2: NestedArray, iteratee?: Iteratee): Array; - zipWith(a1: NestedArray, a2: NestedArray, a3: NestedArray, iteratee?: Iteratee): Array; - zipWith(a1: NestedArray, a2: NestedArray, a3: NestedArray, a4: NestedArray, iteratee?: Iteratee): Array; + zipWith(a1: NestedArray, iteratee?: Iteratee): Array, + zipWith( + a1: NestedArray, + a2: NestedArray, + iteratee?: Iteratee + ): Array, + zipWith( + a1: NestedArray, + a2: NestedArray, + a3: NestedArray, + iteratee?: Iteratee + ): Array, + zipWith( + a1: NestedArray, + a2: NestedArray, + a3: NestedArray, + a4: NestedArray, + iteratee?: Iteratee + ): Array, // Collection - countBy(array: ?Array, iteratee?: ValueOnlyIteratee): Object; - countBy(object: T, iteratee?: ValueOnlyIteratee): Object; + countBy(array: ?Array, iteratee?: ValueOnlyIteratee): Object, + countBy(object: T, iteratee?: ValueOnlyIteratee): Object, // alias of _.forEach - each(array: ?Array, iteratee?: Iteratee): Array; - each(object: T, iteratee?: OIteratee): T; + each(array: ?Array, iteratee?: Iteratee): Array, + each(object: T, iteratee?: OIteratee): T, // alias of _.forEachRight - eachRight(array: ?Array, iteratee?: Iteratee): Array; - eachRight(object: T, iteratee?: OIteratee): T; - every(array: ?Array, iteratee?: Iteratee): bool; - every(object: T, iteratee?: OIteratee): bool; - filter(array: ?Array, predicate?: Predicate): Array; - filter(object: T, predicate?: OPredicate): Array; - find(array: ?Array, predicate?: Predicate, fromIndex?: number): T|void; - find(object: T, predicate?: OPredicate, fromIndex?: number): V; - findLast(array: ?Array, predicate?: Predicate, fromIndex?: number): T|void; - findLast(object: T, predicate?: OPredicate, fromIndex?: number): V; - flatMap(array: ?Array, iteratee?: FlatMapIteratee): Array; - flatMap(object: T, iteratee?: OFlatMapIteratee): Array; - flatMapDeep(array: ?Array, iteratee?: FlatMapIteratee): Array; - flatMapDeep(object: T, iteratee?: OFlatMapIteratee): Array; - flatMapDepth(array: ?Array, iteratee?: FlatMapIteratee, depth?: number): Array; - flatMapDepth(object: T, iteratee?: OFlatMapIteratee, depth?: number): Array; - forEach(array: ?Array, iteratee?: Iteratee): Array; - forEach(object: T, iteratee?: OIteratee): T; - forEachRight(array: ?Array, iteratee?: Iteratee): Array; - forEachRight(object: T, iteratee?: OIteratee): T; - groupBy(array: ?Array, iteratee?: ValueOnlyIteratee): {[key: V]: Array}; - groupBy(object: T, iteratee?: ValueOnlyIteratee): {[key: V]: Array}; - includes(array: ?Array, value: T, fromIndex?: number): bool; - includes(object: T, value: any, fromIndex?: number): bool; - includes(str: string, value: string, fromIndex?: number): bool; - invokeMap(array: ?Array, path: ((value: T) => Array|string)|Array|string, ...args?: Array): Array; - invokeMap(object: T, path: ((value: any) => Array|string)|Array|string, ...args?: Array): Array; - keyBy(array: ?Array, iteratee?: ValueOnlyIteratee): {[key: V]: ?T}; - keyBy(object: T, iteratee?: ValueOnlyIteratee): {[key: V]: ?A}; - map(array: ?Array, iteratee?: MapIterator): Array; - map(object: ?T, iteratee?: OMapIterator): Array; - map(str: ?string, iteratee?: (char: string, index: number, str: string) => any): string; - orderBy(array: ?Array, iteratees?: Array>|string, orders?: Array<'asc'|'desc'>|string): Array; - orderBy(object: T, iteratees?: Array>|string, orders?: Array<'asc'|'desc'>|string): Array; - partition(array: ?Array, predicate?: Predicate): NestedArray; - partition(object: T, predicate?: OPredicate): NestedArray; - reduce(array: ?Array, iteratee?: (accumulator: U, value: T, index: number, array: ?Array) => U, accumulator?: U): U; - reduce(object: T, iteratee?: (accumulator: U, value: any, key: string, object: T) => U, accumulator?: U): U; - reduceRight(array: ?Array, iteratee?: (accumulator: U, value: T, index: number, array: ?Array) => U, accumulator?: U): U; - reduceRight(object: T, iteratee?: (accumulator: U, value: any, key: string, object: T) => U, accumulator?: U): U; - reject(array: ?Array, predicate?: Predicate): Array; - reject(object: T, predicate?: OPredicate): Array; - sample(array: ?Array): T; - sample(object: T): V; - sampleSize(array: ?Array, n?: number): Array; - sampleSize(object: T, n?: number): Array; - shuffle(array: ?Array): Array; - shuffle(object: T): Array; - size(collection: Array|Object): number; - some(array: ?Array, predicate?: Predicate): bool; - some(object?: ?T, predicate?: OPredicate): bool; - sortBy(array: ?Array, ...iteratees?: Array>): Array; - sortBy(array: ?Array, iteratees?: Array>): Array; - sortBy(object: T, ...iteratees?: Array>): Array; - sortBy(object: T, iteratees?: Array>): Array; + eachRight(array: ?Array, iteratee?: Iteratee): Array, + eachRight(object: T, iteratee?: OIteratee): T, + every(array: ?Array, iteratee?: Iteratee): boolean, + every(object: T, iteratee?: OIteratee): boolean, + filter(array: ?Array, predicate?: Predicate): Array, + filter( + object: T, + predicate?: OPredicate + ): Array, + find( + array: ?Array, + predicate?: Predicate, + fromIndex?: number + ): T | void, + find( + object: T, + predicate?: OPredicate, + fromIndex?: number + ): V, + findLast( + array: ?Array, + predicate?: Predicate, + fromIndex?: number + ): T | void, + findLast( + object: T, + predicate?: OPredicate + ): V, + flatMap(array: ?Array, iteratee?: FlatMapIteratee): Array, + flatMap( + object: T, + iteratee?: OFlatMapIteratee + ): Array, + flatMapDeep( + array: ?Array, + iteratee?: FlatMapIteratee + ): Array, + flatMapDeep( + object: T, + iteratee?: OFlatMapIteratee + ): Array, + flatMapDepth( + array: ?Array, + iteratee?: FlatMapIteratee, + depth?: number + ): Array, + flatMapDepth( + object: T, + iteratee?: OFlatMapIteratee, + depth?: number + ): Array, + forEach(array: ?Array, iteratee?: Iteratee): Array, + forEach(object: T, iteratee?: OIteratee): T, + forEachRight(array: ?Array, iteratee?: Iteratee): Array, + forEachRight(object: T, iteratee?: OIteratee): T, + groupBy( + array: ?Array, + iteratee?: ValueOnlyIteratee + ): { [key: V]: Array }, + groupBy( + object: T, + iteratee?: ValueOnlyIteratee + ): { [key: V]: Array }, + includes(array: ?Array, value: T, fromIndex?: number): boolean, + includes(object: T, value: any, fromIndex?: number): boolean, + includes(str: string, value: string, fromIndex?: number): boolean, + invokeMap( + array: ?Array, + path: ((value: T) => Array | string) | Array | string, + ...args?: Array + ): Array, + invokeMap( + object: T, + path: ((value: any) => Array | string) | Array | string, + ...args?: Array + ): Array, + keyBy( + array: ?Array, + iteratee?: ValueOnlyIteratee + ): { [key: V]: ?T }, + keyBy( + object: T, + iteratee?: ValueOnlyIteratee + ): { [key: V]: ?A }, + map(array: ?Array, iteratee?: MapIterator): Array, + map( + object: ?T, + iteratee?: OMapIterator + ): Array, + map( + str: ?string, + iteratee?: (char: string, index: number, str: string) => any + ): string, + orderBy( + array: ?Array, + iteratees?: Array> | string, + orders?: Array<"asc" | "desc"> | string + ): Array, + orderBy( + object: T, + iteratees?: Array> | string, + orders?: Array<"asc" | "desc"> | string + ): Array, + partition(array: ?Array, predicate?: Predicate): NestedArray, + partition( + object: T, + predicate?: OPredicate + ): NestedArray, + reduce( + array: ?Array, + iteratee?: ( + accumulator: U, + value: T, + index: number, + array: ?Array + ) => U, + accumulator?: U + ): U, + reduce( + object: T, + iteratee?: (accumulator: U, value: any, key: string, object: T) => U, + accumulator?: U + ): U, + reduceRight( + array: ?Array, + iteratee?: ( + accumulator: U, + value: T, + index: number, + array: ?Array + ) => U, + accumulator?: U + ): U, + reduceRight( + object: T, + iteratee?: (accumulator: U, value: any, key: string, object: T) => U, + accumulator?: U + ): U, + reject(array: ?Array, predicate?: Predicate): Array, + reject( + object: T, + predicate?: OPredicate + ): Array, + sample(array: ?Array): T, + sample(object: T): V, + sampleSize(array: ?Array, n?: number): Array, + sampleSize(object: T, n?: number): Array, + shuffle(array: ?Array): Array, + shuffle(object: T): Array, + size(collection: Array | Object): number, + some(array: ?Array, predicate?: Predicate): boolean, + some( + object?: ?T, + predicate?: OPredicate + ): boolean, + sortBy(array: ?Array, ...iteratees?: Array>): Array, + sortBy(array: ?Array, iteratees?: Array>): Array, + sortBy( + object: T, + ...iteratees?: Array> + ): Array, + sortBy(object: T, iteratees?: Array>): Array, // Date - now(): number; + now(): number, // Function - after(n: number, fn: Function): Function; - ary(func: Function, n?: number): Function; - before(n: number, fn: Function): Function; - bind(func: Function, thisArg: any, ...partials: Array): Function; - bindKey(obj: Object, key: string, ...partials: Array): Function; - curry(func: Function, arity?: number): Function; - curryRight(func: Function, arity?: number): Function; - debounce(func: Function, wait?: number, options?: DebounceOptions): Function; - defer(func: Function, ...args?: Array): number; - delay(func: Function, wait: number, ...args?: Array): number; - flip(func: Function): Function; - memoize(func: Function, resolver?: Function): Function; - negate(predicate: Function): Function; - once(func: Function): Function; - overArgs(func: Function, ...transforms: Array): Function; - overArgs(func: Function, transforms: Array): Function; - partial(func: Function, ...partials: any[]): Function; - partialRight(func: Function, ...partials: Array): Function; - partialRight(func: Function, partials: Array): Function; - rearg(func: Function, ...indexes: Array): Function; - rearg(func: Function, indexes: Array): Function; - rest(func: Function, start?: number): Function; - spread(func: Function): Function; - throttle(func: Function, wait?: number, options?: ThrottleOptions): Function; - unary(func: Function): Function; - wrap(value: any, wrapper: Function): Function; + after(n: number, fn: Function): Function, + ary(func: Function, n?: number): Function, + before(n: number, fn: Function): Function, + bind(func: Function, thisArg: any, ...partials: Array): Function, + bindKey(obj: Object, key: string, ...partials: Array): Function, + curry: Curry, + curry(func: Function, arity?: number): Function, + curryRight(func: Function, arity?: number): Function, + debounce( + func: Function, + wait?: number, + options?: DebounceOptions + ): Function, + defer(func: Function, ...args?: Array): number, + delay(func: Function, wait: number, ...args?: Array): number, + flip(func: Function): Function, + memoize(func: Function, resolver?: Function): Function, + negate(predicate: Function): Function, + once(func: Function): Function, + overArgs(func: Function, ...transforms: Array): Function, + overArgs(func: Function, transforms: Array): Function, + partial(func: Function, ...partials: any[]): Function, + partialRight(func: Function, ...partials: Array): Function, + partialRight(func: Function, partials: Array): Function, + rearg(func: Function, ...indexes: Array): Function, + rearg(func: Function, indexes: Array): Function, + rest(func: Function, start?: number): Function, + spread(func: Function): Function, + throttle( + func: Function, + wait?: number, + options?: ThrottleOptions + ): Function, + unary(func: Function): Function, + wrap(value: any, wrapper: Function): Function, // Lang - castArray(value: *): any[]; - 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&{[key:string]:(x:any)=>boolean}): boolean; - eq(value: any, other: any): bool; - gt(value: any, other: any): bool; - gte(value: any, other: any): bool; - isArguments(value: any): bool; - isArray(value: any): bool; - isArrayBuffer(value: any): bool; - isArrayLike(value: any): bool; - isArrayLikeObject(value: any): bool; - isBoolean(value: any): bool; - isBuffer(value: any): bool; - isDate(value: any): bool; - isElement(value: any): bool; - isEmpty(value: any): bool; - isEqual(value: any, other: any): bool; - isEqualWith(value: T, other: U, customizer?: (objValue: any, otherValue: any, key: number|string, object: T, other: U, stack: any) => bool|void): bool; - isError(value: any): bool; - isFinite(value: any): bool; - isFunction(value: Function): true; - isFunction(value: number|string|void|null|Object): false; - isInteger(value: any): bool; - isLength(value: any): bool; - isMap(value: any): bool; - isMatch(object?: ?Object, source: Object): bool; - isMatchWith(object: T, source: U, customizer?: (objValue: any, srcValue: any, key: number|string, object: T, source: U) => bool|void): bool; - isNaN(value: any): bool; - isNative(value: any): bool; - isNil(value: any): bool; - isNull(value: any): bool; - isNumber(value: any): bool; - isObject(value: any): bool; - isObjectLike(value: any): bool; - isPlainObject(value: any): bool; - isRegExp(value: any): bool; - isSafeInteger(value: any): bool; - isSet(value: any): bool; - isString(value: string): true; - isString(value: number|bool|Function|void|null|Object|Array): false; - isSymbol(value: any): bool; - isTypedArray(value: any): bool; - isUndefined(value: any): bool; - isWeakMap(value: any): bool; - isWeakSet(value: any): bool; - lt(value: any, other: any): bool; - lte(value: any, other: any): bool; - 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; + castArray(value: *): any[], + 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 & { [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: 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, + isEqualWith( + value: T, + other: U, + customizer?: ( + objValue: any, + otherValue: any, + key: number | string, + object: T, + other: U, + stack: any + ) => boolean | void + ): boolean, + isError(value: any): boolean, + isFinite(value: any): boolean, + isFunction(value: Function): true, + isFunction(value: number | string | void | null | Object): false, + isInteger(value: any): boolean, + isLength(value: any): boolean, + isMap(value: any): boolean, + 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: 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: number | boolean | Function | void | null | Object | Array + ): 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, + 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; - ceil(number: number, precision?: number): number; - divide(dividend: number, divisor: number): number; - floor(number: number, precision?: number): number; - max(array: ?Array): T; - maxBy(array: ?Array, iteratee?: Iteratee): T; - mean(array: Array<*>): number; - meanBy(array: Array, iteratee?: Iteratee): number; - min(array: ?Array): T; - minBy(array: ?Array, iteratee?: Iteratee): T; - multiply(multiplier: number, multiplicand: number): number; - round(number: number, precision?: number): number; - subtract(minuend: number, subtrahend: number): number; - sum(array: Array<*>): number; - sumBy(array: Array, iteratee?: Iteratee): number; + 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: ?Array): T, + maxBy(array: ?Array, iteratee?: Iteratee): T, + mean(array: Array<*>): number, + meanBy(array: Array, iteratee?: Iteratee): number, + min(array: ?Array): T, + minBy(array: ?Array, iteratee?: Iteratee): T, + multiply(multiplier: number, multiplicand: number): number, + round(number: number, precision?: number): number, + subtract(minuend: number, subtrahend: number): number, + sum(array: Array<*>): number, + sumBy(array: Array, iteratee?: Iteratee): number, // number - clamp(number: number, lower?: number, upper: number): number; - inRange(number: number, start?: number, end: number): bool; - random(lower?: number, upper?: number, floating?: bool): number; + clamp(number: number, lower?: number, upper: number): number, + inRange(number: number, start?: number, end: number): boolean, + random(lower?: number, upper?: number, floating?: boolean): number, // Object - assign(object?: ?Object, ...sources?: Array): Object; - 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(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(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: Array): Array; - at(object?: ?Object, paths: Array): Array; - create(prototype: T, properties?: Object): $Supertype; - defaults(object?: ?Object, ...sources?: Array): Object; - defaultsDeep(object?: ?Object, ...sources?: Array): Object; + assign(object?: ?Object, ...sources?: Array): Object, + 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( + 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( + 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: Array): Array, + at(object?: ?Object, paths: Array): Array, + create(prototype: T, properties?: Object): $Supertype, + defaults(object?: ?Object, ...sources?: Array): Object, + defaultsDeep(object?: ?Object, ...sources?: Array): Object, // alias for _.toPairs - entries(object?: ?Object): NestedArray; + entries(object?: ?Object): NestedArray, // alias for _.toPairsIn - entriesIn(object?: ?Object): NestedArray; + entriesIn(object?: ?Object): NestedArray, // 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; + 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; - findLastKey(object?: ?T, predicate?: OPredicate): string|void; - forIn(object?: ?Object, iteratee?: OIteratee<*>): Object; - forInRight(object?: ?Object, iteratee?: OIteratee<*>): Object; - forOwn(object?: ?Object, iteratee?: OIteratee<*>): Object; - forOwnRight(object?: ?Object, iteratee?: OIteratee<*>): Object; - functions(object?: ?Object): Array; - functionsIn(object?: ?Object): Array; - get(object?: ?Object|?Array, path?: ?Array|string, defaultValue?: any): any; - has(object?: ?Object, path?: ?Array|string): bool; - hasIn(object?: ?Object, path?: ?Array|string): bool; - invert(object?: ?Object, multiVal?: bool): Object; - invertBy(object: ?Object, iteratee?: Function): Object; - invoke(object?: ?Object, path?: ?Array|string, ...args?: Array): any; - keys(object?: ?Object): Array; - keysIn(object?: ?Object): Array; - mapKeys(object?: ?Object, iteratee?: OIteratee<*>): Object; - mapValues(object?: ?Object, iteratee?: OIteratee<*>): Object; - merge(object?: ?Object, ...sources?: Array): Object; - 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: Array): Object; - omit(object?: ?Object, props: Array): Object; - omitBy(object?: ?T, predicate?: OPredicate): Object; - pick(object?: ?Object, ...props: Array): Object; - pick(object?: ?Object, props: Array): Object; - pickBy(object?: ?T, predicate?: OPredicate): Object; - result(object?: ?Object, path?: ?Array|string, defaultValue?: any): any; - set(object?: ?Object, path?: ?Array|string, value: any): Object; - setWith(object: T, path?: ?Array|string, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): Object; - toPairs(object?: ?Object|Array<*>): NestedArray; - toPairsIn(object?: ?Object): NestedArray; - transform(collection: Object|Array, iteratee?: OIteratee<*>, accumulator?: any): any; - unset(object?: ?Object, path?: ?Array|string): bool; - update(object: Object, path: string[]|string, updater: Function): Object; - updateWith(object: Object, path: string[]|string, updater: Function, customizer?: Function): Object; - values(object?: ?Object): Array; - valuesIn(object?: ?Object): Array; + 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, + findLastKey( + object?: ?T, + predicate?: OPredicate + ): string | void, + forIn(object?: ?Object, iteratee?: OIteratee<*>): Object, + forInRight(object?: ?Object, iteratee?: OIteratee<*>): Object, + forOwn(object?: ?Object, iteratee?: OIteratee<*>): Object, + forOwnRight(object?: ?Object, iteratee?: OIteratee<*>): Object, + functions(object?: ?Object): Array, + functionsIn(object?: ?Object): Array, + get( + object?: ?Object | ?Array, + path?: ?Array | string, + defaultValue?: any + ): any, + has(object?: ?Object, path?: ?Array | string): boolean, + hasIn(object?: ?Object, path?: ?Array | string): boolean, + invert(object?: ?Object, multiVal?: boolean): Object, + invertBy(object: ?Object, iteratee?: Function): Object, + invoke( + object?: ?Object, + path?: ?Array | string, + ...args?: Array + ): any, + keys(object?: ?Object): Array, + keysIn(object?: ?Object): Array, + mapKeys(object?: ?Object, iteratee?: OIteratee<*>): Object, + mapValues(object?: ?Object, iteratee?: OIteratee<*>): Object, + merge(object?: ?Object, ...sources?: Array): Object, + 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: Array): Object, + omit(object?: ?Object, props: Array): Object, + omitBy( + object?: ?T, + predicate?: OPredicate + ): Object, + pick(object?: ?Object, ...props: Array): Object, + pick(object?: ?Object, props: Array): Object, + pickBy( + object?: ?T, + predicate?: OPredicate + ): Object, + result( + object?: ?Object, + path?: ?Array | string, + defaultValue?: any + ): any, + set(object?: ?Object, path?: ?Array | string, value: any): Object, + setWith( + object: T, + path?: ?Array | string, + value: any, + customizer?: (nsValue: any, key: string, nsObject: T) => any + ): Object, + toPairs(object?: ?Object | Array<*>): NestedArray, + toPairsIn(object?: ?Object): NestedArray, + transform( + collection: Object | Array, + iteratee?: OIteratee<*>, + accumulator?: any + ): any, + unset(object?: ?Object, path?: ?Array | string): boolean, + update(object: Object, path: string[] | string, updater: Function): Object, + updateWith( + object: Object, + path: string[] | string, + updater: Function, + customizer?: Function + ): Object, + 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; + (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; - capitalize(string?: string): string; - deburr(string?: string): string; - endsWith(string?: string, target?: string, position?: number): bool; - escape(string?: string): string; - escapeRegExp(string?: string): string; - kebabCase(string?: string): string; - lowerCase(string?: string): string; - lowerFirst(string?: string): string; - 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; - replace(string?: string, pattern: RegExp|string, replacement: ((string: string) => string)|string): string; - snakeCase(string?: string): string; - split(string?: string, separator: RegExp|string, limit?: number): Array; - startCase(string?: string): string; - startsWith(string?: string, target?: string, position?: number): bool; - template(string?: string, options?: TemplateSettings): Function; - toLower(string?: string): string; - toUpper(string?: string): string; - trim(string?: string, chars?: string): string; - trimEnd(string?: string, chars?: string): string; - trimStart(string?: string, chars?: string): string; - truncate(string?: string, options?: TruncateOptions): string; - unescape(string?: string): string; - upperCase(string?: string): string; - upperFirst(string?: string): string; - words(string?: string, pattern?: RegExp|string): Array; + camelCase(string?: ?string): string, + capitalize(string?: string): string, + deburr(string?: string): string, + endsWith(string?: string, target?: string, position?: number): boolean, + escape(string?: string): string, + escapeRegExp(string?: string): string, + kebabCase(string?: string): string, + lowerCase(string?: string): string, + lowerFirst(string?: string): string, + 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, + replace( + string?: string, + pattern: RegExp | string, + replacement: ((string: string) => string) | string + ): string, + snakeCase(string?: string): string, + split( + string?: string, + separator: RegExp | string, + limit?: number + ): Array, + startCase(string?: string): string, + startsWith(string?: string, target?: string, position?: number): boolean, + template(string?: string, options?: TemplateSettings): Function, + toLower(string?: string): string, + toUpper(string?: string): string, + trim(string?: string, chars?: string): string, + trimEnd(string?: string, chars?: string): string, + trimStart(string?: string, chars?: string): string, + truncate(string?: string, options?: TruncateOptions): string, + unescape(string?: string): string, + upperCase(string?: string): string, + upperFirst(string?: string): string, + words(string?: string, pattern?: RegExp | string): Array, // Util - attempt(func: Function): any; - bindAll(object?: ?Object, methodNames: Array): Object; - bindAll(object?: ?Object, ...methodNames: Array): Object; - cond(pairs: NestedArray): Function; - conforms(source: Object): Function; - constant(value: T): () => T; - defaultTo(value: T1, defaultValue: T2): T1; + attempt(func: Function, ...args: Array): any, + bindAll(object?: ?Object, methodNames: Array): Object, + bindAll(object?: ?Object, ...methodNames: Array): Object, + cond(pairs: NestedArray): Function, + conforms(source: Object): Function, + constant(value: T): () => T, + 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; - defaultTo(value: T1, defaultValue: T2): T2; - flow(...funcs?: Array): Function; - flow(funcs?: Array): Function; - flowRight(...funcs?: Array): Function; - flowRight(funcs?: Array): Function; - identity(value: T): T; - iteratee(func?: any): Function; - matches(source: Object): Function; - matchesProperty(path?: ?Array|string, srcValue: any): Function; - method(path?: ?Array|string, ...args?: Array): Function; - methodOf(object?: ?Object, ...args?: Array): Function; - mixin(object?: T, source: Object, options?: { chain: bool }): T; - noConflict(): Lodash; - noop(...args: Array): void; - nthArg(n?: number): Function; - over(...iteratees: Array): Function; - over(iteratees: Array): Function; - overEvery(...predicates: Array): Function; - overEvery(predicates: Array): Function; - overSome(...predicates: Array): Function; - overSome(predicates: Array): Function; - property(path?: ?Array|string): 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; + defaultTo(value: T1, defaultValue: T2): T1 | T2, + defaultTo(value: T1, defaultValue: T2): T2, + flow: Flow, + flow(funcs?: Array): Function, + flowRight: FlowRight, + flowRight(funcs?: Array): Function, + identity(value: T): T, + iteratee(func?: any): Function, + matches(source: Object): Function, + matchesProperty(path?: ?Array | string, srcValue: any): Function, + method(path?: ?Array | string, ...args?: Array): Function, + methodOf(object?: ?Object, ...args?: Array): Function, + mixin( + object?: T, + source: Object, + options?: { chain: boolean } + ): T, + noConflict(): Lodash, + noop(...args: Array): void, + nthArg(n?: number): Function, + over(...iteratees: Array): Function, + over(iteratees: Array): Function, + overEvery(...predicates: Array): Function, + overEvery(predicates: Array): Function, + overSome(...predicates: Array): Function, + overSome(predicates: Array): Function, + property(path?: ?Array | string): 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: Array): Array; - times(n: number, iteratee: ((i: number) => T)): Array; - toPath(value: any): Array; - uniqueId(prefix?: string): string; + stubArray(): Array<*>, + stubFalse(): false, + stubObject(): {}, + stubString(): "", + stubTrue(): true, + times(n: number, ...rest: Array): Array, + times(n: number, iteratee: (i: number) => T): Array, + toPath(value: any): Array, + uniqueId(prefix?: string): string, // Properties - VERSION: string; - templateSettings: TemplateSettings; + VERSION: string, + templateSettings: TemplateSettings } declare var exports: Lodash; } + +declare module "lodash/fp" { + 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 + + declare type __CurriedFunction4 = + & ((...r: [AA]) => CurriedFunction3) + & ((...r: [AA, BB]) => CurriedFunction2) + & ((...r: [AA, BB, CC]) => CurriedFunction1) + & ((...r: [AA, BB, CC, DD]) => R) + declare type CurriedFunction4 = __CurriedFunction4 + + declare type __CurriedFunction5 = + & ((...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 + + declare type __CurriedFunction6 = + & ((...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 + + 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 Flow = ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, fg: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, bc: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, ...rest: Array) => UnaryFn) + + declare type FlowRight = & ((fg: UnaryFn, ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) + & ((ab: UnaryFn, ...rest: Array) => UnaryFn) + + 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 NestedArray = Array>; + + declare type matchesIterateeShorthand = Object; + declare type matchesPropertyIterateeShorthand = [string, any]; + declare type propertyIterateeShorthand = string; + + declare type OPredicate = + | ((value: A) => any) + | matchesIterateeShorthand + | matchesPropertyIterateeShorthand + | propertyIterateeShorthand; + + declare type OIterateeWithResult = + | Object + | string + | ((value: V) => R); + declare type OIteratee = OIterateeWithResult; + declare type OFlatMapIteratee = 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 FlatMapIteratee = + | ((item: T) => Array) + | Object + | string; + 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: Array) => Array>, + chunk(size: number, array: Array): Array>, + compact(array: Array): Array, + concat | T, B: Array | U>(base: A): (elements: B) => Array, + concat | T, B: Array | U>(base: A, elements: B): Array, + difference(values: Array): (array: Array) => Array, + difference(values: Array, array: Array): Array, + differenceBy(iteratee: ValueOnlyIteratee): ((values: Array) => (array: Array) => T[]) & ((values: Array, array: Array) => T[]), + differenceBy(iteratee: ValueOnlyIteratee, values: Array): (array: Array) => T[], + differenceBy(iteratee: ValueOnlyIteratee, values: Array, array: Array): T[], + differenceWith(values: T[]): ((comparator: Comparator) => (array: T[]) => T[]) & ((comparator: Comparator, array: T[]) => T[]), + differenceWith(values: T[], comparator: Comparator): (array: T[]) => T[], + differenceWith(values: T[], comparator: Comparator, array: T[]): T[], + drop(n: number): (array: Array) => Array, + drop(n: number, array: Array): Array, + dropLast(n: number): (array: Array) => Array, + dropLast(n: number, array: Array): Array, + dropRight(n: number): (array: Array) => Array, + dropRight(n: number, array: Array): Array, + dropRightWhile(predicate: Predicate): (array: Array) => Array, + dropRightWhile(predicate: Predicate, array: Array): Array, + dropWhile(predicate: Predicate): (array: Array) => Array, + dropWhile(predicate: Predicate, array: Array): Array, + dropLastWhile(predicate: Predicate): (array: Array) => Array, + dropLastWhile(predicate: Predicate, array: Array): 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: Array) => number, + findIndex(predicate: Predicate, array: Array): number, + findIndexFrom(predicate: Predicate): ((fromIndex: number) => (array: Array) => number) & ((fromIndex: number, array: Array) => number), + findIndexFrom(predicate: Predicate, fromIndex: number): (array: Array) => number, + findIndexFrom(predicate: Predicate, fromIndex: number, array: Array): number, + findLastIndex(predicate: Predicate): (array: Array) => number, + findLastIndex(predicate: Predicate, array: Array): number, + findLastIndexFrom(predicate: Predicate): ((fromIndex: number) => (array: Array) => number) & ((fromIndex: number, array: Array) => number), + findLastIndexFrom(predicate: Predicate, fromIndex: number): (array: Array) => number, + findLastIndexFrom(predicate: Predicate, fromIndex: number, array: Array): number, + // alias of _.head + first(array: Array): T, + flatten(array: Array | X>): Array, + unnest(array: Array | X>): Array, + flattenDeep(array: any[]): Array, + flattenDepth(depth: number): (array: any[]) => any[], + flattenDepth(depth: number, array: any[]): any[], + fromPairs(pairs: Array): Object, + head(array: Array): T, + indexOf(value: T): (array: Array) => number, + indexOf(value: T, array: Array): number, + indexOfFrom(value: T): ((fromIndex: number) => (array: Array) => number) & ((fromIndex: number, array: Array) => number), + indexOfFrom(value: T, fromIndex: number): (array: Array) => number, + indexOfFrom(value: T, fromIndex: number, array: Array): number, + initial(array: Array): Array, + init(array: Array): Array, + intersection(a1: Array): (a2: Array) => Array, + intersection(a1: Array, a2: Array): Array, + intersectionBy(iteratee: ValueOnlyIteratee): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + intersectionBy(iteratee: ValueOnlyIteratee, a1: Array): (a2: Array) => Array, + intersectionBy(iteratee: ValueOnlyIteratee, a1: Array, a2: Array): Array, + intersectionWith(comparator: Comparator): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + intersectionWith(comparator: Comparator, a1: Array): (a2: Array) => Array, + intersectionWith(comparator: Comparator, a1: Array, a2: Array): Array, + join(separator: string): (array: Array) => string, + join(separator: string, array: Array): string, + last(array: Array): T, + lastIndexOf(value: T): (array: Array) => number, + lastIndexOf(value: T, array: Array): number, + lastIndexOfFrom(value: T): ((fromIndex: number) => (array: Array) => number) & ((fromIndex: number, array: Array) => number), + lastIndexOfFrom(value: T, fromIndex: number): (array: Array) => number, + lastIndexOfFrom(value: T, fromIndex: number, array: Array): number, + nth(n: number): (array: T[]) => T, + nth(n: number, array: T[]): T, + pull(value: T): (array: Array) => Array, + pull(value: T, array: Array): Array, + pullAll(values: Array): (array: Array) => Array, + pullAll(values: Array, array: Array): Array, + pullAllBy(iteratee: ValueOnlyIteratee): ((values: Array) => (array: Array) => Array) & ((values: Array, array: Array) => Array), + pullAllBy(iteratee: ValueOnlyIteratee, values: Array): (array: Array) => Array, + pullAllBy(iteratee: ValueOnlyIteratee, values: Array, array: Array): Array, + pullAllWith(comparator: Function): ((values: T[]) => (array: T[]) => T[]) & ((values: T[], array: T[]) => T[]), + pullAllWith(comparator: Function, values: T[]): (array: T[]) => T[], + pullAllWith(comparator: Function, values: T[], array: T[]): T[], + 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: Array) => Array) & ((end: number, array: Array) => Array), + slice(start: number, end: number): (array: Array) => Array, + slice(start: number, end: number, array: Array): Array, + sortedIndex(value: T): (array: Array) => number, + sortedIndex(value: T, array: Array): number, + sortedIndexBy(iteratee: ValueOnlyIteratee): ((value: T) => (array: Array) => number) & ((value: T, array: Array) => number), + sortedIndexBy(iteratee: ValueOnlyIteratee, value: T): (array: Array) => number, + sortedIndexBy(iteratee: ValueOnlyIteratee, value: T, array: Array): number, + sortedIndexOf(value: T): (array: Array) => number, + sortedIndexOf(value: T, array: Array): number, + sortedLastIndex(value: T): (array: Array) => number, + sortedLastIndex(value: T, array: Array): number, + sortedLastIndexBy(iteratee: ValueOnlyIteratee): ((value: T) => (array: Array) => number) & ((value: T, array: Array) => number), + sortedLastIndexBy(iteratee: ValueOnlyIteratee, value: T): (array: Array) => number, + sortedLastIndexBy(iteratee: ValueOnlyIteratee, value: T, array: Array): number, + sortedLastIndexOf(value: T): (array: Array) => number, + sortedLastIndexOf(value: T, array: Array): number, + sortedUniq(array: Array): Array, + sortedUniqBy(iteratee: (value: T) => mixed): (array: Array) => Array, + sortedUniqBy(iteratee: (value: T) => mixed, array: Array): Array, + tail(array: Array): Array, + take(n: number): (array: Array) => Array, + take(n: number, array: Array): Array, + takeRight(n: number): (array: Array) => Array, + takeRight(n: number, array: Array): Array, + takeLast(n: number): (array: Array) => Array, + takeLast(n: number, array: Array): Array, + takeRightWhile(predicate: Predicate): (array: Array) => Array, + takeRightWhile(predicate: Predicate, array: Array): Array, + takeLastWhile(predicate: Predicate): (array: Array) => Array, + takeLastWhile(predicate: Predicate, array: Array): Array, + takeWhile(predicate: Predicate): (array: Array) => Array, + takeWhile(predicate: Predicate, array: Array): Array, + union(a1: Array): (a2: Array) => Array, + union(a1: Array, a2: Array): Array, + unionBy(iteratee: ValueOnlyIteratee): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + unionBy(iteratee: ValueOnlyIteratee, a1: Array): (a2: Array) => Array, + unionBy(iteratee: ValueOnlyIteratee, a1: Array, a2: Array): Array, + unionWith(comparator: Comparator): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + unionWith(comparator: Comparator, a1: Array): (a2: Array) => Array, + unionWith(comparator: Comparator, a1: Array, a2: Array): Array, + uniq(array: Array): Array, + uniqBy(iteratee: ValueOnlyIteratee): (array: Array) => Array, + uniqBy(iteratee: ValueOnlyIteratee, array: Array): Array, + uniqWith(comparator: Comparator): (array: Array) => Array, + uniqWith(comparator: Comparator, array: Array): Array, + unzip(array: Array): Array, + unzipWith(iteratee: Iteratee): (array: Array) => Array, + unzipWith(iteratee: Iteratee, array: Array): Array, + without(values: Array): (array: Array) => Array, + without(values: Array, array: Array): Array, + xor(a1: Array): (a2: Array) => Array, + xor(a1: Array, a2: Array): Array, + symmetricDifference(a1: Array): (a2: Array) => Array, + symmetricDifference(a1: Array, a2: Array): Array, + xorBy(iteratee: ValueOnlyIteratee): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + xorBy(iteratee: ValueOnlyIteratee, a1: Array): (a2: Array) => Array, + xorBy(iteratee: ValueOnlyIteratee, a1: Array, a2: Array ): Array, + symmetricDifferenceBy(iteratee: ValueOnlyIteratee): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + symmetricDifferenceBy(iteratee: ValueOnlyIteratee, a1: Array): (a2: Array) => Array, + symmetricDifferenceBy(iteratee: ValueOnlyIteratee, a1: Array, a2: Array ): Array, + xorWith(comparator: Comparator): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + xorWith(comparator: Comparator, a1: Array): (a2: Array) => Array, + xorWith(comparator: Comparator, a1: Array, a2: Array): Array, + symmetricDifferenceWith(comparator: Comparator): ((a1: Array) => (a2: Array) => Array) & ((a1: Array, a2: Array) => Array), + symmetricDifferenceWith(comparator: Comparator, a1: Array): (a2: Array) => Array, + symmetricDifferenceWith(comparator: Comparator, a1: Array, a2: Array): Array, + zip(a1: A[]): (a2: B[]) => Array<[A, B]>, + zip(a1: A[], a2: B[]): Array<[A, B]>, + zipAll(arrays: Array>): Array, + zipObject(props: Array): (values: Array) => Object, + zipObject(props: Array, values: Array): Object, + zipObj(props: Array): (values: Array) => Object, + zipObj(props: Array, values: Array): Object, + zipObjectDeep(props: any[]): (values: any) => Object, + zipObjectDeep(props: any[], 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: Array | { [id: any]: T }) => { [string]: number }, + countBy(iteratee: ValueOnlyIteratee, collection: Array | { [id: any]: T }): { [string]: number }, + // alias of _.forEach + each(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => Array, + each(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): Array, + // alias of _.forEachRight + eachRight(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => Array, + eachRight(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): Array, + every(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => boolean, + every(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): boolean, + all(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => boolean, + all(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): boolean, + filter(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => Array, + filter(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): Array, + find(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => T | void, + find(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): T | void, + findFrom(predicate: Predicate | OPredicate): ((fromIndex: number) => (collection: Array | { [id: any]: T }) => T | void) & ((fromIndex: number, collection: Array | { [id: any]: T }) => T | void), + findFrom(predicate: Predicate | OPredicate, fromIndex: number): (collection: Array | { [id: any]: T }) => T | void, + findFrom(predicate: Predicate | OPredicate, fromIndex: number, collection: Array | { [id: any]: T }): T | void, + findLast(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => T | void, + findLast(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): T | void, + findLastFrom(predicate: Predicate | OPredicate): ((fromIndex: number) => (collection: Array | { [id: any]: T }) => T | void) & ((fromIndex: number, collection: Array | { [id: any]: T }) => T | void), + findLastFrom(predicate: Predicate | OPredicate, fromIndex: number): (collection: Array | { [id: any]: T }) => T | void, + findLastFrom(predicate: Predicate | OPredicate, fromIndex: number, collection: Array | { [id: any]: T }): T | void, + flatMap(iteratee: FlatMapIteratee | OFlatMapIteratee): (collection: Array | { [id: any]: T }) => Array, + flatMap(iteratee: FlatMapIteratee | OFlatMapIteratee, collection: Array | { [id: any]: T }): Array, + flatMapDeep(iteratee: FlatMapIteratee | OFlatMapIteratee): (collection: Array | { [id: any]: T }) => Array, + flatMapDeep(iteratee: FlatMapIteratee | OFlatMapIteratee, collection: Array | { [id: any]: T }): Array, + flatMapDepth(iteratee: FlatMapIteratee | OFlatMapIteratee): ((depth: number) => (collection: Array | { [id: any]: T }) => Array) & ((depth: number, collection: Array | { [id: any]: T }) => Array), + flatMapDepth(iteratee: FlatMapIteratee | OFlatMapIteratee, depth: number): (collection: Array | { [id: any]: T }) => Array, + flatMapDepth(iteratee: FlatMapIteratee | OFlatMapIteratee, depth: number, collection: Array | { [id: any]: T }): Array, + forEach(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => Array, + forEach(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): Array, + forEachRight(iteratee: Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => Array, + forEachRight(iteratee: Iteratee | OIteratee, collection: Array | { [id: any]: T }): Array, + groupBy(iteratee: ValueOnlyIteratee): (collection: Array | { [id: any]: T }) => { [key: V]: Array }, + groupBy(iteratee: ValueOnlyIteratee, collection: Array | { [id: any]: T }): { [key: V]: Array }, + includes(value: string): (str: string) => boolean, + includes(value: string, str: string): boolean, + includes(value: T): (collection: Array | { [id: any]: T }) => boolean, + includes(value: T, collection: Array | { [id: any]: T }): boolean, + contains(value: string): (str: string) => boolean, + contains(value: string, str: string): boolean, + contains(value: T): (collection: Array | { [id: any]: T }) => boolean, + contains(value: T, collection: Array | { [id: any]: T }): 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: Array) => boolean) & ((fromIndex: number, collection: Array) => boolean), + includesFrom(value: T, fromIndex: number): (collection: Array) => boolean, + includesFrom(value: T, fromIndex: number, collection: Array): boolean, + invokeMap(path: ((value: T) => Array | string) | Array | string): (collection: Array | { [id: any]: T }) => Array, + invokeMap(path: ((value: T) => Array | string) | Array | string, collection: Array | { [id: any]: T }): Array, + invokeArgsMap(path: ((value: T) => Array | string) | Array | string): ((collection: Array | { [id: any]: T }) => (args: Array) => Array) & ((collection: Array | { [id: any]: T }, args: Array) => Array), + invokeArgsMap(path: ((value: T) => Array | string) | Array | string, collection: Array | { [id: any]: T }): (args: Array) => Array, + invokeArgsMap(path: ((value: T) => Array | string) | Array | string, collection: Array | { [id: any]: T }, args: Array): Array, + keyBy(iteratee: ValueOnlyIteratee): (collection: Array | { [id: any]: T }) => { [key: V]: T }, + keyBy(iteratee: ValueOnlyIteratee, collection: Array | { [id: any]: T }): { [key: V]: T }, + indexBy(iteratee: ValueOnlyIteratee): (collection: Array | { [id: any]: T }) => { [key: V]: T }, + indexBy(iteratee: ValueOnlyIteratee, collection: Array | { [id: any]: T }): { [key: V]: T }, + map(iteratee: MapIterator | OMapIterator): (collection: Array | { [id: any]: T}) => Array, + map(iteratee: MapIterator | OMapIterator, collection: Array | { [id: any]: T}): Array, + map(iteratee: (char: string) => any): (str: string) => string, + map(iteratee: (char: string) => any, str: string): string, + pluck(iteratee: MapIterator | OMapIterator): (collection: Array | { [id: any]: T}) => Array, + pluck(iteratee: MapIterator | OMapIterator, collection: Array | { [id: any]: T}): Array, + pluck(iteratee: (char: string) => any): (str: string) => string, + pluck(iteratee: (char: string) => any, str: string): string, + orderBy(iteratees: Array | OIteratee<*>> | string): ((orders: Array<"asc" | "desc"> | string) => (collection: Array | { [id: any]: T}) => Array) & ((orders: Array<"asc" | "desc"> | string, collection: Array | { [id: any]: T}) => Array), + orderBy(iteratees: Array | OIteratee<*>> | string, orders: Array<"asc" | "desc"> | string): (collection: Array | { [id: any]: T}) => Array, + orderBy(iteratees: Array | OIteratee<*>> | string, orders: Array<"asc" | "desc"> | string, collection: Array | { [id: any]: T}): Array, + partition(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => NestedArray, + partition(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): NestedArray, + reduce(iteratee: (accumulator: U, value: T) => U): ((accumulator: U) => (collection: Array | { [id: any]: T}) => U) & ((accumulator: U, collection: Array | { [id: any]: T}) => U), + reduce(iteratee: (accumulator: U, value: T) => U, accumulator: U): (collection: Array | { [id: any]: T}) => U, + reduce(iteratee: (accumulator: U, value: T) => U, accumulator: U, collection: Array | { [id: any]: T}): U, + reduceRight(iteratee: (value: T, accumulator: U) => U): ((accumulator: U) => (collection: Array | { [id: any]: T }) => U) & ((accumulator: U, collection: Array | { [id: any]: T }) => U), + reduceRight(iteratee: (value: T, accumulator: U) => U, accumulator: U): (collection: Array | { [id: any]: T }) => U, + reduceRight(iteratee: (value: T, accumulator: U) => U, accumulator: U, collection: Array | { [id: any]: T }): U, + reject(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => Array, + reject(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): Array, + sample(collection: Array | { [id: any]: T }): T, + sampleSize(n: number): (collection: Array | { [id: any]: T }) => Array, + sampleSize(n: number, collection: Array | { [id: any]: T }): Array, + shuffle(collection: Array | { [id: any]: T }): Array, + size(collection: Array | Object): number, + some(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => boolean, + some(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): boolean, + any(predicate: Predicate | OPredicate): (collection: Array | { [id: any]: T }) => boolean, + any(predicate: Predicate | OPredicate, collection: Array | { [id: any]: T }): boolean, + sortBy(iteratees: Array | OIteratee> | Iteratee | OIteratee): (collection: Array | { [id: any]: T }) => Array, + sortBy(iteratees: Array | OIteratee> | Iteratee | OIteratee, collection: Array | { [id: any]: T }): 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: Function) => Function, + debounce(wait: number, func: Function): Function, + defer(func: Function): number, + delay(wait: number): (func: Function) => number, + delay(wait: number, func: Function): number, + flip(func: Function): Function, + memoize(func: Function): Function, + negate(predicate: Function): Function, + complement(predicate: Function): Function, + once(func: Function): Function, + overArgs(func: Function): (transforms: Array) => Function, + overArgs(func: Function, transforms: Array): Function, + useWith(func: Function): (transforms: Array) => Function, + useWith(func: Function, transforms: Array): Function, + partial(func: Function): (partials: any[]) => Function, + partial(func: Function, partials: any[]): Function, + partialRight(func: Function): (partials: Array) => Function, + partialRight(func: Function, partials: Array): Function, + rearg(indexes: Array): (func: Function) => Function, + rearg(indexes: Array, 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: Function) => Function, + throttle(wait: number, func: Function): Function, + unary(func: Function): Function, + wrap(wrapper: Function): (value: any) => Function, + wrap(wrapper: Function, value: any): Function, + + // Lang + castArray(value: *): any[], + 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 & { [key: string]: (x: any) => boolean }): (source: T) => boolean, + conformsTo(predicates: T & { [key: string]: (x: any) => boolean }, source: T): boolean, + where(predicates: T & { [key: string]: (x: any) => boolean }): (source: T) => boolean, + where(predicates: T & { [key: string]: (x: any) => boolean }, source: T): boolean, + conforms(predicates: T & { [key: string]: (x: any) => boolean }): (source: T) => boolean, + conforms(predicates: T & { [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: Function): true, + isFunction(value: number | string | void | null | Object): false, + 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: number | boolean | Function | void | null | Object | Array): 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: Array): T, + maxBy(iteratee: Iteratee): (array: Array) => T, + maxBy(iteratee: Iteratee, array: Array): T, + mean(array: Array<*>): number, + meanBy(iteratee: Iteratee): (array: Array) => number, + meanBy(iteratee: Iteratee, array: Array): number, + min(array: Array): T, + minBy(iteratee: Iteratee): (array: Array) => T, + minBy(iteratee: Iteratee, array: Array): 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: Array<*>): number, + sumBy(iteratee: Iteratee): (array: Array) => number, + sumBy(iteratee: Iteratee, array: Array): 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: Array): (object: Object) => Array, + at(paths: Array, object: Object): Array, + props(paths: Array): (object: Object) => Array, + props(paths: Array, object: Object): Array, + paths(paths: Array): (object: Object) => Array, + paths(paths: Array, object: Object): Array, + create(prototype: T): $Supertype, + 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): NestedArray, + // alias for _.toPairsIn + entriesIn(object: Object): NestedArray, + // 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: Array | string): (object: Object | Array) => any, + get(path: Array | string, object: Object | Array): any, + prop(path: Array | string): (object: Object | Array) => any, + prop(path: Array | string, object: Object | Array): any, + path(path: Array | string): (object: Object | Array) => any, + path(path: Array | string, object: Object | Array): any, + getOr(defaultValue: any): ((path: Array | string) => (object: Object | Array) => any) & ((path: Array | string, object: Object | Array) => any), + getOr(defaultValue: any, path: Array | string): (object: Object | Array) => any, + getOr(defaultValue: any, path: Array | string, object: Object | Array): any, + propOr(defaultValue: any): ((path: Array | string) => (object: Object | Array) => any) & ((path: Array | string, object: Object | Array) => any), + propOr(defaultValue: any, path: Array | string): (object: Object | Array) => any, + propOr(defaultValue: any, path: Array | string, object: Object | Array): any, + pathOr(defaultValue: any): ((path: Array | string) => (object: Object | Array) => any) & ((path: Array | string, object: Object | Array) => any), + pathOr(defaultValue: any, path: Array | string): (object: Object | Array) => any, + pathOr(defaultValue: any, path: Array | string, object: Object | Array): any, + has(path: Array | string): (object: Object) => boolean, + has(path: Array | string, object: Object): boolean, + hasIn(path: Array | string): (object: Object) => boolean, + hasIn(path: Array | string, 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: Array | string): (object: Object) => any, + invoke(path: Array | string, object: Object): any, + invokeArgs(path: Array | string): ((object: Object) => (args: Array) => any) & ((object: Object, args: Array) => any), + invokeArgs(path: Array | string, object: Object): (args: Array) => any, + invokeArgs(path: Array | string, object: Object, args: Array): any, + 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: Array): 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: Array) => Object, + mergeAllWith(customizer: (objValue: any, srcValue: any, key: string, object: Object, source: Object) => any | void, objects: Array): Object, + omit(props: Array): (object: Object) => Object, + omit(props: Array, object: Object): Object, + omitAll(props: Array): (object: Object) => Object, + omitAll(props: Array, object: Object): Object, + omitBy(predicate: OPredicate): (object: T) => Object, + omitBy(predicate: OPredicate, object: T): Object, + pick(props: Array): (object: Object) => Object, + pick(props: Array, object: Object): Object, + pickAll(props: Array): (object: Object) => Object, + pickAll(props: Array, object: Object): Object, + pickBy(predicate: OPredicate): (object: T) => Object, + pickBy(predicate: OPredicate, object: T): Object, + result(path: Array | string): (object: Object) => any, + result(path: Array | string, object: Object): any, + set(path: Array | string): ((value: any) => (object: Object) => Object) & ((value: any, object: Object) => Object), + set(path: Array | string, value: any): (object: Object) => Object, + set(path: Array | string, value: any, object: Object): Object, + assoc(path: Array | string): ((value: any) => (object: Object) => Object) & ((value: any, object: Object) => Object), + assoc(path: Array | string, value: any): (object: Object) => Object, + assoc(path: Array | string, value: any, object: Object): Object, + assocPath(path: Array | string): ((value: any) => (object: Object) => Object) & ((value: any, object: Object) => Object), + assocPath(path: Array | string, value: any): (object: Object) => Object, + assocPath(path: Array | string, value: any, object: Object): Object, + setWith(customizer: (nsValue: any, key: string, nsObject: T) => any): ((path: Array | string) => (((value: any) => (object: T) => Object) & ((value: any, object: T) => Object))) & ((path: Array | string, value: any) => (object: T) => Object) & ((path: Array | string, value: any, object: T) => Object), + setWith(customizer: (nsValue: any, key: string, nsObject: T) => any, path: Array | string): ((value: any) => (object: T) => Object) & ((value: any, object: T) => Object), + setWith(customizer: (nsValue: any, key: string, nsObject: T) => any, path: Array | string, value: any): (object: T) => Object, + setWith(customizer: (nsValue: any, key: string, nsObject: T) => any, path: Array | string, value: any, object: T): Object, + toPairs(object: Object | Array<*>): NestedArray, + toPairsIn(object: Object): NestedArray, + transform(iteratee: OIteratee<*>): ((accumulator: any) => (collection: Object | Array) => any) & ((accumulator: any, collection: Object | Array) => any), + transform(iteratee: OIteratee<*>, accumulator: any): (collection: Object | Array) => any, + transform(iteratee: OIteratee<*>, accumulator: any, collection: Object | Array): any, + unset(path: Array | string): (object: Object) => boolean, + unset(path: Array | string, object: Object): boolean, + dissoc(path: Array | string): (object: Object) => boolean, + dissoc(path: Array | string, object: Object): boolean, + dissocPath(path: Array | string): (object: Object) => boolean, + dissocPath(path: Array | string, object: Object): boolean, + update(path: string[] | string): ((updater: Function) => (object: Object) => Object) & ((updater: Function, object: Object) => Object), + update(path: string[] | string, updater: Function): (object: Object) => Object, + update(path: string[] | string, updater: Function, object: Object): Object, + updateWith(customizer: Function): ((path: string[] | string) => (((updater: Function) => (object: Object) => Object) & ((updater: Function, object: Object) => Object))) & ((path: string[] | string, updater: Function) => (object: Object) => Object) & ((path: string[] | string, updater: Function, object: Object) => Object), + updateWith(customizer: Function, path: string[] | string): ((updater: Function) => (object: Object) => Object) & ((updater: Function, object: Object) => Object), + updateWith(customizer: Function, path: string[] | string, updater: Function): (object: Object) => Object, + updateWith(customizer: Function, path: string[] | string, 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: Array): (object: Object) => Object, + bindAll(methodNames: Array, object: Object): Object, + cond(pairs: NestedArray): Function, + constant(value: T): () => T, + always(value: T): () => T, + 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, + defaultTo(defaultValue: T2): (value: T1) => T2, + defaultTo(defaultValue: T2, value: T1): T2, + flow: Flow, + flow(funcs: Array): Function, + pipe: Flow, + pipe(funcs: Array): Function, + flowRight: FlowRight, + flowRight(funcs: Array): Function, + compose: FlowRight, + compose(funcs: Array): Function, + identity(value: T): T, + iteratee(func: any): Function, + matches(source: Object): (object: Object) => boolean, + matches(source: Object, object: Object): boolean, + matchesProperty(path: Array | string): (srcValue: any) => Function, + matchesProperty(path: Array | string, srcValue: any): Function, + propEq(path: Array | string): (srcValue: any) => Function, + propEq(path: Array | string, srcValue: any): Function, + pathEq(path: Array | string): (srcValue: any) => Function, + pathEq(path: Array | string, srcValue: any): Function, + method(path: Array | string): 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: Array): void, + nthArg(n: number): Function, + over(iteratees: Array): Function, + juxt(iteratees: Array): Function, + overEvery(predicates: Array): Function, + allPass(predicates: Array): Function, + overSome(predicates: Array): Function, + anyPass(predicates: Array): Function, + property(path: Array | string): (object: Object | Array) => any, + property(path: Array | string, object: Object | Array): any, + propertyOf(object: Object): (path: Array | string) => Function, + propertyOf(object: Object, path: Array | string): 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 var 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'>; +} \ No newline at end of file diff --git a/flow-typed/npm/prop-types_v15.x.x.js b/flow-typed/npm/prop-types_v15.x.x.js new file mode 100644 index 000000000..113b0b5c4 --- /dev/null +++ b/flow-typed/npm/prop-types_v15.x.x.js @@ -0,0 +1,34 @@ +// flow-typed signature: 3eaa1f24c7397b78a7481992d2cddcb2 +// flow-typed version: a1a20d4928/prop-types_v15.x.x/flow_>=v0.41.x + +type $npm$propTypes$ReactPropsCheckType = ( + props: any, + propName: string, + componentName: string, + href?: string) => ?Error; + +declare module 'prop-types' { + declare var array: React$PropType$Primitive>; + declare var bool: React$PropType$Primitive; + declare var func: React$PropType$Primitive; + declare var number: React$PropType$Primitive; + declare var object: React$PropType$Primitive; + declare var string: React$PropType$Primitive; + declare var any: React$PropType$Primitive; + declare var arrayOf: React$PropType$ArrayOf; + declare var element: React$PropType$Primitive; /* TODO */ + declare var instanceOf: React$PropType$InstanceOf; + declare var node: React$PropType$Primitive; /* TODO */ + declare var objectOf: React$PropType$ObjectOf; + declare var oneOf: React$PropType$OneOf; + declare var oneOfType: React$PropType$OneOfType; + declare var shape: React$PropType$Shape; + + declare function checkPropTypes( + propTypes: $Subtype<{[_: $Keys]: $npm$propTypes$ReactPropsCheckType}>, + values: V, + location: string, + componentName: string, + getStack: ?(() => ?string) + ) : void; +} diff --git a/flow-typed/npm/react-redux_v5.x.x.js b/flow-typed/npm/react-redux_v5.x.x.js index 3536e46ae..2fa2be335 100644 --- a/flow-typed/npm/react-redux_v5.x.x.js +++ b/flow-typed/npm/react-redux_v5.x.x.js @@ -1,5 +1,8 @@ -// flow-typed signature: c0e8d9867aff7576bb7cf63fe60a6af3 -// flow-typed version: 83053e4020/react-redux_v5.x.x/flow_>=v0.30.x <=v0.52.x +// flow-typed signature: 4e93c65cedbfbf7f1ab3fe4e800943d3 +// flow-typed version: 9092387fd2/react-redux_v5.x.x/flow_>=v0.53.x <=v0.53.x + +// flow-typed signature: 8db7b853f57c51094bf0ab8b2650fd9c +// flow-typed version: ab8db5f14d/react-redux_v5.x.x/flow_>=v0.30.x import type { Dispatch, Store } from "redux"; @@ -31,41 +34,30 @@ declare module "react-redux" { declare type Context = { store: Store<*, *> }; - declare type StatelessComponent

= ( - props: P, - context: Context - ) => ?React$Element; - - declare class ConnectedComponent extends React$Component< - void, - OP, - void - > { - static WrappedComponent: Class>, - getWrappedInstance(): React$Component, - static defaultProps: void, + declare class ConnectedComponent extends React$Component { + static WrappedComponent: Class>, + getWrappedInstance(): React$Component

, props: OP, state: void } - declare type ConnectedComponentClass = Class< - ConnectedComponent + declare type ConnectedComponentClass = Class< + ConnectedComponent >; - declare type Connector = { - ( - component: StatelessComponent

- ): ConnectedComponentClass, - ( - component: Class> - ): ConnectedComponentClass - }; + declare type Connector = ( + component: React$ComponentType

+ ) => ConnectedComponentClass; - declare class Provider extends React$Component< - void, - { store: Store, children?: any }, - void - > {} + declare class Provider extends React$Component<{ + store: Store, + children?: any + }> {} + + declare function createProvider( + storeKey?: string, + subKey?: string + ): Provider<*, *>; declare type ConnectOptions = { pure?: boolean, diff --git a/flow-typed/npm/redux_v3.x.x.js b/flow-typed/npm/redux_v3.x.x.js index f6445d9cf..08c122efb 100644 --- a/flow-typed/npm/redux_v3.x.x.js +++ b/flow-typed/npm/redux_v3.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 86993bd000012d3e1ef10d757d16952d -// flow-typed version: a165222d28/redux_v3.x.x/flow_>=v0.33.x +// flow-typed signature: 33b83b6284653250e74578cf4dbe6124 +// flow-typed version: e282e4128f/redux_v3.x.x/flow_>=v0.33.x declare module 'redux' { @@ -11,15 +11,15 @@ declare module 'redux' { */ - declare type DispatchAPI = (action: A) => A; - declare type Dispatch }> = DispatchAPI; + declare export type DispatchAPI = (action: A) => A; + declare export type Dispatch }> = DispatchAPI; - declare type MiddlewareAPI> = { + declare export type MiddlewareAPI> = { dispatch: D; getState(): S; }; - declare type Store> = { + declare export type Store> = { // rewrite MiddlewareAPI members in order to get nicer error messages (intersections produce long messages) dispatch: D; getState(): S; @@ -27,58 +27,58 @@ declare module 'redux' { replaceReducer(nextReducer: Reducer): void }; - declare type Reducer = (state: S, action: A) => S; + declare export type Reducer = (state: S, action: A) => S; - declare type CombinedReducer = (state: $Shape & {} | void, action: A) => S; + declare export type CombinedReducer = (state: $Shape & {} | void, action: A) => S; - declare type Middleware> = + declare export type Middleware> = (api: MiddlewareAPI) => (next: D) => D; - declare type StoreCreator> = { + declare export type StoreCreator> = { (reducer: Reducer, enhancer?: StoreEnhancer): Store; (reducer: Reducer, preloadedState: S, enhancer?: StoreEnhancer): Store; }; - declare type StoreEnhancer> = (next: StoreCreator) => StoreCreator; + declare export type StoreEnhancer> = (next: StoreCreator) => StoreCreator; - declare function createStore(reducer: Reducer, enhancer?: StoreEnhancer): Store; - declare function createStore(reducer: Reducer, preloadedState: S, enhancer?: StoreEnhancer): Store; + declare export function createStore(reducer: Reducer, enhancer?: StoreEnhancer): Store; + declare export function createStore(reducer: Reducer, preloadedState: S, enhancer?: StoreEnhancer): Store; - declare function applyMiddleware(...middlewares: Array>): StoreEnhancer; + declare export function applyMiddleware(...middlewares: Array>): StoreEnhancer; - declare type ActionCreator = (...args: Array) => A; - declare type ActionCreators = { [key: K]: ActionCreator }; + declare export type ActionCreator = (...args: Array) => A; + declare export type ActionCreators = { [key: K]: ActionCreator }; - declare function bindActionCreators, D: DispatchAPI>(actionCreator: C, dispatch: D): C; - declare function bindActionCreators, D: DispatchAPI>(actionCreators: C, dispatch: D): C; + declare export function bindActionCreators, D: DispatchAPI>(actionCreator: C, dispatch: D): C; + declare export function bindActionCreators, D: DispatchAPI>(actionCreators: C, dispatch: D): C; - declare function combineReducers(reducers: O): CombinedReducer<$ObjMap(r: Reducer) => S>, A>; + declare export function combineReducers(reducers: O): CombinedReducer<$ObjMap(r: Reducer) => S>, A>; - declare function compose(ab: (a: A) => B): (a: A) => B - declare function compose( + declare export function compose(ab: (a: A) => B): (a: A) => B + declare export function compose( bc: (b: B) => C, ab: (a: A) => B ): (a: A) => C - declare function compose( + declare export function compose( cd: (c: C) => D, bc: (b: B) => C, ab: (a: A) => B ): (a: A) => D - declare function compose( + declare export function compose( de: (d: D) => E, cd: (c: C) => D, bc: (b: B) => C, ab: (a: A) => B ): (a: A) => E - declare function compose( + declare export function compose( ef: (e: E) => F, de: (d: D) => E, cd: (c: C) => D, bc: (b: B) => C, ab: (a: A) => B ): (a: A) => F - declare function compose( + declare export function compose( fg: (f: F) => G, ef: (e: E) => F, de: (d: D) => E, @@ -86,7 +86,7 @@ declare module 'redux' { bc: (b: B) => C, ab: (a: A) => B ): (a: A) => G - declare function compose( + declare export function compose( gh: (g: G) => H, fg: (f: F) => G, ef: (e: E) => F, @@ -95,7 +95,7 @@ declare module 'redux' { bc: (b: B) => C, ab: (a: A) => B ): (a: A) => H - declare function compose( + declare export function compose( hi: (h: H) => I, gh: (g: G) => H, fg: (f: F) => G, diff --git a/index.android.js b/index.android.js index c212bf9c9..12035cbe4 100644 --- a/index.android.js +++ b/index.android.js @@ -1 +1,26 @@ -export * from './react/index.native'; +// The type field of react-native application loader's React Element is created +// as number and not Symbol, because it's not been defined by the polyfill yet. +// We import the application renderer, before Symbol is defined, in order to use +// number types as well. Otherwise this will result in the invariant exception, +// because fiber thingy will not recognise root react-native component as React +// Element, but as an Object. +// +// See node_modules/react-native/Libraries/polyfills/babelHelpers.js +// :babelHelpers.createRawReactElement - that's where first react-native element +// is created (super early - it's the app loader). +// +// See node_modules/react-native/Libraries/Renderer/ReactNativeFiber-dev.js +// and look for REACT_ELEMENT_TYPE definition - it's defined later when Symbol +// has been defined and type will not match. +// +// As an alternative solution we could stop using/polyfilling Symbols and +// replace with classpath string constants or some kind of a wrapper around +// that. + +import 'react-native/Libraries/ReactNative/renderApplication'; + +// Android doesn't provide Symbol +import 'es6-symbol/implement'; + +import './react/index.native'; + diff --git a/index.ios.js b/index.ios.js index c212bf9c9..56408336f 100644 --- a/index.ios.js +++ b/index.ios.js @@ -1 +1,2 @@ -export * from './react/index.native'; +import './react/index.native'; + diff --git a/ios/Podfile b/ios/Podfile index ed8f1f3dc..da1a0c644 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -7,6 +7,8 @@ target 'JitsiMeet' do pod 'React', :path => '../node_modules/react-native', :subspecs => [ 'Core', + 'BatchedBridge', + 'DevSupport', 'RCTActionSheet', 'RCTAnimation', 'RCTImage', @@ -15,7 +17,7 @@ target 'JitsiMeet' do 'RCTText', 'RCTWebSocket', ] - pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' pod 'react-native-background-timer', :path => '../node_modules/react-native-background-timer' diff --git a/ios/scripts/run-packager.sh b/ios/scripts/run-packager.sh index 5dba33566..cc4718e71 100755 --- a/ios/scripts/run-packager.sh +++ b/ios/scripts/run-packager.sh @@ -11,6 +11,6 @@ if [[ "$CONFIGURATION" = "Debug" ]]; then exit 2 fi else - open -g "$SRCROOT/../../node_modules/react-native/packager/launchPackager.command" || echo "Can't start packager automatically" + open -g "$SRCROOT/../../node_modules/react-native/scripts/launchPackager.command" || echo "Can't start packager automatically" fi fi diff --git a/ios/sdk/sdk.xcodeproj/project.pbxproj b/ios/sdk/sdk.xcodeproj/project.pbxproj index e9f35539a..312768c78 100644 --- a/ios/sdk/sdk.xcodeproj/project.pbxproj +++ b/ios/sdk/sdk.xcodeproj/project.pbxproj @@ -232,7 +232,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/packager/react-native-xcode.sh"; + shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/scripts/react-native-xcode.sh"; }; 26796D8589142D80C8AFDA51 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; diff --git a/package.json b/package.json index a8c9647d3..d1a561f8d 100644 --- a/package.json +++ b/package.json @@ -53,10 +53,10 @@ "nuclear-js": "1.4.0", "postis": "2.2.0", "prop-types": "15.6.0", - "react": "15.6.1", - "react-dom": "15.6.1", + "react": "16.0.0", + "react-dom": "16.0.0", "react-i18next": "4.8.0", - "react-native": "0.42.3", + "react-native": "0.49.5", "react-native-background-timer": "1.3.0", "react-native-callstats": "3.24.6", "react-native-fetch-blob": "0.10.8", @@ -94,7 +94,7 @@ "eslint-plugin-react-native": "3.1.0", "expose-loader": "0.7.3", "file-loader": "1.1.4", - "flow-bin": "0.38.0", + "flow-bin": "0.53.0", "imports-loader": "0.7.1", "node-sass": "3.13.1", "precommit-hook": "3.0.0", diff --git a/react/features/always-on-top/AlwaysOnTop.js b/react/features/always-on-top/AlwaysOnTop.js index 406522f5e..b5d601af9 100644 --- a/react/features/always-on-top/AlwaysOnTop.js +++ b/react/features/always-on-top/AlwaysOnTop.js @@ -59,7 +59,7 @@ const toolbarButtons = { * @class AlwaysOnTop * @extends Component */ -export default class AlwaysOnTop extends Component { +export default class AlwaysOnTop extends Component<*> { /** * Initializes new AlwaysOnTop instance. * diff --git a/react/features/app/functions.web.js b/react/features/app/functions.web.js index 0782116e2..2d9d5b263 100644 --- a/react/features/app/functions.web.js +++ b/react/features/app/functions.web.js @@ -39,7 +39,8 @@ const _INTERCEPT_COMPONENT_RULES = [ * @returns {UnsupportedMobileBrowser|void} If the rule is satisfied then * we should intercept existing component by UnsupportedMobileBrowser. */ - () => { + // eslint-disable-next-line no-unused-vars + state => { const OS = Platform.OS; if (OS === 'android' || OS === 'ios') { @@ -103,7 +104,7 @@ export function _getRouteToRender(stateOrGetState: Object | Function) { */ function _interceptComponent( stateOrGetState: Object | Function, - component: ReactElement<*>) { + component: React$Element<*>) { let result; const state = toState(stateOrGetState); diff --git a/react/features/authentication/components/WaitForOwnerDialog.native.js b/react/features/authentication/components/WaitForOwnerDialog.native.js index 492e4bb9a..f20a7805d 100644 --- a/react/features/authentication/components/WaitForOwnerDialog.native.js +++ b/react/features/authentication/components/WaitForOwnerDialog.native.js @@ -17,7 +17,7 @@ import styles from './styles'; * * See {@link LoginDialog} description for more details. */ -class WaitForOwnerDialog extends Component { +class WaitForOwnerDialog extends Component<*> { /** * WaitForOwnerDialog component's property types. * diff --git a/react/features/base/dialog/components/AbstractDialog.js b/react/features/base/dialog/components/AbstractDialog.js index 7e85432d5..c5bd47c71 100644 --- a/react/features/base/dialog/components/AbstractDialog.js +++ b/react/features/base/dialog/components/AbstractDialog.js @@ -9,7 +9,7 @@ import { DIALOG_PROP_TYPES } from '../constants'; /** * An abstract implementation of a dialog on Web/React and mobile/react-native. */ -export default class AbstractDialog extends Component { +export default class AbstractDialog extends Component<*, *> { /** * {@code AbstractDialog} React {@code Component}'s prop types. * diff --git a/react/features/base/jwt/components/CallOverlay.js b/react/features/base/jwt/components/CallOverlay.js index 7aeb3f057..9e55ad4fa 100644 --- a/react/features/base/jwt/components/CallOverlay.js +++ b/react/features/base/jwt/components/CallOverlay.js @@ -21,7 +21,7 @@ declare var interfaceConfig: Object; * * @extends Component */ -class CallOverlay extends Component { +class CallOverlay extends Component<*, *> { /** * The (reference to the) {@link Audio} which plays/renders the audio * depicting the ringing phase of the call establishment represented by this diff --git a/react/features/base/media/components/native/Video.js b/react/features/base/media/components/native/Video.js index 208583c94..d8c2b15e1 100644 --- a/react/features/base/media/components/native/Video.js +++ b/react/features/base/media/components/native/Video.js @@ -11,7 +11,7 @@ import styles from './styles'; * {@code HTMLVideoElement} and wraps around react-native-webrtc's * {@link RTCView}. */ -export default class Video extends Component { +export default class Video extends Component<*> { /** * {@code Video} component's property types. * diff --git a/react/features/base/react/components/AbstractContainer.js b/react/features/base/react/components/AbstractContainer.js index fcdbd885c..2a78d1282 100644 --- a/react/features/base/react/components/AbstractContainer.js +++ b/react/features/base/react/components/AbstractContainer.js @@ -9,7 +9,7 @@ import React, { Component } from 'react'; * * @extends Component */ -export default class AbstractContainer extends Component { +export default class AbstractContainer extends Component<*> { /** * {@code AbstractContainer} component's property types. * diff --git a/react/features/base/react/components/native/LoadingIndicator.js b/react/features/base/react/components/native/LoadingIndicator.js index fbd12225c..ac2d6e8db 100644 --- a/react/features/base/react/components/native/LoadingIndicator.js +++ b/react/features/base/react/components/native/LoadingIndicator.js @@ -10,7 +10,7 @@ import { ColorPalette } from '../../../styles'; * a suitable visualization of long-running processes with indeterminate amounts * of work to be done. */ -export default class LoadingIndicator extends Component { +export default class LoadingIndicator extends Component<*> { /** * Implements React's {@link Component#render()}. * diff --git a/react/features/base/react/components/web/InlineDialogFailure.js b/react/features/base/react/components/web/InlineDialogFailure.js index 717de872c..1a07abde2 100644 --- a/react/features/base/react/components/web/InlineDialogFailure.js +++ b/react/features/base/react/components/web/InlineDialogFailure.js @@ -11,7 +11,7 @@ declare var interfaceConfig: Object; /** * Inline dialog that represents a failure and allows a retry. */ -class InlineDialogFailure extends Component { +class InlineDialogFailure extends Component<*> { /** * {@code InlineDialogFailure}'s property types. * diff --git a/react/features/base/react/components/web/Watermarks.js b/react/features/base/react/components/web/Watermarks.js index 5f7f3daf1..7467600fb 100644 --- a/react/features/base/react/components/web/Watermarks.js +++ b/react/features/base/react/components/web/Watermarks.js @@ -21,7 +21,7 @@ const _RIGHT_WATERMARK_STYLE = { * A Web Component which renders watermarks such as Jits, brand, powered by, * etc. */ -class Watermarks extends Component { +class Watermarks extends Component<*, *> { static propTypes = { _isGuest: PropTypes.bool, t: PropTypes.func diff --git a/react/features/base/react/prop-types-polyfill.js b/react/features/base/react/prop-types-polyfill.js new file mode 100644 index 000000000..4131cef22 --- /dev/null +++ b/react/features/base/react/prop-types-polyfill.js @@ -0,0 +1,8 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +/* eslint-disable react/no-deprecated */ +if (typeof React.PropTypes === 'undefined') { + React.PropTypes = PropTypes; +} +/* eslint-enable react/no-deprecated */ diff --git a/react/features/conference/components/Conference.web.js b/react/features/conference/components/Conference.web.js index 350ac89c5..78d4f420d 100644 --- a/react/features/conference/components/Conference.web.js +++ b/react/features/conference/components/Conference.web.js @@ -21,7 +21,7 @@ declare var interfaceConfig: Object; /** * The conference page of the Web application. */ -class Conference extends Component { +class Conference extends Component<*> { _onShowToolbar: Function; _originalOnShowToolbar: Function; diff --git a/react/features/contact-list/components/ContactListPanel.web.js b/react/features/contact-list/components/ContactListPanel.web.js index d2c15cc05..968b9cc31 100644 --- a/react/features/contact-list/components/ContactListPanel.web.js +++ b/react/features/contact-list/components/ContactListPanel.web.js @@ -16,7 +16,7 @@ declare var interfaceConfig: Object; * * @extends Component */ -class ContactListPanel extends Component { +class ContactListPanel extends Component<*> { /** * Default values for {@code ContactListPanel} component's properties. * diff --git a/react/features/desktop-picker/components/DesktopPicker.js b/react/features/desktop-picker/components/DesktopPicker.js index 3f3ad8b8c..c896d9603 100644 --- a/react/features/desktop-picker/components/DesktopPicker.js +++ b/react/features/desktop-picker/components/DesktopPicker.js @@ -47,7 +47,7 @@ const VALID_TYPES = Object.keys(TAB_LABELS); * * @extends Component */ -class DesktopPicker extends Component { +class DesktopPicker extends Component<*, *> { /** * DesktopPicker component's property types. * diff --git a/react/features/feedback/components/FeedbackButton.web.js b/react/features/feedback/components/FeedbackButton.web.js index fd770519c..a6b20770d 100644 --- a/react/features/feedback/components/FeedbackButton.web.js +++ b/react/features/feedback/components/FeedbackButton.web.js @@ -12,7 +12,7 @@ import { openFeedbackDialog } from '../actions'; /** * Implements a Web/React Component which renders a feedback button. */ -class FeedbackButton extends Component { +class FeedbackButton extends Component<*> { _onClick: Function; static propTypes = { diff --git a/react/features/filmstrip/components/Filmstrip.native.js b/react/features/filmstrip/components/Filmstrip.native.js index 3d8ded344..7ceceb8c0 100644 --- a/react/features/filmstrip/components/Filmstrip.native.js +++ b/react/features/filmstrip/components/Filmstrip.native.js @@ -16,7 +16,7 @@ import { styles } from './_'; * * @extends Component */ -class Filmstrip extends Component { +class Filmstrip extends Component<*> { /** * Filmstrip component's property types. * diff --git a/react/features/filmstrip/components/Filmstrip.web.js b/react/features/filmstrip/components/Filmstrip.web.js index c42f1d1c5..5f5d9326f 100644 --- a/react/features/filmstrip/components/Filmstrip.web.js +++ b/react/features/filmstrip/components/Filmstrip.web.js @@ -17,7 +17,7 @@ import { shouldRemoteVideosBeVisible } from '../functions'; * * @extends Component */ -class Filmstrip extends Component { +class Filmstrip extends Component<*> { _isHovered: boolean; _notifyOfHoveredStateUpdate: Function; diff --git a/react/features/invite/components/AddPeopleDialog.web.js b/react/features/invite/components/AddPeopleDialog.web.js index f52a79871..19a2c88d7 100644 --- a/react/features/invite/components/AddPeopleDialog.web.js +++ b/react/features/invite/components/AddPeopleDialog.web.js @@ -19,7 +19,7 @@ declare var interfaceConfig: Object; /** * The dialog that allows to invite people to the call. */ -class AddPeopleDialog extends Component { +class AddPeopleDialog extends Component<*, *> { /** * {@code AddPeopleDialog}'s property types. * @@ -311,7 +311,7 @@ class AddPeopleDialog extends Component { ); } - _setMultiSelectElement: (Object) => void; + _setMultiSelectElement: (React$ElementRef<*> | null) => mixed; /** * Sets the instance variable for the multi select component diff --git a/react/features/large-video/components/LargeVideo.native.js b/react/features/large-video/components/LargeVideo.native.js index 4f289e560..e20855db8 100644 --- a/react/features/large-video/components/LargeVideo.native.js +++ b/react/features/large-video/components/LargeVideo.native.js @@ -14,7 +14,7 @@ import styles from './styles'; * * @extends Component */ -class LargeVideo extends Component { +class LargeVideo extends Component<*> { /** * LargeVideo component's property types. * diff --git a/react/features/large-video/components/LargeVideo.web.js b/react/features/large-video/components/LargeVideo.web.js index c8f82107f..fa789bbab 100644 --- a/react/features/large-video/components/LargeVideo.web.js +++ b/react/features/large-video/components/LargeVideo.web.js @@ -14,7 +14,7 @@ declare var interfaceConfig: Object; * * @extends Component */ -export default class LargeVideo extends Component { +export default class LargeVideo extends Component<*> { /** * Implements React's {@link Component#render()}. * diff --git a/react/features/mobile/network-activity/components/NetworkActivityIndicator.js b/react/features/mobile/network-activity/components/NetworkActivityIndicator.js index f8ada05fb..5358eabaa 100644 --- a/react/features/mobile/network-activity/components/NetworkActivityIndicator.js +++ b/react/features/mobile/network-activity/components/NetworkActivityIndicator.js @@ -10,7 +10,7 @@ import { LoadingIndicator } from '../../../base/react'; * The React {@code Component} which renders a progress indicator when there * are ongoing network requests. */ -class NetworkActivityIndicator extends Component { +class NetworkActivityIndicator extends Component<*> { /** * {@code NetworkActivityIndicator} React {@code Component}'s prop types. * diff --git a/react/features/overlay/components/AbstractPageReloadOverlay.js b/react/features/overlay/components/AbstractPageReloadOverlay.js index 5fa4af660..9985bd861 100644 --- a/react/features/overlay/components/AbstractPageReloadOverlay.js +++ b/react/features/overlay/components/AbstractPageReloadOverlay.js @@ -16,7 +16,7 @@ const logger = require('jitsi-meet-logger').getLogger(__filename); /** * Implements abstract React Component for the page reload overlays. */ -export default class AbstractPageReloadOverlay extends Component { +export default class AbstractPageReloadOverlay extends Component<*, *> { /** * AbstractPageReloadOverlay component's property types. * diff --git a/react/features/overlay/components/ReloadButton.js b/react/features/overlay/components/ReloadButton.js index 13cfe597f..9a9f916e1 100644 --- a/react/features/overlay/components/ReloadButton.js +++ b/react/features/overlay/components/ReloadButton.js @@ -12,7 +12,7 @@ import { _reloadNow } from '../actions'; * Implements a React Component for button for the overlays that will reload * the page. */ -class ReloadButton extends Component { +class ReloadButton extends Component<*> { /** * PageReloadOverlay component's property types. * diff --git a/react/features/overlay/reducer.js b/react/features/overlay/reducer.js index d9832655c..dc0a46230 100644 --- a/react/features/overlay/reducer.js +++ b/react/features/overlay/reducer.js @@ -29,7 +29,7 @@ ReducerRegistry.register('features/overlay', (state = {}, action) => { return _conferenceFailed(state, action); case CONNECTION_ESTABLISHED: - return _connectionEstablished(state, action); + return _connectionEstablished(state); case CONNECTION_FAILED: return _connectionFailed(state, action); @@ -41,7 +41,7 @@ ReducerRegistry.register('features/overlay', (state = {}, action) => { return _mediaPermissionPromptVisibilityChanged(state, action); case SUSPEND_DETECTED: - return _suspendDetected(state, action); + return _suspendDetected(state); } return state; diff --git a/react/features/room-lock/components/PasswordRequiredPrompt.native.js b/react/features/room-lock/components/PasswordRequiredPrompt.native.js index 5f5b51428..ffe8df3fd 100644 --- a/react/features/room-lock/components/PasswordRequiredPrompt.native.js +++ b/react/features/room-lock/components/PasswordRequiredPrompt.native.js @@ -36,7 +36,7 @@ const _TEXT_INPUT_PROPS = { * Implements a React {@code Component} which prompts the user when a password * is required to join a conference. */ -class PasswordRequiredPrompt extends Component { +class PasswordRequiredPrompt extends Component { /** * {@code PasswordRequiredPrompt}'s React {@code Component} prop types. * diff --git a/react/features/room-lock/components/PasswordRequiredPrompt.web.js b/react/features/room-lock/components/PasswordRequiredPrompt.web.js index 77e562295..407b2a7cf 100644 --- a/react/features/room-lock/components/PasswordRequiredPrompt.web.js +++ b/react/features/room-lock/components/PasswordRequiredPrompt.web.js @@ -12,7 +12,7 @@ import { translate } from '../../base/i18n'; * Implements a React Component which prompts the user when a password is * required to join a conference. */ -class PasswordRequiredPrompt extends Component { +class PasswordRequiredPrompt extends Component<*, *> { /** * PasswordRequiredPrompt component's property types. * diff --git a/react/features/room-lock/components/RoomLockPrompt.native.js b/react/features/room-lock/components/RoomLockPrompt.native.js index 42903ac43..eeef69940 100644 --- a/react/features/room-lock/components/RoomLockPrompt.native.js +++ b/react/features/room-lock/components/RoomLockPrompt.native.js @@ -22,7 +22,7 @@ const _TEXT_INPUT_PROPS = { * Implements a React Component which prompts the user for a password to lock a * conference/room. */ -class RoomLockPrompt extends Component { +class RoomLockPrompt extends Component<*> { /** * RoomLockPrompt component's property types. * diff --git a/react/features/speaker-stats/components/SpeakerStats.js b/react/features/speaker-stats/components/SpeakerStats.js index 0471cc448..30e82f21b 100644 --- a/react/features/speaker-stats/components/SpeakerStats.js +++ b/react/features/speaker-stats/components/SpeakerStats.js @@ -17,7 +17,7 @@ declare var interfaceConfig: Object; * * @extends Component */ -class SpeakerStats extends Component { +class SpeakerStats extends Component<*, *> { /** * SpeakerStats component's property types. * diff --git a/react/features/toolbox/components/Notice.js b/react/features/toolbox/components/Notice.js index 06b753973..cb1497e1b 100644 --- a/react/features/toolbox/components/Notice.js +++ b/react/features/toolbox/components/Notice.js @@ -9,7 +9,7 @@ declare var config: Object; * * @class Notice */ -export default class Notice extends Component { +export default class Notice extends Component<*, *> { state: Object; /** diff --git a/react/features/toolbox/components/PrimaryToolbar.web.js b/react/features/toolbox/components/PrimaryToolbar.web.js index 0a075da59..754cfe5b6 100644 --- a/react/features/toolbox/components/PrimaryToolbar.web.js +++ b/react/features/toolbox/components/PrimaryToolbar.web.js @@ -15,7 +15,7 @@ declare var interfaceConfig: Object; * @class PrimaryToolbar * @extends Component */ -class PrimaryToolbar extends Component { +class PrimaryToolbar extends Component<*, *> { static propTypes = { /** @@ -36,7 +36,7 @@ class PrimaryToolbar extends Component { * * @returns {ReactElement} */ - render(): ReactElement<*> | null { + render(): React$Element<*> | null { const { _primaryToolbarButtons } = this.props; // The number of buttons to show in the toolbar isn't fixed, it depends diff --git a/react/features/toolbox/components/ProfileButton.web.js b/react/features/toolbox/components/ProfileButton.web.js index c94d553bd..97128197f 100644 --- a/react/features/toolbox/components/ProfileButton.web.js +++ b/react/features/toolbox/components/ProfileButton.web.js @@ -30,7 +30,7 @@ const DEFAULT_BUTTON_CONFIGURATION = { * * @extends Component */ -class ProfileButton extends Component { +class ProfileButton extends Component<*> { _onClick: Function; /** diff --git a/react/features/toolbox/components/SecondaryToolbar.web.js b/react/features/toolbox/components/SecondaryToolbar.web.js index d65b7a19e..a20b34472 100644 --- a/react/features/toolbox/components/SecondaryToolbar.web.js +++ b/react/features/toolbox/components/SecondaryToolbar.web.js @@ -22,7 +22,7 @@ declare var config: Object; * @class SecondaryToolbar * @extends Component */ -class SecondaryToolbar extends Component { +class SecondaryToolbar extends Component<*, *> { state: Object; /** @@ -86,7 +86,7 @@ class SecondaryToolbar extends Component { * * @returns {ReactElement} */ - render(): ReactElement<*> | null { + render(): React$Element<*> | null { const { _callStatsID, _secondaryToolbarButtons } = this.props; // The number of buttons to show in the toolbar isn't fixed, it depends diff --git a/react/features/toolbox/components/StatelessToolbar.web.js b/react/features/toolbox/components/StatelessToolbar.web.js index b6f6b6c12..74e28092b 100644 --- a/react/features/toolbox/components/StatelessToolbar.web.js +++ b/react/features/toolbox/components/StatelessToolbar.web.js @@ -10,7 +10,7 @@ import React, { Component } from 'react'; * @class StatelessToolbar * @extends Component */ -export default class StatelessToolbar extends Component { +export default class StatelessToolbar extends Component<*> { /** * Base toolbar component's property types. * @@ -44,7 +44,7 @@ export default class StatelessToolbar extends Component { * @inheritdoc * @returns {ReactElement} */ - render(): ReactElement<*> { + render(): React$Element<*> { const { className, onMouseOut, diff --git a/react/features/toolbox/components/StatelessToolbarButton.js b/react/features/toolbox/components/StatelessToolbarButton.js index 333ca7ed5..cb5193bc8 100644 --- a/react/features/toolbox/components/StatelessToolbarButton.js +++ b/react/features/toolbox/components/StatelessToolbarButton.js @@ -91,7 +91,7 @@ export default class StatelessToolbarButton extends AbstractToolbarButton { * @inheritdoc * @returns {ReactElement} */ - render(): ReactElement<*> { + render(): React$Element<*> { const { button } = this.props; const attributes = getButtonAttributesByProps(button); diff --git a/react/features/toolbox/components/Toolbar.web.js b/react/features/toolbox/components/Toolbar.web.js index 56a56e867..414c8c9fb 100644 --- a/react/features/toolbox/components/Toolbar.web.js +++ b/react/features/toolbox/components/Toolbar.web.js @@ -17,7 +17,7 @@ import ToolbarButton from './ToolbarButton'; * @class Toolbar * @extends Component */ -class Toolbar extends Component { +class Toolbar extends Component<*> { _onMouseOut: Function; _onMouseOver: Function; _renderToolbarButton: Function; @@ -75,7 +75,7 @@ class Toolbar extends Component { * @inheritdoc * @returns {ReactElement} */ - render(): ReactElement<*> { + render(): React$Element<*> { const props = { className: this.props.className, onMouseOut: this._onMouseOut, @@ -123,7 +123,7 @@ class Toolbar extends Component { * @private * @returns {ReactElement} A toolbar button. */ - _renderToolbarButton(keyValuePair: Array<*>): ReactElement<*> { + _renderToolbarButton(keyValuePair: Array<*>): React$Element<*> { const [ key, button ] = keyValuePair; if (button.component) { diff --git a/react/features/toolbox/components/ToolbarButton.web.js b/react/features/toolbox/components/ToolbarButton.web.js index 5906cb9db..f5cd55cfe 100644 --- a/react/features/toolbox/components/ToolbarButton.web.js +++ b/react/features/toolbox/components/ToolbarButton.web.js @@ -18,7 +18,7 @@ declare var APP: Object; * @class ToolbarButton * @extends AbstractToolbarButton */ -class ToolbarButton extends Component { +class ToolbarButton extends Component<*> { button: Object; _onClick: Function; @@ -103,7 +103,7 @@ class ToolbarButton extends Component { * @inheritdoc * @returns {ReactElement} */ - render(): ReactElement<*> { + render(): React$Element<*> { const { button, t, tooltipPosition } = this.props; const props = { ...this.props, diff --git a/react/features/toolbox/components/Toolbox.web.js b/react/features/toolbox/components/Toolbox.web.js index 29351f719..0f5f4b63a 100644 --- a/react/features/toolbox/components/Toolbox.web.js +++ b/react/features/toolbox/components/Toolbox.web.js @@ -22,7 +22,7 @@ declare var interfaceConfig: Object; /** * Implements the conference toolbox on React/Web. */ -class Toolbox extends Component { +class Toolbox extends Component<*> { /** * App component's property types. * @@ -89,7 +89,7 @@ class Toolbox extends Component { * @inheritdoc * @returns {ReactElement} */ - render(): ReactElement<*> { + render(): React$Element<*> { return (

{ @@ -109,7 +109,7 @@ class Toolbox extends Component { * @returns {ReactElement} * @private */ - _renderSubject(): ReactElement<*> | null { + _renderSubject(): React$Element<*> | null { const { _subjectSlideIn, _subject } = this.props; const classNames = [ 'subject' ]; @@ -146,7 +146,7 @@ class Toolbox extends Component { * @returns {ReactElement} * @private */ - _renderToolbars(): ReactElement<*> | null { + _renderToolbars(): React$Element<*> | null { // In case we're not in alwaysVisible mode the toolbox should not be // shown until timeoutID is initialized. if (!this.props._alwaysVisible && this.props._timeoutID === null) { diff --git a/react/features/unsupported-browser/components/HideNotificationBarStyle.js b/react/features/unsupported-browser/components/HideNotificationBarStyle.js index fefefe8b9..1ea2c36d3 100644 --- a/react/features/unsupported-browser/components/HideNotificationBarStyle.js +++ b/react/features/unsupported-browser/components/HideNotificationBarStyle.js @@ -9,7 +9,7 @@ import React, { Component } from 'react'; * @private * @returns {ReactElement} */ -export default class HideNotificationBarStyles extends Component { +export default class HideNotificationBarStyles extends Component<*> { /** * Implements React's {@link Component#render()}. diff --git a/react/features/unsupported-browser/components/NoMobileApp.js b/react/features/unsupported-browser/components/NoMobileApp.js index b816ffe98..029ad81cf 100644 --- a/react/features/unsupported-browser/components/NoMobileApp.js +++ b/react/features/unsupported-browser/components/NoMobileApp.js @@ -11,7 +11,7 @@ declare var interfaceConfig: Object; * * @class NoMobileApp */ -export default class NoMobileApp extends Component { +export default class NoMobileApp extends Component<*> { /** * Renders the component. * diff --git a/react/features/unsupported-browser/components/PluginRequiredBrowser.js b/react/features/unsupported-browser/components/PluginRequiredBrowser.js index d2eb75ca2..2cb5ac415 100644 --- a/react/features/unsupported-browser/components/PluginRequiredBrowser.js +++ b/react/features/unsupported-browser/components/PluginRequiredBrowser.js @@ -9,7 +9,7 @@ import { CHROME, CHROMIUM, FIREFOX } from './browserLinks'; * * @class PluginRequiredBrowser */ -export default class PluginRequiredBrowser extends Component { +export default class PluginRequiredBrowser extends Component<*> { /** * Renders the component. diff --git a/react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js b/react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js index cfb0d09b0..8473bc6e4 100644 --- a/react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js +++ b/react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js @@ -22,7 +22,7 @@ const _SNS = 'unsupported-desktop-browser'; * * @class UnsupportedDesktopBrowser */ -class UnsupportedDesktopBrowser extends Component { +class UnsupportedDesktopBrowser extends Component<*> { /** * UnsupportedDesktopBrowser component's property types. * diff --git a/react/features/unsupported-browser/components/UnsupportedMobileBrowser.js b/react/features/unsupported-browser/components/UnsupportedMobileBrowser.js index 46f6137ca..fd1dc2eff 100644 --- a/react/features/unsupported-browser/components/UnsupportedMobileBrowser.js +++ b/react/features/unsupported-browser/components/UnsupportedMobileBrowser.js @@ -42,7 +42,7 @@ const _URLS = { * * @class UnsupportedMobileBrowser */ -class UnsupportedMobileBrowser extends Component { +class UnsupportedMobileBrowser extends Component<*, *> { state: Object; /** diff --git a/react/features/welcome/components/AbstractWelcomePage.js b/react/features/welcome/components/AbstractWelcomePage.js index 2249fb491..27588f1a4 100644 --- a/react/features/welcome/components/AbstractWelcomePage.js +++ b/react/features/welcome/components/AbstractWelcomePage.js @@ -21,7 +21,7 @@ type Props = { * * @abstract */ -export class AbstractWelcomePage extends Component { +export class AbstractWelcomePage extends Component<*, *> { /** * {@code AbstractWelcomePage}'s React {@code Component} prop types. * diff --git a/react/features/welcome/components/BlankPage.native.js b/react/features/welcome/components/BlankPage.native.js index 168f5c512..aa4fbcec8 100644 --- a/react/features/welcome/components/BlankPage.native.js +++ b/react/features/welcome/components/BlankPage.native.js @@ -16,7 +16,7 @@ import styles from './styles'; * {@code Route} to render. Renders a progress indicator when there are ongoing * network requests. */ -class BlankPage extends Component { +class BlankPage extends Component<*> { /** * {@code BlankPage} React {@code Component}'s prop types. * diff --git a/react/features/welcome/components/LocalVideoTrackUnderlay.native.js b/react/features/welcome/components/LocalVideoTrackUnderlay.native.js index 301156b5d..264c0db2e 100644 --- a/react/features/welcome/components/LocalVideoTrackUnderlay.native.js +++ b/react/features/welcome/components/LocalVideoTrackUnderlay.native.js @@ -14,7 +14,7 @@ import styles from './styles'; * Implements a React {@code Component} which underlays the local video track, * if any, underneath its children. */ -class LocalVideoTrackUnderlay extends Component { +class LocalVideoTrackUnderlay extends Component<*, *> { state: { /** diff --git a/react/index.native.js b/react/index.native.js index 45a86f4db..0d9b3a3b4 100644 --- a/react/index.native.js +++ b/react/index.native.js @@ -1,4 +1,7 @@ -import 'es6-symbol/implement'; +// FIXME: remove once react-native-webrtc and react-native-prompt imports +// PropTypes from the 'prop-types' lib instead of 'react'. +import './features/base/react/prop-types-polyfill.js'; + import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { AppRegistry, Linking } from 'react-native';