mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 12:54:38 +03:00
Upgrade to go 1.19 and update dependencies (#3069)
* Update to go 1.19 * Update dependencies * Update cross-compile script * Add missing targets to cross-compile-all * Update cache action to remove warning
This commit is contained in:
78
vendor/github.com/99designs/gqlgen/plugin/federation/federation.go
generated
vendored
78
vendor/github.com/99designs/gqlgen/plugin/federation/federation.go
generated
vendored
@@ -1,6 +1,7 @@
|
||||
package federation
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
@@ -14,14 +15,22 @@ import (
|
||||
"github.com/99designs/gqlgen/plugin/federation/fieldset"
|
||||
)
|
||||
|
||||
//go:embed federation.gotpl
|
||||
var federationTemplate string
|
||||
|
||||
type federation struct {
|
||||
Entities []*Entity
|
||||
Version int
|
||||
}
|
||||
|
||||
// New returns a federation plugin that injects
|
||||
// federated directives and types into the schema
|
||||
func New() plugin.Plugin {
|
||||
return &federation{}
|
||||
func New(version int) plugin.Plugin {
|
||||
if version == 0 {
|
||||
version = 1
|
||||
}
|
||||
|
||||
return &federation{Version: version}
|
||||
}
|
||||
|
||||
// Name returns the plugin name
|
||||
@@ -51,6 +60,7 @@ func (f *federation) MutateConfig(cfg *config.Config) error {
|
||||
Model: config.StringList{"github.com/99designs/gqlgen/graphql.Map"},
|
||||
},
|
||||
}
|
||||
|
||||
for typeName, entry := range builtins {
|
||||
if cfg.Models.Exists(typeName) {
|
||||
return fmt.Errorf("%v already exists which must be reserved when Federation is enabled", typeName)
|
||||
@@ -63,22 +73,46 @@ func (f *federation) MutateConfig(cfg *config.Config) error {
|
||||
cfg.Directives["key"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
cfg.Directives["extends"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
|
||||
// Federation 2 specific directives
|
||||
if f.Version == 2 {
|
||||
cfg.Directives["shareable"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
cfg.Directives["link"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
cfg.Directives["tag"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
cfg.Directives["override"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
cfg.Directives["inaccessible"] = config.DirectiveConfig{SkipRuntime: true}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *federation) InjectSourceEarly() *ast.Source {
|
||||
return &ast.Source{
|
||||
Name: "federation/directives.graphql",
|
||||
Input: `
|
||||
scalar _Any
|
||||
scalar _FieldSet
|
||||
input := `
|
||||
scalar _Any
|
||||
scalar _FieldSet
|
||||
|
||||
directive @external on FIELD_DEFINITION
|
||||
directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
|
||||
directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
|
||||
directive @key(fields: _FieldSet!) repeatable on OBJECT | INTERFACE
|
||||
directive @extends on OBJECT | INTERFACE
|
||||
`,
|
||||
directive @external on FIELD_DEFINITION
|
||||
directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
|
||||
directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
|
||||
directive @extends on OBJECT | INTERFACE
|
||||
`
|
||||
// add version-specific changes on key directive, as well as adding the new directives for federation 2
|
||||
if f.Version == 1 {
|
||||
input += `
|
||||
directive @key(fields: _FieldSet!) repeatable on OBJECT | INTERFACE
|
||||
`
|
||||
} else if f.Version == 2 {
|
||||
input += `
|
||||
directive @key(fields: _FieldSet!, resolvable: Boolean = true) repeatable on OBJECT | INTERFACE
|
||||
directive @link(import: [String!], url: String!) repeatable on SCHEMA
|
||||
directive @shareable on OBJECT | FIELD_DEFINITION
|
||||
directive @tag(name: String!) repeatable on FIELD_DEFINITION | INTERFACE | OBJECT | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
|
||||
directive @override(from: String!) on FIELD_DEFINITION
|
||||
directive @inaccessible on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION
|
||||
`
|
||||
}
|
||||
return &ast.Source{
|
||||
Name: "federation/directives.graphql",
|
||||
Input: input,
|
||||
BuiltIn: true,
|
||||
}
|
||||
}
|
||||
@@ -244,6 +278,7 @@ func (f *federation) GenerateCode(data *codegen.Data) error {
|
||||
Data: f,
|
||||
GeneratedHeader: true,
|
||||
Packages: data.Config.Packages,
|
||||
Template: federationTemplate,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -290,10 +325,21 @@ func (f *federation) setEntities(schema *ast.Schema) {
|
||||
// }
|
||||
if !e.allFieldsAreExternal() {
|
||||
for _, dir := range keys {
|
||||
if len(dir.Arguments) != 1 || dir.Arguments[0].Name != "fields" {
|
||||
panic("Exactly one `fields` argument needed for @key declaration.")
|
||||
if len(dir.Arguments) > 2 {
|
||||
panic("More than two arguments provided for @key declaration.")
|
||||
}
|
||||
arg := dir.Arguments[0]
|
||||
var arg *ast.Argument
|
||||
|
||||
// since keys are able to now have multiple arguments, we need to check both possible for a possible @key(fields="" fields="")
|
||||
for _, a := range dir.Arguments {
|
||||
if a.Name == "fields" {
|
||||
if arg != nil {
|
||||
panic("More than one `fields` provided for @key declaration.")
|
||||
}
|
||||
arg = a
|
||||
}
|
||||
}
|
||||
|
||||
keyFieldSet := fieldset.New(arg.Value.Raw, nil)
|
||||
|
||||
keyFields := make([]*KeyField, len(keyFieldSet))
|
||||
|
||||
Reference in New Issue
Block a user