config

package
v0.17.60 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 10, 2024 License: MIT Imports: 17 Imported by: 341

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	MapType       = types.NewMap(types.Typ[types.String], types.NewInterfaceType(nil, nil).Complete())
	InterfaceType = types.NewInterfaceType(nil, nil)
)
View Source
var ErrTypeNotFound = errors.New("unable to find type")

Functions

func CompleteConfig added in v0.14.0

func CompleteConfig(config *Config) error

CompleteConfig fills in the schema and other values to a config loaded from YAML.

func IsNilable added in v0.11.0

func IsNilable(t types.Type) bool

Types

type Binder

type Binder struct {
	References []*TypeReference
	SawInvalid bool
	// contains filtered or unexported fields
}

Binder connects graphql types to golang types using static analysis

func (*Binder) CopyModifiersFromAst

func (b *Binder) CopyModifiersFromAst(t *ast.Type, base types.Type) types.Type

func (*Binder) DefaultUserObject

func (b *Binder) DefaultUserObject(name string) (types.Type, error)

func (*Binder) FindObject

func (b *Binder) FindObject(pkgName, typeName string) (types.Object, error)

func (*Binder) FindType

func (b *Binder) FindType(pkgName, typeName string) (types.Type, error)

func (*Binder) FindTypeFromName added in v0.10.0

func (b *Binder) FindTypeFromName(name string) (types.Type, error)

func (*Binder) InstantiateType added in v0.17.31

func (b *Binder) InstantiateType(orig types.Type, targs []types.Type) (types.Type, error)

func (*Binder) ObjectPosition

func (b *Binder) ObjectPosition(typ types.Object) token.Position

func (*Binder) PointerTo

func (b *Binder) PointerTo(ref *TypeReference) *TypeReference

func (*Binder) PushRef

func (b *Binder) PushRef(ret *TypeReference)

func (*Binder) TypePosition

func (b *Binder) TypePosition(typ types.Type) token.Position

func (*Binder) TypeReference

func (b *Binder) TypeReference(schemaType *ast.Type, bindTarget types.Type) (ret *TypeReference, err error)

type Config

type Config struct {
	SchemaFilename                       StringList                 `yaml:"schema,omitempty"`
	Exec                                 ExecConfig                 `yaml:"exec"`
	Model                                PackageConfig              `yaml:"model,omitempty"`
	Federation                           PackageConfig              `yaml:"federation,omitempty"`
	Resolver                             ResolverConfig             `yaml:"resolver,omitempty"`
	AutoBind                             []string                   `yaml:"autobind"`
	Models                               TypeMap                    `yaml:"models,omitempty"`
	StructTag                            string                     `yaml:"struct_tag,omitempty"`
	Directives                           map[string]DirectiveConfig `yaml:"directives,omitempty"`
	GoBuildTags                          StringList                 `yaml:"go_build_tags,omitempty"`
	GoInitialisms                        GoInitialismsConfig        `yaml:"go_initialisms,omitempty"`
	OmitSliceElementPointers             bool                       `yaml:"omit_slice_element_pointers,omitempty"`
	OmitGetters                          bool                       `yaml:"omit_getters,omitempty"`
	OmitInterfaceChecks                  bool                       `yaml:"omit_interface_checks,omitempty"`
	OmitComplexity                       bool                       `yaml:"omit_complexity,omitempty"`
	OmitGQLGenFileNotice                 bool                       `yaml:"omit_gqlgen_file_notice,omitempty"`
	OmitGQLGenVersionInFileNotice        bool                       `yaml:"omit_gqlgen_version_in_file_notice,omitempty"`
	OmitRootModels                       bool                       `yaml:"omit_root_models,omitempty"`
	OmitResolverFields                   bool                       `yaml:"omit_resolver_fields,omitempty"`
	OmitPanicHandler                     bool                       `yaml:"omit_panic_handler,omitempty"`
	UseFunctionSyntaxForExecutionContext bool                       `yaml:"use_function_syntax_for_execution_context,omitempty"`
	// If this is set to true, argument directives that
	// decorate a field with a null value will still be called.
	//
	// This enables argument directives to not just mutate
	// argument values but to set them even if they're null.
	CallArgumentDirectivesWithNull bool           `yaml:"call_argument_directives_with_null,omitempty"`
	StructFieldsAlwaysPointers     bool           `yaml:"struct_fields_always_pointers,omitempty"`
	ReturnPointersInUnmarshalInput bool           `yaml:"return_pointers_in_unmarshalinput,omitempty"`
	ResolversAlwaysReturnPointers  bool           `yaml:"resolvers_always_return_pointers,omitempty"`
	NullableInputOmittable         bool           `yaml:"nullable_input_omittable,omitempty"`
	EnableModelJsonOmitemptyTag    *bool          `yaml:"enable_model_json_omitempty_tag,omitempty"`
	SkipValidation                 bool           `yaml:"skip_validation,omitempty"`
	SkipModTidy                    bool           `yaml:"skip_mod_tidy,omitempty"`
	Sources                        []*ast.Source  `yaml:"-"`
	Packages                       *code.Packages `yaml:"-"`
	Schema                         *ast.Schema    `yaml:"-"`

	// Deprecated: use Federation instead. Will be removed next release
	Federated bool `yaml:"federated,omitempty"`
}

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig creates a copy of the default config

func LoadConfig

func LoadConfig(filename string) (*Config, error)

LoadConfig reads the gqlgen.yml config file

func LoadConfigFromDefaultLocations

func LoadConfigFromDefaultLocations() (*Config, error)

LoadConfigFromDefaultLocations looks for a config file in the current directory, and all parent directories walking up the tree. The closest config file will be returned.

func LoadDefaultConfig added in v0.12.0

func LoadDefaultConfig() (*Config, error)

LoadDefaultConfig loads the default config so that it is ready to be used

func ReadConfig added in v0.17.29

func ReadConfig(cfgFile io.Reader) (*Config, error)

func (*Config) Init added in v0.11.0

func (c *Config) Init() error

func (*Config) IsRoot added in v0.17.42

func (c *Config) IsRoot(def *ast.Definition) bool

func (*Config) LoadSchema

func (c *Config) LoadSchema() error

func (*Config) NewBinder

func (c *Config) NewBinder() *Binder

func (*Config) ReloadAllPackages added in v0.15.0

func (c *Config) ReloadAllPackages()

type DirectiveConfig added in v0.9.1

type DirectiveConfig struct {
	SkipRuntime bool `yaml:"skip_runtime"`

	// If the directive implementation is statically defined, don't provide a hook for it
	// in the generated server. This is useful for directives that are implemented
	// by plugins or the runtime itself.
	//
	// The function implemmentation should be provided here as a string.
	//
	// The function should have the following signature:
	// func(ctx context.Context, obj any, next graphql.Resolver[, directive arguments if any]) (res any, err error)
	Implementation *string
}

type EnumValue added in v0.17.46

type EnumValue struct {
	Value string
}

type EnumValueReference added in v0.17.46

type EnumValueReference struct {
	Definition *ast.EnumValueDefinition
	Object     types.Object
}

type ExecConfig added in v0.15.0

type ExecConfig struct {
	Package string     `yaml:"package,omitempty"`
	Layout  ExecLayout `yaml:"layout,omitempty"` // Default: single-file

	// Only for single-file layout:
	Filename string `yaml:"filename,omitempty"`

	// Only for follow-schema layout:
	FilenameTemplate string `yaml:"filename_template,omitempty"` // String template with {name} as placeholder for base name.
	DirName          string `yaml:"dir"`

	// Maximum number of goroutines in concurrency to use when running multiple child resolvers
	// Suppressing the number of goroutines generated can reduce memory consumption per request,
	// but processing time may increase due to the reduced number of concurrences
	// Default: 0 (unlimited)
	WorkerLimit uint `yaml:"worker_limit"`
}

func (*ExecConfig) Check added in v0.15.0

func (r *ExecConfig) Check() error

func (*ExecConfig) Dir added in v0.15.0

func (r *ExecConfig) Dir() string

func (*ExecConfig) ImportPath added in v0.15.0

func (r *ExecConfig) ImportPath() string

func (*ExecConfig) IsDefined added in v0.15.0

func (r *ExecConfig) IsDefined() bool

func (*ExecConfig) Pkg added in v0.15.0

func (r *ExecConfig) Pkg() *types.Package

type ExecLayout added in v0.15.0

type ExecLayout string
var (
	// Write all generated code to a single file.
	ExecLayoutSingleFile ExecLayout = "single-file"
	// Write generated code to a directory, generating one Go source file for each GraphQL schema file.
	ExecLayoutFollowSchema ExecLayout = "follow-schema"
)

type GoInitialismsConfig added in v0.17.34

type GoInitialismsConfig struct {
	// If true, the Initialisms won't get appended to the default ones but replace them
	ReplaceDefaults bool `yaml:"replace_defaults"`
	// Custom initialisms to be added or to replace the default ones
	Initialisms []string `yaml:"initialisms"`
}

GoInitialismsConfig allows to modify the default behavior of naming Go methods, types and properties

type ModelExtraField added in v0.17.32

type ModelExtraField struct {
	// Type is the Go type of the field.
	//
	// It supports the builtin basic types (like string or int64), named types
	// (qualified by the full package path), pointers to those types (prefixed
	// with `*`), and slices of those types (prefixed with `[]`).
	//
	// For example, the following are valid types:
	//  string
	//  *github.com/author/package.Type
	//  []string
	//  []*github.com/author/package.Type
	//
	// Note that the type will be referenced from the generated/graphql, which
	// means the package it lives in must not reference the generated/graphql
	// package to avoid circular imports.
	// restrictions.
	Type string `yaml:"type"`

	// OverrideTags is an optional override of the Go field tag.
	OverrideTags string `yaml:"overrideTags"`

	// Description is an optional the Go field doc-comment.
	Description string `yaml:"description"`
}

type PackageConfig

type PackageConfig struct {
	Filename      string          `yaml:"filename,omitempty"`
	Package       string          `yaml:"package,omitempty"`
	Version       int             `yaml:"version,omitempty"`
	ModelTemplate string          `yaml:"model_template,omitempty"`
	Options       map[string]bool `yaml:"options,omitempty"`
}

func (*PackageConfig) Check

func (c *PackageConfig) Check() error

func (*PackageConfig) Dir

func (c *PackageConfig) Dir() string

func (*PackageConfig) ImportPath

func (c *PackageConfig) ImportPath() string

func (*PackageConfig) IsDefined

func (c *PackageConfig) IsDefined() bool

func (*PackageConfig) Pkg

func (c *PackageConfig) Pkg() *types.Package

type ResolverConfig added in v0.11.0

type ResolverConfig struct {
	Filename            string         `yaml:"filename,omitempty"`
	FilenameTemplate    string         `yaml:"filename_template,omitempty"`
	Package             string         `yaml:"package,omitempty"`
	Type                string         `yaml:"type,omitempty"`
	Layout              ResolverLayout `yaml:"layout,omitempty"`
	DirName             string         `yaml:"dir"`
	OmitTemplateComment bool           `yaml:"omit_template_comment,omitempty"`
	ResolverTemplate    string         `yaml:"resolver_template,omitempty"`
	PreserveResolver    bool           `yaml:"preserve_resolver,omitempty"`
}

func (*ResolverConfig) Check added in v0.11.0

func (r *ResolverConfig) Check() error

func (*ResolverConfig) Dir added in v0.11.0

func (r *ResolverConfig) Dir() string

func (*ResolverConfig) ImportPath added in v0.11.0

func (r *ResolverConfig) ImportPath() string

func (*ResolverConfig) IsDefined added in v0.11.0

func (r *ResolverConfig) IsDefined() bool

func (*ResolverConfig) Pkg added in v0.11.0

func (r *ResolverConfig) Pkg() *types.Package

type ResolverLayout added in v0.11.0

type ResolverLayout string
var (
	LayoutSingleFile   ResolverLayout = "single-file"
	LayoutFollowSchema ResolverLayout = "follow-schema"
)

type StringList

type StringList []string

func (StringList) Has

func (a StringList) Has(file string) bool

func (*StringList) UnmarshalYAML

func (a *StringList) UnmarshalYAML(unmarshal func(any) error) error

type TypeMap

type TypeMap map[string]TypeMapEntry

func (TypeMap) Add

func (tm TypeMap) Add(name, goType string)

func (TypeMap) Check

func (tm TypeMap) Check() error

func (TypeMap) Exists

func (tm TypeMap) Exists(typeName string) bool

func (TypeMap) ForceGenerate added in v0.17.37

func (tm TypeMap) ForceGenerate(name string, forceGenerate bool)

func (TypeMap) ReferencedPackages

func (tm TypeMap) ReferencedPackages() []string

func (TypeMap) UserDefined

func (tm TypeMap) UserDefined(typeName string) bool

type TypeMapEntry

type TypeMapEntry struct {
	Model         StringList              `yaml:"model,omitempty"`
	ForceGenerate bool                    `yaml:"forceGenerate,omitempty"`
	Fields        map[string]TypeMapField `yaml:"fields,omitempty"`
	EnumValues    map[string]EnumValue    `yaml:"enum_values,omitempty"`

	// Key is the Go name of the field.
	ExtraFields      map[string]ModelExtraField `yaml:"extraFields,omitempty"`
	EmbedExtraFields []ModelExtraField          `yaml:"embedExtraFields,omitempty"`
}

type TypeMapField

type TypeMapField struct {
	Resolver        bool   `yaml:"resolver"`
	FieldName       string `yaml:"fieldName"`
	Omittable       *bool  `yaml:"omittable"`
	GeneratedMethod string `yaml:"-"`
}

type TypeReference

type TypeReference struct {
	Definition               *ast.Definition
	GQL                      *ast.Type
	GO                       types.Type  // Type of the field being bound. Could be a pointer or a value type of Target.
	Target                   types.Type  // The actual type that we know how to bind to. May require pointer juggling when traversing to fields.
	CastType                 types.Type  // Before calling marshalling functions cast from/to this base type
	Marshaler                *types.Func // When using external marshalling functions this will point to the Marshal function
	Unmarshaler              *types.Func // When using external marshalling functions this will point to the Unmarshal function
	IsMarshaler              bool        // Does the type implement graphql.Marshaler and graphql.Unmarshaler
	IsOmittable              bool        // Is the type wrapped with Omittable
	IsContext                bool        // Is the Marshaler/Unmarshaller the context version; applies to either the method or interface variety.
	PointersInUnmarshalInput bool        // Inverse values and pointers in return.
	IsRoot                   bool        // Is the type a root level definition such as Query, Mutation or Subscription
	EnumValues               []EnumValueReference
}

TypeReference is used by args and field types. The Definition can refer to both input and output types.

func (*TypeReference) Elem

func (ref *TypeReference) Elem() *TypeReference

func (*TypeReference) HasEnumValues added in v0.17.46

func (ref *TypeReference) HasEnumValues() bool

func (*TypeReference) IsMap added in v0.17.40

func (ref *TypeReference) IsMap() bool

func (*TypeReference) IsNamed

func (ref *TypeReference) IsNamed() bool

func (*TypeReference) IsNilable added in v0.8.2

func (ref *TypeReference) IsNilable() bool

func (*TypeReference) IsPtr

func (ref *TypeReference) IsPtr() bool

func (*TypeReference) IsPtrToIntf added in v0.17.32

func (ref *TypeReference) IsPtrToIntf() bool

func (*TypeReference) IsPtrToPtr added in v0.15.0

func (ref *TypeReference) IsPtrToPtr() bool

fix for https://github.com/golang/go/issues/31103 may make it possible to remove this (may still be useful)

func (*TypeReference) IsPtrToSlice added in v0.14.0

func (ref *TypeReference) IsPtrToSlice() bool

func (*TypeReference) IsScalar

func (ref *TypeReference) IsScalar() bool

func (*TypeReference) IsSlice

func (ref *TypeReference) IsSlice() bool

func (*TypeReference) IsStruct

func (ref *TypeReference) IsStruct() bool

func (*TypeReference) IsTargetNilable added in v0.12.0

func (ref *TypeReference) IsTargetNilable() bool

func (*TypeReference) MarshalFunc

func (ref *TypeReference) MarshalFunc() string

func (*TypeReference) UniquenessKey

func (ref *TypeReference) UniquenessKey() string

func (*TypeReference) UnmarshalFunc

func (ref *TypeReference) UnmarshalFunc() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL