0no-co / gql.tada

🪄 Magical GraphQL query engine for TypeScript
https://gql-tada.0no.co
MIT License
2.52k stars 41 forks source link

feat: Allow enums to be remapped like scalars #184

Closed kitten closed 4 months ago

kitten commented 4 months ago

Resolves #180

Summary

This allows enums to be remapped like scalars. Specifically, if a user has a more qualified type for enums, they should be allowed to completely remap it.

Because Omit<Schema['types'], keyof Scalars> is potentially expensive for TypeScript to traverse, this PR avoids this pattern and instead refactors the code that resolves the types for enums. Specifically, mapEnum now outputs its type onto the enumValues property rather than type.

This PR also removes some redundant checks throughout the touched code path.

In practice, the following is now possible:

enum TestEnum {
  value = 'VALUE',
  test = 'TEST',
}

const graphql = initGraphQLTada<{
  introspection: someIntrospection;
  scalars: {
    // enum Test { VALUE, TEST }
    Test: TestEnum;
  };
}>();

In the future, we could add an additional check to graphql.scalar that checks the remapped type against the enumValues type to make sure they're compatible.

Set of changes

changeset-bot[bot] commented 4 months ago

🦋 Changeset detected

Latest commit: 9314abd34f65a41c7cc1053f31486ebb1fdae30d

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

VinceBT-BG commented 1 month ago

Can this be done automatically for any enums that is present in the schema ? Instead of having to list them one by one

kitten commented 1 month ago

@VinceBT-BG: You can write a script for this. But mainly, please check the related discussions for more info ✌️