jeddeloh / rescript-apollo-client

ReScript bindings for the Apollo Client ecosystem
MIT License
126 stars 18 forks source link

Usage without React? #103

Closed idkjs closed 3 years ago

idkjs commented 3 years ago

You can use @apollo/client without react with @apollo/client/core.

This lib binds to @apollo/client. Would it be crazy to make this work with @apollo/client/core?

Is that a whole different setup? I tried just changing the binding to @apollo/client/core for the stuff exported from core and it did not work so..

Thanks you, sir.

jeddeloh commented 3 years ago

I don't think it would be crazy, no. At some point after I wrote these bindings they changed index.js to be just export * from "./core/index.js"; and export * from "./react/index.js";

What would be your use case? Personally, we use Apollo on our node servers as well. Not because it's the best idea, but it's convenient and consistent. It would be nice to not have to not have the react dependency. However, I already had this need and decided it wasn't personally worth the effort.

I'm certainly open to having two packages, one that is just core and one that includes both, if someone wants to tackle that.

idkjs commented 3 years ago

Greetings, @jeddeloh. I don't 'have a need' specifically. Just ran into it while trying something without React on an elixir server. Was thinking maybe it was an oversight given how thorough you were with this package.

I guess in my head this was a binding for ApolloClient rather than Apollo Client React. Would be cool to have one source of truth for graphql in reasonml/rescript.

As it is, you can use it without react in your code but you have to have react installed which is ok if you arent tripping about extra dependencies.

I tried refactoring the code to not rely on react. Seems to compile but then ppx set up is relying on React and so it breaks.

https://github.com/reasonml-community/rescript-apollo-client/blob/05e3c0db930a5b615a1bb35add6abd95da250a31/src/ReasonMLCommunity__ApolloClient.res#L59-L64

You get stuff like:

Signature mismatch:
  ...
  Values do not match:
    let query: string

  is not included in
    let query: ApolloClient__Core_ApolloClient.Types.Graphql.documentNode

Just thinking out loud here. As i say it, it doesnt sound right. I probably have to figure out how to set up the ppx when not using react. https://github.com/idkjs/rescript-bind-to-core

jeddeloh commented 3 years ago

@idkjs FYI, I think you can just run things without installing react and silence error. That type error you're experiencing it not really related to react. It seems to me maybe you stripped out all of the graphql configuration in bsconfig? You still need everything except for the stuff that starts with extend

idkjs commented 3 years ago

I hear you on the documentNode error. If I understand you, I could leave in the ApolloClient__React_Hooks_ ppx stuff and it should work without having react installed. I will try it. I will try it.

I know that if you dont install react you get a build error if you are not importing from core.

Going between urql and this, its stuck in the back of mind that the graphql stuff could be extracted and be a kind of base library for graphql type bindings. That way, you could use these types with the ppx whether you are using these binding or not. Thats IF the React in the name of the ppx modules actually require react.

I may just be confused about it all.

kiuKisas commented 3 years ago

Any update about it ? Looking to do the same thing, getting the same errors..

jfrolich commented 3 years ago

I think it should be pretty trivial if you don't use the react runtime code (and ignore the peer dependency)? Or do I miss something?