stash/vendor/github.com/99designs/gqlgen/plugin/federation
SmallCoccinelle 45f700d6ea
Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443)
* Upgrade gqlgen to v0.17.2

This enables builds on Go 1.18. github.com/vektah/gqlparser is upgraded
to the newest version too.

Getting this to work is a bit of a hazzle. I had to first remove
vendoring from the repository, perform the upgrade and then re-introduce
the vendor directory. I think gqlgens analysis went wrong for some
reason on the upgrade. It would seem a clean-room installation fixed it.

* Bump project to 1.18

* Update all packages, address gqlgenc breaking changes

* Let `go mod tidy` handle the go.mod file

* Upgrade linter to 1.45.2

* Introduce v1.45.2 of the linter

The linter now correctly warns on `strings.Title` because it isn't
unicode-aware. Fix this by using the suggested fix from x/text/cases
to produce unicode-aware strings.

The mapping isn't entirely 1-1 as this new approach has a larger iface:
it spans all of unicode rather than just ASCII. It coincides for ASCII
however, so things should be largely the same.

* Ready ourselves for errchkjson and contextcheck.

* Revert dockerfile golang version changes for now

Co-authored-by: Kermie <kermie@isinthe.house>
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2022-04-02 18:08:14 +11:00
..
fieldset Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443) 2022-04-02 18:08:14 +11:00
federation.go Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443) 2022-04-02 18:08:14 +11:00
federation.gotpl Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443) 2022-04-02 18:08:14 +11:00
readme.md Support Go 1.18: Upgrade gqlgen to v0.17.2 (#2443) 2022-04-02 18:08:14 +11:00

Federation plugin

Add support for graphql federation in your graphql Go server!

TODO(miguel): add details.

Tests

There are several different tests. Some will process the configuration file directly. You can see those in the federation_test.go. There are also tests for entity resolvers, which will simulate requests from a federation server like Apollo Federation.

Running entity resolver tests.

  1. Go to plugin/federation
  2. Run the command go generate
  3. Run the tests with go test ./....

Architecture

TODO(miguel): add details.

Entity resolvers - GetMany entities

The federation plugin implements GetMany semantics in which entity resolvers get the entire list of representations that need to be resolved. This functionality is currently optin tho, and to enable it you need to specify the directive @entityResolver in the federated entity you want this feature for. E.g.

directive @entityResolver(multi: Boolean) on OBJECT

type MultiHello @key(fields: "name") @entityResolver(multi: true) {
    name: String!
}

That allows the federation plugin to generate GetMany resolver function that can take a list of representations to be resolved.

From that entity type, the resolver function would be

func (r *entityResolver) FindManyMultiHellosByName(ctx context.Context, reps []*generated.ManyMultiHellosByNameInput) ([]*generated.MultiHello, error) {
  /// <Your code to resolve the list of items>
}