Comments (6)
Thanks for the idea! Can you share some pain points where adding TypeScript would have helped you with this library?
from graphql.
It's not that painful since the functionality offered by the library isn't that complex and there's only a handful of functions but it's still nice to have. With typings:
- when working with TS, a developer wouldn't need to provide module declaration, i.e.
declare module '@miragejs/graphql'
- automatic imports by IDE would be supported
- developers would get better IntelliSense experience
- TS would check for correct function call arguments
Like I've said, these aren't very outstanding issues, but it's pretty standard nowadays to offer TS support
from graphql.
Checking in now that #23 was merged to see if this issue can be closed or if there's more work to do. Thanks!!
from graphql.
#23 is certainly a good start but I'd say there's still more work to be done to close this issue. #23 provides basic types that tsc
can infer on its own, but for many cases that may not be good enough. For example, let's look at the generated typings for createGraphQLHandler
:
export function createGraphQLHandler(graphQLSchema: any | string, mirageSchema: any, { context, resolvers, root }?: {
context: any;
resolvers: any;
root: any;
}): graphQLHandler;
While its certainly much better than nothing, the typings could be improved. In general, any any
(:wink:) instance is a place for improvement because any
pretty much disables any type checking. graphQLSchema
excepts either string
or an AST schema - types for this exists inside graphql
package. Same with resolvers - those could be typed as well.
There's also one issue I see introduced with this PR, when I try to provide custom resolvers to the handler, I now also need to pass context
and root
because those aren't marked as optional, so this example from the README won't work in TS-enabled environment:
const graphQLHandler = createGraphQLHandler(graphQLSchema, this.schema, {
resolvers: {
Mutation: {
// Coerce the record returned from the default resolver to a Boolean
deletePerson: (obj, args, context, info) =>
!!mirageGraphQLFieldResolver(...arguments)
}
}
})
from graphql.
Thanks for the feedback!
from graphql.
It has taken years to find the time to work on a TypeScript version of this library but I finally got around to it. I have released version 0.2.0-alpha.1
to npm. This version is based on the typescript
branch. If anyone wants to give it a try, it would be great to see if there are any issues.
There should be not breaking changes when it comes to creating a request handler (the main functionality) but there are some breaking changes to a few functions that I would be surprised to see anyone use.
Thanks in advance for any feedback!
from graphql.
Related Issues (20)
- Expose API or hooks for custom resolvers HOT 2
- createGraphQLHandler can't deal with directives HOT 4
- Relationship HOT 3
- Handle Custom scalar type like Date HOT 1
- Missing good examples how to use some features on README HOT 1
- How deal with complex queries? HOT 3
- TypeError on `returnType` when returning Union from mutations HOT 3
- Expected Iterable, but did not find one for field HOT 5
- connect ECONNREFUSED 127.0.0.1:4001 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) HOT 3
- Delete mutation example in README is incorrect
- [QUESTION] Does this plugin works for testing? HOT 13
- Mirage: You called server.create(<model_name>) but no model or factory was found HOT 2
- ApolloError: Cannot read property 'type' of undefined HOT 1
- How to respond with a server error? HOT 3
- How can I update an entry in resolver and trigger an update in watchQuery? HOT 1
- When updating data, an error occurs if there is a relationship HOT 1
- Example of own resolvers for query / filter involving Union types HOT 1
- Help Wanted: TypeScript and Priorities HOT 9
- model.hasInverseFor is not a function
- How to reproduce NOT_FOUND error with context.mirageSchema.findBy() HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql.