react-instantsearch-core introduces DOM types into react native Apps.
🐛 Current behavior
"react-instantsearch-core": "^7.13.1" introduces DOM types into react native apps. We have experienced this issue with "react-instantsearch-hooks": "^6.33.0" as well.
This causes invalid code in react native to be accepted as valid by tsc causing crashes at run time in our Apps. (At run time typescript/javascript support is provided by hermes.)
All variables and functions valid in DOM environment (eg. close() , the window global , ScrollY, StyleSheet ) and thousands of other variables / functions are considered valid due to node_modules/typescript/lib/lib.dom.d.ts being included.
Via the tsconfig explainFiles flag i was able to determine the responsible node modules. https://www.typescriptlang.org/tsconfig/#explainFiles
node_modules/typescript/lib/lib.dom.d.ts
Library referenced via 'dom' from file 'node_modules/preact/src/jsx.d.ts'
node_modules/preact/src/index.d.ts
Imported via "preact" from file 'node_modules/instantsearch.js/..........' with packageId 'preact/src/[email protected]'
node_modules/instantsearch.js/es/index.d.ts
Imported via 'instantsearch.js' from file 'node_modules/react-instantsearch-core/......' with packageId 'instantsearch.js/es/[email protected]'
🔍 Steps to reproduce
- Add
"react-instantsearch-core": "^7.13.1"to a react native App - In any source file import { InstantSearch } from 'react-instantsearch-core';
- Edit any App source file and call the close() method.
- run tsc (or within VSCode) . It fails to mark the close() call as an error as in a DOM environment close() calls the global window.close()
Live reproduction
https://itdoesntseemtobefeasibletoreproRN.com
💭 Expected behavior
tsc should flag close() as an undefined function when running under React Native. Using instantsearch-core / instantsearch.js treats any code valid in a browser environment as valid, even when invalid for react-native.
Package version
"react-instantsearch-core": "^7.13.1"
Operating system
NA
Browser
NA
Code of Conduct
- [X] I agree to follow this project's Code of Conduct
I wasn't aware of this issue, but we have a medium-term goal of splitting up InstantSearch.js into a core part that doesn't import preact and any browser code and one that does, which can then be used for React InstantSearch core too. Unfortunately for now I don't see a workaround without that amount of work