Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Technical planning and discussion #4

Open
acostalima opened this issue Oct 27, 2020 · 14 comments
Open

Technical planning and discussion #4

acostalima opened this issue Oct 27, 2020 · 14 comments

Comments

@acostalima
Copy link
Collaborator

acostalima commented Oct 27, 2020

@cpojer I'm reaching out to follow up on a previous discussion about coming up with a custom Fetch API implementation for React Native at https://github.com/react-native-community/fetch with support for streaming (facebook/react-native#27741). We, MOXY and Protocol Labs, are planning to start this effort shortly and we'd like to know your thoughts on the matter.

In short, what we currently have in mind is as follows:

  • Rewrite whatwg-fetch in modern JS.
  • Remove XHR out of the equation and implement fetch directly on top of RN's JavaScript Network API exactly for the same reasons outlined at Support for server-sent events (EventSource) discussions-and-proposals#99.
  • Assume ReadableStream is available in RN's environment which can be polyfilled with web-streams-polyfill. If ReadableStream is expected to only be used in the context of Fetch, we can probably bundle them together.
  • Have tests in place running in an actual RN app on GitHub's CI.

Even if Facebook has no plans to add support for streaming to Fetch for the time being, app developers can easily swap out whatwg-fetch for @react-native-community/fetch manually. Even better would be React Native to do this automatically via some sort of extension or plugin API.

Are there any guidelines which React Native Community packages should conform to? e.g. linter and linting config, CI process config, etc.

CC @satazor @hugomrdias

@hugomrdias
Copy link
Collaborator

hugomrdias commented Oct 27, 2020

/cc @autonome

@cpojer
Copy link
Member

cpojer commented Oct 28, 2020

I think this plan sounds good. If your rewrite does not increase bundle size, we can even consider swapping out whatwg-fetch with the new version.

@tex0l
Copy link

tex0l commented Oct 30, 2020

I'd be very interested in a stable fetch polyfill that handles streams. By the way, I'm currently considering using https://github.com/joltup/rn-fetch-blob#drop-in-fetch-replacement, I'll debrief you of how it works.

@acostalima acostalima changed the title Planning Technical planning and discussion Oct 30, 2020
@acostalima
Copy link
Collaborator Author

acostalima commented Oct 30, 2020

@cpojer Could you please give me permissions to maintain the repo? Thanks!

@acostalima
Copy link
Collaborator Author

acostalima commented Oct 30, 2020

@tex0l Thanks! I wasn't aware rn-fetch-blob had a drop-in fetch replacement. That project looks interesting although its complexity is much superior than what we're trying to achieve here considering its has a strong native component. In our case, we're still going to be limited to text streaming as RN's networking layer cannot stream binary.

@cpojer
Copy link
Member

cpojer commented Nov 1, 2020

@cpojer Could you please give me permissions to maintain the repo? Thanks!

Done!

@acostalima
Copy link
Collaborator Author

acostalima commented Jan 14, 2021

@cpojer I'm not being able to publish the package under react-native-community's organization. Can you give me such permission?

@acostalima
Copy link
Collaborator Author

Ping @cpojer.

@acostalima
Copy link
Collaborator Author

@alloy Can you help? 🙏

@alloy
Copy link
Member

alloy commented Jan 25, 2021

Paging @Titozzz re moving packages out of the RNC namespace. What's the goal wrt new packages, can they still publish under the org name or should they publish to their own namespace?

@Titozzz
Copy link

Titozzz commented Jan 25, 2021

Everyone is moving out of the RNC Scope so yeah it should be published under its own name

@acostalima
Copy link
Collaborator Author

acostalima commented Jan 25, 2021

@Titozzz got it, thanks! I assume react-native-fetch or similar is the way to go?

@acostalima
Copy link
Collaborator Author

Published as react-native-fetch-api 🎉

@RobertWHurst
Copy link

RobertWHurst commented Apr 12, 2023

@acostalima Did you manage to the the time to fix the Android issue? As I understand it your solution does not work on android devices currently. Thank you for the hard work you put into making it.

I feel like the React team should be supporting this. It is rather important and it seems like a lot of libraries have had to work around this often by having to drop to native code which is extremely painful because it means that rather than allowing users to use already published and maintained libraries they need to make special one off ones for React Native.

Regardless of what is popular for features this seems like a rather important problem to the platform at a fundamental level. It should be worked on so we don't need to duplicate libraries that do a bit more than simple HTTP requests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants