AEB-labs/graphql-weaver

Deduplicate types

Closed this issue ยท 5 comments

is there a way to merge all duplicate types into 1?

e.g. 2 query types into 1, and any other type?

Yogu commented

Currently, only the root types, i.e. Query, Mutation and Subscription are merged, other types will cause an error if they are not prefixed with typePrefix.

I think some kind of type conflict resolution would be useful, but merging types is not neccessarily what you want - maybe you want to only keep fields that are present on both types? What about interfaces and the type description? Conflicting fields in the types? There are many corner cases.

I think we could provide a callback that handles type conflicts - multiple types with the same name go in, one type for them all goes out. You would however need to implement the type merging yourself, then. Would that help for your use case?

@Yogu yeah, maybe something like what graphql-tools offers, e.g. onTypeConflict: (left, right) => mergeType(left,right);

I'm using this to weave multiple PostGraphile endpoints. The scalar types are always the same, so it would be great to de-dupe them to avoid including a prefixed type when defining query input parameters. This is a backend implementation detail, which ideally should not be leaking to front-end concerns.

The solution @Yogu outlined above would work for us. Is this already possible using custom transformations?

Yogu commented

@lifeiscontent I agree that this would be a good addition. I'm just pretty busy at the moment, I hope this improves in a few weeks.

@flux627 Custom transformations already allow you to replace types with anything you like. For the deduplication, I already wrote a comment here: #12 (comment)

Any news on that? This feature would be very nice to have :-)