[ignore]
; ### From React Native's template app:

; We fork some components by platform
.*/*[.]android.js

; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*

; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js

; ### Custom ignores

.*/ios/Pods/*
.*/node_modules/mitt/src/.*
.*/node_modules/match-at/lib/.*
.*/node_modules/eslint-plugin-jsx-a11y/.*

; https://github.com/facebook/flow/issues/2364
.*/node_modules/resolve/test/resolver/malformed_package_json/.*

.*/node_modules/react-native-tab-view/.*
.*/node_modules/react-native-safe-area/.*
.*/node_modules/flow-coverage-report/.*
.*/node_modules/@snyk/.*

; As of v4.1.1, this package only has TypeScript. That's fine as far as
; running the code goes -- Metro transpiles it -- but this line causes Flow
; to stop looking for types in that TypeScript, and then go and look in our
; libdef.
.*/node_modules/react-native-image-picker/.*

[untyped]
.*/node_modules/@react-native-community/cli/.*/.*

; Our libdef is more complete, as of 2021-08.
.*/node_modules/@react-native-async-storage/async-storage.*

[include]
; Effectively this line warns Flow that this path might be a symlink
; (because the developer might be using `yarn link` to have this point into
; their zulip.git worktree), and it should watch/inotify at the target.
node_modules/@zulip/shared/
node_modules/zulip-markdown-parser/
; Add more as needed!  See also metro.config.js and docs/howto/yarn-link.md .


[libs]
node_modules/react-native/interface.js
node_modules/react-native/flow/

; If the following files are not explicitly named, Flow ignores them in favor of
; their autogenerated versions in flow-typed/npm. (Contrast commit 6219e5a23,
; where the opposite behavior is exhibited!)
flow-typed/@sentry/react-native_v1.x.x.js
flow-typed/react-native-url-polyfill_vx.x.x.js
flow-typed/expo-screen-orientation_vx.x.x.js

; Explicitly name these so that Flow sees them instead of their
; counterparts in node_modules/react-native:
flow-typed/jest_v26.x.x.js

[strict]
; These apply only to files where `@flow strict` is enabled.
; See https://flow.org/en/docs/strict/ .

; from RN
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import

[lints]
; from RN
sketchy-null-number=warn
sketchy-null-mixed=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
signature-verification-failure=warn

; ours
sketchy-number=error
unnecessary-optional-chain=warn
implicit-inexact-object=error


[options]
emoji=true

# The main warning is "Unused suppression comment".
include_warnings=true

munge_underscores=true

module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
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\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
# This causes Flow to find our `types/foo/bar.js.flow`, if one exists,
# when looking at an import from `foo/bar`.  (The `[^.]` is so Flow doesn't
# try to apply this to relative imports.)
module.name_mapper='^\([^.].*\)$' -> '<PROJECT_ROOT>/types/\0'

suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState

module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js

; This is the future of Flow; see
;   https://medium.com/flow-type/how-to-upgrade-to-exact-by-default-object-type-syntax-7aa44b4d08ab.
; But we should anticipate that not all our third-party code acts sensibly
; when this is turned on (e.g., see dfa52ab46). As of turning it on, though,
; we're error-free!
exact_by_default=true

enums=true

[version]
^0.162.0