codegen

package
v0.0.0-...-fbbced2 Latest Latest
Warning

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

Go to latest
Published: Oct 30, 2024 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateCode

func GenerateCode(data *Data) error

Types

type ArgSet

type ArgSet struct {
	Args     []*FieldArgument
	FuncDecl string
}

type AugmentedSource

type AugmentedSource struct {
	// path relative to Config.Exec.Filename
	RelativePath string
	Embeddable   bool
	BuiltIn      bool
	Source       string
}

AugmentedSource contains extra information about graphql schema files which is not known directly from the Config.Sources data

type Data

type Data struct {
	Config *config.Config
	Schema *ast.Schema
	// If a schema is broken up into multiple Data instance, each representing part of the schema,
	// AllDirectives should contain the directives for the entire schema. Directives() can
	// then be used to get the directives that were defined in this Data instance's sources.
	// If a single Data instance is used for the entire schema, AllDirectives and Directives()
	// will be identical.
	// AllDirectives should rarely be used directly.
	AllDirectives   DirectiveList
	Objects         Objects
	Inputs          Objects
	Interfaces      map[string]*Interface
	ReferencedTypes map[string]*config.TypeReference
	ComplexityRoots map[string]*Object

	QueryRoot        *Object
	MutationRoot     *Object
	SubscriptionRoot *Object
	AugmentedSources []AugmentedSource
	Plugins          []any
}

Data is a unified model of the code to be generated. Plugins may modify this structure to do things like implement resolvers or directives automatically (eg grpc, validation)

func BuildData

func BuildData(cfg *config.Config, plugins ...any) (*Data, error)

func (*Data) Args

func (d *Data) Args() map[string][]*FieldArgument

func (*Data) BuiltInDirectives

func (d *Data) BuiltInDirectives() DirectiveList

Get only the directives which should have a statically provided definition

func (*Data) Directives

func (d *Data) Directives() DirectiveList

Get only the directives which are defined in the config's sources.

func (*Data) HasEmbeddableSources

func (d *Data) HasEmbeddableSources() bool

func (*Data) UserDirectives

func (d *Data) UserDirectives() DirectiveList

Get only the directives which should have a user provided definition on server instantiation

type Directive

type Directive struct {
	*ast.DirectiveDefinition
	Name string
	Args []*FieldArgument

	config.DirectiveConfig
}

func (*Directive) ArgsFunc

func (d *Directive) ArgsFunc() string

func (*Directive) CallArgs

func (d *Directive) CallArgs() string

func (*Directive) CallName

func (d *Directive) CallName() string

func (*Directive) CallPath

func (d *Directive) CallPath() string

func (*Directive) Declaration

func (d *Directive) Declaration() string

func (*Directive) FunctionImpl

func (d *Directive) FunctionImpl() string

func (*Directive) IsBuiltIn

func (d *Directive) IsBuiltIn() bool

func (*Directive) IsLocation

func (d *Directive) IsLocation(location ...ast.DirectiveLocation) bool

IsLocation check location directive

func (*Directive) ResolveArgs

func (d *Directive) ResolveArgs(obj string, next int) string

type DirectiveList

type DirectiveList map[string]*Directive

func (DirectiveList) LocationDirectives

func (dl DirectiveList) LocationDirectives(location string) DirectiveList

LocationDirectives filter directives by location

type Field

type Field struct {
	*ast.FieldDefinition

	TypeReference    *config.TypeReference
	GoFieldType      GoFieldType      // The field type in go, if any
	GoReceiverName   string           // The name of method & var receiver in go, if any
	GoFieldName      string           // The name of the method or var in go, if any
	IsResolver       bool             // Does this field need a resolver
	Args             []*FieldArgument // A list of arguments to be passed to this field
	MethodHasContext bool             // If this is bound to a go method, does the method also take a context
	NoErr            bool             // If this is bound to a go method, does that method have an error as the second argument
	VOkFunc          bool             // If this is bound to a go method, is it of shape (interface{}, bool)
	Object           *Object          // A link back to the parent object
	Default          any              // The default value
	Stream           bool             // does this field return a channel?
	Directives       []*Directive
}

func (*Field) ArgsFunc

func (f *Field) ArgsFunc() string

func (*Field) CallArgs

func (f *Field) CallArgs() string

func (*Field) ChildFieldContextFunc

func (f *Field) ChildFieldContextFunc(name string) string

func (*Field) ComplexityArgs

func (f *Field) ComplexityArgs() string

func (*Field) ComplexitySignature

func (f *Field) ComplexitySignature() string

func (*Field) DirectiveObjName

func (f *Field) DirectiveObjName() string

func (*Field) FieldContextFunc

func (f *Field) FieldContextFunc() string

func (*Field) GoNameUnexported

func (f *Field) GoNameUnexported() string

func (*Field) GoResultName

func (f *Field) GoResultName() (string, bool)

func (*Field) HasDirectives

func (f *Field) HasDirectives() bool

func (*Field) ImplDirectives

func (f *Field) ImplDirectives() []*Directive

func (*Field) IsConcurrent

func (f *Field) IsConcurrent() bool

func (*Field) IsInputObject

func (f *Field) IsInputObject() bool

func (*Field) IsMap

func (f *Field) IsMap() bool

func (*Field) IsMethod

func (f *Field) IsMethod() bool

func (*Field) IsReserved

func (f *Field) IsReserved() bool

func (*Field) IsRoot

func (f *Field) IsRoot() bool

func (*Field) IsVariable

func (f *Field) IsVariable() bool

func (*Field) ResolverType

func (f *Field) ResolverType() string

func (*Field) ShortInvocation

func (f *Field) ShortInvocation() string

func (*Field) ShortResolverDeclaration

func (f *Field) ShortResolverDeclaration() string

func (*Field) ShortResolverSignature

func (f *Field) ShortResolverSignature(ft *goast.FuncType) string

ShortResolverSignature is identical to ShortResolverDeclaration, but respects previous naming (return) conventions, if any.

type FieldArgument

type FieldArgument struct {
	*ast.ArgumentDefinition
	TypeReference                  *config.TypeReference
	VarName                        string  // The name of the var in go
	Object                         *Object // A link back to the parent object
	Default                        any     // The default value
	Directives                     []*Directive
	Value                          any // value set in Data
	CallArgumentDirectivesWithNull bool
}

func (*FieldArgument) DirectiveObjName

func (f *FieldArgument) DirectiveObjName() string

func (*FieldArgument) ImplDirectives

func (f *FieldArgument) ImplDirectives() []*Directive

ImplDirectives get not SkipRuntime and location ARGUMENT_DEFINITION directive

func (*FieldArgument) Stream

func (f *FieldArgument) Stream() bool

type GoFieldType

type GoFieldType int
const (
	GoFieldUndefined GoFieldType = iota
	GoFieldMethod
	GoFieldVariable
	GoFieldMap
)

type Interface

type Interface struct {
	*ast.Definition
	Type         types.Type
	Implementors []InterfaceImplementor
	InTypemap    bool
}

type InterfaceImplementor

type InterfaceImplementor struct {
	*ast.Definition

	Type    types.Type
	TakeRef bool
}

func (*InterfaceImplementor) CanBeNil

func (i *InterfaceImplementor) CanBeNil() bool

type Object

type Object struct {
	*ast.Definition

	Type                     types.Type
	ResolverInterface        types.Type
	Root                     bool
	Fields                   []*Field
	Implements               []*ast.Definition
	DisableConcurrency       bool
	Stream                   bool
	Directives               []*Directive
	PointersInUnmarshalInput bool
}

func (*Object) Description

func (o *Object) Description() string

func (*Object) HasDirectives

func (o *Object) HasDirectives() bool

func (*Object) HasField

func (o *Object) HasField(name string) bool

func (*Object) HasResolvers

func (o *Object) HasResolvers() bool

func (*Object) HasUnmarshal

func (o *Object) HasUnmarshal() bool

func (*Object) Implementors

func (o *Object) Implementors() string

func (*Object) IsConcurrent

func (o *Object) IsConcurrent() bool

func (*Object) IsMap

func (o *Object) IsMap() bool

func (*Object) IsReserved

func (o *Object) IsReserved() bool

func (*Object) Reference

func (o *Object) Reference() types.Type

func (*Object) UniqueFields

func (o *Object) UniqueFields() map[string][]*Field

type Objects

type Objects []*Object

func (Objects) ByName

func (os Objects) ByName(name string) *Object

Jump to

Keyboard shortcuts

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