Documentation
¶
Index ¶
- Constants
- Variables
- func CurrentID(ctx context.Context) *call.ID
- func FormatDescription(paras ...string) string
- func IDTypeNameFor(t Typed) string
- func IsInternal(ctx context.Context) bool
- func LoadIDs[T Typed](ctx context.Context, srv *Server, ids []ID[T]) ([]T, error)
- func NewDefaultHandler(es graphql.ExecutableSchema) *handler.Server
- func NoopDone(res Typed, cached bool, rerr error)
- func Tracer() trace.Tracer
- func UnwrapAs[T any](val any) (T, bool)
- type AllView
- type AroundFunc
- type Array
- func MapArrayInput[T Input, R Typed](opt ArrayInput[T], fn func(T) (R, error)) (Array[R], error)
- func NewBoolArray(elems ...bool) Array[Boolean]
- func NewFloatArray(elems ...float64) Array[Float]
- func NewIntArray(elems ...int) Array[Int]
- func NewStringArray(elems ...string) Array[String]
- func ToArray[A any, T Typed](fn func(A) T, elems ...A) Array[T]
- type ArrayInput
- type Boolean
- func (b Boolean) Bool() bool
- func (Boolean) DecodeInput(val any) (Input, error)
- func (Boolean) Decoder() InputDecoder
- func (b Boolean) MarshalJSON() ([]byte, error)
- func (b Boolean) SetField(v reflect.Value) error
- func (b Boolean) ToLiteral() call.Literal
- func (Boolean) Type() *ast.Type
- func (b Boolean) TypeDefinition(views ...string) *ast.Definition
- func (Boolean) TypeName() string
- func (b *Boolean) UnmarshalJSON(p []byte) error
- type Cache
- type CacheMap
- type Class
- func (cls Class[T]) Call(ctx context.Context, node Instance[T], fieldName string, view string, ...) (Typed, func(context.Context) error, error)
- func (cls Class[T]) Extend(spec FieldSpec, fun FieldFunc, cacheKeyFun FieldCacheKeyFunc)
- func (class Class[T]) Field(name string, views ...string) (Field[T], bool)
- func (class Class[T]) FieldSpec(name string, views ...string) (FieldSpec, bool)
- func (class Class[T]) IDType() (IDType, bool)
- func (class Class[T]) Install(fields ...Field[T])
- func (cls Class[T]) New(id *call.ID, val Typed) (Object, error)
- func (cls Class[T]) ParseField(ctx context.Context, view string, astField *ast.Field, vars map[string]any) (Selector, *ast.Type, error)
- func (cls Class[T]) TypeDefinition(views ...string) *ast.Definition
- func (cls Class[T]) TypeName() string
- func (class Class[T]) Typed() Typed
- type ClassOpts
- type DecoderFunc
- type Definitive
- type Derefable
- type Descriptive
- type DirectiveLocation
- type DirectiveSpec
- type DynamicArrayInput
- func (d DynamicArrayInput) DecodeInput(val any) (Input, error)
- func (d DynamicArrayInput) Decoder() InputDecoder
- func (d DynamicArrayInput) Len() int
- func (d DynamicArrayInput) Nth(i int) (Typed, error)
- func (d DynamicArrayInput) SetField(val reflect.Value) error
- func (d DynamicArrayInput) ToLiteral() call.Literal
- func (d DynamicArrayInput) Type() *ast.Type
- type DynamicArrayOutput
- type DynamicNullable
- type DynamicOptional
- func (o DynamicOptional) DecodeInput(val any) (Input, error)
- func (o DynamicOptional) Decoder() InputDecoder
- func (o DynamicOptional) Deref() (Typed, bool)
- func (o DynamicOptional) MarshalJSON() ([]byte, error)
- func (o DynamicOptional) SetField(val reflect.Value) error
- func (o DynamicOptional) ToLiteral() call.Literal
- func (o DynamicOptional) Type() *ast.Type
- type EnumValue
- type EnumValueName
- func (e *EnumValueName) DecodeInput(val any) (Input, error)
- func (e *EnumValueName) Decoder() InputDecoder
- func (e *EnumValueName) MarshalJSON() ([]byte, error)
- func (e *EnumValueName) ToLiteral() call.Literal
- func (e *EnumValueName) Type() *ast.Type
- func (e *EnumValueName) TypeDefinition(views ...string) *ast.Definition
- func (e *EnumValueName) TypeName() string
- type EnumValues
- func (e *EnumValues[T]) DecodeInput(val any) (Input, error)
- func (e *EnumValues[T]) Install(srv *Server)
- func (e *EnumValues[T]) Literal(val T) call.Literal
- func (e *EnumValues[T]) Lookup(val string) (T, error)
- func (e *EnumValues[T]) PossibleValues() ast.EnumValueList
- func (e *EnumValues[T]) Register(val T, desc ...string) T
- func (e *EnumValues[T]) Type() *ast.Type
- func (e *EnumValues[T]) TypeDefinition(views ...string) *ast.Definition
- func (e *EnumValues[T]) TypeName() string
- type Enumerable
- type ExactView
- type ExtendedError
- type Field
- func Func[T Typed, A any, R any](name string, fn func(ctx context.Context, self T, args A) (R, error)) Field[T]
- func FuncWithCacheKey[T Typed, A any, R any](name string, fn func(ctx context.Context, self T, args A) (R, error), ...) Field[T]
- func NodeFunc[T Typed, A any, R any](name string, fn func(ctx context.Context, self Instance[T], args A) (R, error)) Field[T]
- func NodeFuncWithCacheKey[T Typed, A any, R any](name string, fn func(ctx context.Context, self Instance[T], args A) (R, error), ...) Field[T]
- func (field Field[T]) ArgDeprecated(name string, paras ...string) Field[T]
- func (field Field[T]) ArgDoc(name string, paras ...string) Field[T]
- func (field Field[T]) ArgRemove(name string) Field[T]
- func (field Field[T]) ArgSensitive(name string) Field[T]
- func (field Field[T]) Deprecated(paras ...string) Field[T]
- func (field Field[T]) Doc(paras ...string) Field[T]
- func (field Field[T]) Extend() Field[T]
- func (field Field[T]) FieldDefinition() *ast.FieldDefinition
- func (field Field[T]) Impure(reason string, paras ...string) Field[T]
- func (field Field[T]) Meta() Field[T]
- func (field Field[T]) Sensitive() Field[T]
- func (field Field[T]) View(view View) Field[T]
- type FieldCacheKeyFunc
- type FieldFunc
- type FieldSpec
- type Fields
- type Float
- func (Float) DecodeInput(val any) (Input, error)
- func (Float) Decoder() InputDecoder
- func (f Float) Float64() float64
- func (f Float) MarshalJSON() ([]byte, error)
- func (f Float) SetField(v reflect.Value) error
- func (f Float) ToLiteral() call.Literal
- func (Float) Type() *ast.Type
- func (f Float) TypeDefinition(views ...string) *ast.Definition
- func (Float) TypeName() string
- func (f *Float) UnmarshalJSON(p []byte) error
- type ID
- func (i *ID[T]) Decode(str string) error
- func (i ID[T]) DecodeInput(val any) (Input, error)
- func (i ID[T]) Decoder() InputDecoder
- func (i ID[T]) Display() string
- func (i ID[T]) Encode() (string, error)
- func (i ID[T]) ID() *call.ID
- func (i ID[T]) Load(ctx context.Context, server *Server) (Instance[T], error)
- func (i ID[T]) MarshalJSON() ([]byte, error)
- func (i ID[T]) SetField(v reflect.Value) error
- func (i ID[T]) String() string
- func (i ID[T]) ToLiteral() call.Literal
- func (i ID[T]) Type() *ast.Type
- func (i ID[T]) TypeDefinition(views ...string) *ast.Definition
- func (i ID[T]) TypeName() string
- func (i *ID[T]) UnmarshalJSON(p []byte) error
- type IDType
- type IDWalker
- type IDable
- type Input
- type InputDecoder
- type InputObject
- type InputObjectSpec
- type InputSpec
- type InputSpecs
- type Inputs
- type Instance
- func (r Instance[T]) Call(ctx context.Context, s *Server, newID *call.ID) (Typed, *call.ID, error)
- func (r Instance[T]) GetPostCall() (func(context.Context) error, Typed)
- func (r Instance[T]) ID() *call.ID
- func (r Instance[T]) ObjectType() ObjectType
- func (r Instance[T]) Select(ctx context.Context, s *Server, sel Selector) (Typed, *call.ID, error)
- func (r Instance[T]) String() string
- func (o Instance[T]) Type() *ast.Type
- func (r Instance[T]) Unwrap() Typed
- func (r Instance[T]) WithMetadata(customDigest digest.Digest, isPure bool) Instance[T]
- func (r Instance[T]) WithPostCall(fn func(context.Context) error) Instance[T]
- type Int
- func (Int) DecodeInput(val any) (Input, error)
- func (Int) Decoder() InputDecoder
- func (i Int) Int() int
- func (i Int) Int64() int64
- func (i Int) MarshalJSON() ([]byte, error)
- func (i Int) SetField(v reflect.Value) error
- func (i Int) ToLiteral() call.Literal
- func (Int) Type() *ast.Type
- func (i Int) TypeDefinition(views ...string) *ast.Definition
- func (Int) TypeName() string
- func (i *Int) UnmarshalJSON(p []byte) error
- type Loadable
- type NamedInput
- type Nullable
- type Object
- type ObjectType
- type Optional
- func (o Optional[I]) DecodeInput(val any) (Input, error)
- func (o Optional[I]) Decoder() InputDecoder
- func (o Optional[I]) Deref() (Typed, bool)
- func (n Optional[I]) GetOr(v I) I
- func (o Optional[I]) MarshalJSON() ([]byte, error)
- func (o Optional[I]) ToLiteral() call.Literal
- func (o Optional[I]) ToNullable() Nullable[I]
- func (o Optional[I]) Type() *ast.Type
- func (o *Optional[I]) UnmarshalJSON(p []byte) error
- type PanicError
- type PostCallTyped
- type PostCallable
- type Scalar
- func (s Scalar[T]) DecodeInput(val any) (Input, error)
- func (s Scalar[T]) Decoder() InputDecoder
- func (s Scalar[T]) MarshalJSON() ([]byte, error)
- func (s Scalar[T]) ToLiteral() call.Literal
- func (s Scalar[T]) Type() *ast.Type
- func (s Scalar[T]) TypeDefinition(views ...string) *ast.Definition
- func (s Scalar[T]) TypeName() string
- func (s *Scalar[T]) UnmarshalJSON(p []byte) error
- type ScalarType
- type ScalarValue
- type Selection
- type Selector
- type Server
- func (s *Server) Around(rec AroundFunc)
- func (s *Server) Complexity(typeName, field string, childComplexity int, args map[string]interface{}) (int, bool)
- func (s *Server) Exec(ctx1 context.Context) graphql.ResponseHandler
- func (s *Server) ExecOp(ctx context.Context, gqlOp *graphql.OperationContext) (map[string]any, error)
- func (s *Server) InstallDirective(directive DirectiveSpec)
- func (s *Server) InstallObject(class ObjectType)
- func (s *Server) InstallScalar(scalar ScalarType)
- func (s *Server) InstallTypeDef(def TypeDef)
- func (s *Server) Load(ctx context.Context, id *call.ID) (Object, error)
- func (s *Server) ObjectType(name string) (ObjectType, bool)
- func (s *Server) Query(ctx context.Context, query string, vars map[string]any) (map[string]any, error)
- func (s *Server) Resolve(ctx context.Context, self Object, sels ...Selection) (map[string]any, error)
- func (s *Server) Root() Object
- func (s *Server) ScalarType(name string) (ScalarType, bool)
- func (s *Server) Schema() *ast.Schema
- func (s *Server) Select(ctx context.Context, self Object, dest any, sels ...Selector) error
- func (s *Server) TypeDef(name string) (TypeDef, bool)
- type Setter
- type String
- func (String) DecodeInput(val any) (Input, error)
- func (String) Decoder() InputDecoder
- func (s String) MarshalJSON() ([]byte, error)
- func (s String) SetField(v reflect.Value) error
- func (s String) String() string
- func (s String) ToLiteral() call.Literal
- func (String) Type() *ast.Type
- func (s String) TypeDefinition(views ...string) *ast.Definition
- func (String) TypeName() string
- func (s *String) UnmarshalJSON(p []byte) error
- type Type
- type TypeDef
- type Typed
- type View
- type Wrapper
Constants ¶
const InstrumentationLibrary = "dagger.io/dagql"
Variables ¶
var ( DirectiveLocationQuery = DirectiveLocations.Register("QUERY") DirectiveLocationMutation = DirectiveLocations.Register("MUTATION") DirectiveLocationSubscription = DirectiveLocations.Register("SUBSCRIPTION") DirectiveLocationField = DirectiveLocations.Register("FIELD") DirectiveLocationFragmentDefinition = DirectiveLocations.Register("FRAGMENT_DEFINITION") DirectiveLocationFragmentSpread = DirectiveLocations.Register("FRAGMENT_SPREAD") DirectiveLocationInlineFragment = DirectiveLocations.Register("INLINE_FRAGMENT") DirectiveLocationVariableDefinition = DirectiveLocations.Register("VARIABLE_DEFINITION") DirectiveLocationSchema = DirectiveLocations.Register("SCHEMA") DirectiveLocationScalar = DirectiveLocations.Register("SCALAR") DirectiveLocationObject = DirectiveLocations.Register("OBJECT") DirectiveLocationFieldDefinition = DirectiveLocations.Register("FIELD_DEFINITION") DirectiveLocationArgumentDefinition = DirectiveLocations.Register("ARGUMENT_DEFINITION") DirectiveLocationInterface = DirectiveLocations.Register("INTERFACE") DirectiveLocationUnion = DirectiveLocations.Register("UNION") DirectiveLocationEnum = DirectiveLocations.Register("ENUM") DirectiveLocationEnumValue = DirectiveLocations.Register("ENUM_VALUE") DirectiveLocationInputObject = DirectiveLocations.Register("INPUT_OBJECT") DirectiveLocationInputFieldDefinition = DirectiveLocations.Register("INPUT_FIELD_DEFINITION") )
var DirectiveLocations = NewEnum[DirectiveLocation]()
var ErrCacheMapRecursiveCall = fmt.Errorf("recursive call detected")
Functions ¶
func FormatDescription ¶
func IDTypeNameFor ¶ added in v0.9.8
func IsInternal ¶ added in v0.10.0
IsInternal returns whether the internal flag is set in the context.
func NewDefaultHandler ¶ added in v0.15.4
func NewDefaultHandler(es graphql.ExecutableSchema) *handler.Server
Types ¶
type AllView ¶ added in v0.12.0
type AllView struct{}
AllView is similar to the global view, however, instead of being an empty view, it's still counted as a view.
This means that each call for a field is associated with the server view, which results in slightly different caching behavior. Additionally, it can be overridden in different views.
type AroundFunc ¶
type AroundFunc func( context.Context, Object, *call.ID, ) (context.Context, func(res Typed, cached bool, err error))
AroundFunc is a function that is called around every non-cached selection.
It's a little funny looking. I may have goofed it. This will be cleaned up soon.
type Array ¶
type Array[T Typed] []T
Array is an array of GraphQL values.
func MapArrayInput ¶
func NewBoolArray ¶
func NewFloatArray ¶
func NewIntArray ¶
func NewStringArray ¶
type ArrayInput ¶
type ArrayInput[I Input] []I
Array is an array of GraphQL values.
func (ArrayInput[I]) DecodeInput ¶
func (a ArrayInput[I]) DecodeInput(val any) (Input, error)
func (ArrayInput[S]) Decoder ¶
func (a ArrayInput[S]) Decoder() InputDecoder
func (ArrayInput[S]) ToArray ¶
func (a ArrayInput[S]) ToArray() Array[S]
func (ArrayInput[S]) ToLiteral ¶
func (i ArrayInput[S]) ToLiteral() call.Literal
func (ArrayInput[S]) Type ¶
func (a ArrayInput[S]) Type() *ast.Type
type Boolean ¶
type Boolean bool
Boolean is a GraphQL Boolean scalar.
func NewBoolean ¶
func (Boolean) Decoder ¶
func (Boolean) Decoder() InputDecoder
func (Boolean) MarshalJSON ¶
func (Boolean) TypeDefinition ¶
func (b Boolean) TypeDefinition(views ...string) *ast.Definition
func (*Boolean) UnmarshalJSON ¶
type Cache ¶
type Cache interface { GetOrInitialize( context.Context, digest.Digest, func(context.Context) (Typed, error), ) (Typed, bool, error) GetOrInitializeWithPostCall( context.Context, digest.Digest, func(context.Context) (Typed, func(context.Context) error, error), ) (Typed, bool, func(context.Context) error, error) GetOrInitializeValue(context.Context, digest.Digest, Typed) (Typed, bool, error) }
Cache stores results of pure selections against Server.
type CacheMap ¶ added in v0.9.9
type CacheMap[K comparable, T any] interface { GetOrInitialize(context.Context, K, func(context.Context) (T, error)) (T, bool, error) Get(context.Context, K) (T, error) Keys() []K }
func NewCacheMap ¶ added in v0.9.9
func NewCacheMap[K comparable, T any]() CacheMap[K, T]
type Class ¶
type Class[T Typed] struct { // contains filtered or unexported fields }
Class is a class of Object types.
The class is defined by a set of fields, which are installed into the class dynamically at runtime.
func (Class[T]) Call ¶
func (cls Class[T]) Call( ctx context.Context, node Instance[T], fieldName string, view string, args map[string]Input, ) (Typed, func(context.Context) error, error)
Call calls a field on the class against an instance.
func (Class[T]) Extend ¶
func (cls Class[T]) Extend(spec FieldSpec, fun FieldFunc, cacheKeyFun FieldCacheKeyFunc)
func (Class[T]) ParseField ¶
func (cls Class[T]) ParseField(ctx context.Context, view string, astField *ast.Field, vars map[string]any) (Selector, *ast.Type, error)
ParseField parses a field selection into a Selector and return type.
func (Class[T]) TypeDefinition ¶
func (cls Class[T]) TypeDefinition(views ...string) *ast.Definition
TypeDefinition returns the schema definition of the class.
The definition is derived from the type name, description, and fields. The type may implement Definitive or Descriptive to provide more information.
Each currently defined field is installed on the returned definition.
type ClassOpts ¶
type ClassOpts[T Typed] struct { // NoIDs disables the default "id" field and disables the IDType method. NoIDs bool // Typed contains the Typed value whose Type() determines the class's type. // // In the simple case, we can just use a zero-value, but it is also allowed // to use a dynamic Typed value. Typed T }
type DecoderFunc ¶
func (DecoderFunc) DecodeInput ¶
func (f DecoderFunc) DecodeInput(val any) (Input, error)
type Definitive ¶
type Definitive interface {
TypeDefinition(views ...string) *ast.Definition
}
Definitive is a type that knows how to define itself in the schema.
type Derefable ¶
Derefable is a type that wraps another type.
In practice this is only used for Optional and Nullable. It should be used sparingly, since wrapping interfaces explodes very quickly.
type Descriptive ¶
type Descriptive interface {
TypeDescription() string
}
Descriptive is an interface for types that have a description.
The description is used in the schema. To provide a full definition, implement Definitive instead.
type DirectiveLocation ¶
type DirectiveLocation string
func (DirectiveLocation) Decoder ¶
func (DirectiveLocation) Decoder() InputDecoder
func (DirectiveLocation) ToLiteral ¶
func (d DirectiveLocation) ToLiteral() call.Literal
func (DirectiveLocation) Type ¶
func (DirectiveLocation) Type() *ast.Type
type DirectiveSpec ¶
type DirectiveSpec struct { Name string `field:"true"` Description string `field:"true"` Args InputSpecs `field:"true"` Locations []DirectiveLocation `field:"true"` IsRepeatable bool `field:"true"` }
func (DirectiveSpec) DirectiveDefinition ¶
func (d DirectiveSpec) DirectiveDefinition() *ast.DirectiveDefinition
type DynamicArrayInput ¶
func (DynamicArrayInput) DecodeInput ¶
func (d DynamicArrayInput) DecodeInput(val any) (Input, error)
func (DynamicArrayInput) Decoder ¶
func (d DynamicArrayInput) Decoder() InputDecoder
func (DynamicArrayInput) Len ¶
func (d DynamicArrayInput) Len() int
func (DynamicArrayInput) ToLiteral ¶
func (d DynamicArrayInput) ToLiteral() call.Literal
func (DynamicArrayInput) Type ¶
func (d DynamicArrayInput) Type() *ast.Type
type DynamicArrayOutput ¶
func (DynamicArrayOutput) Len ¶
func (d DynamicArrayOutput) Len() int
func (DynamicArrayOutput) MarshalJSON ¶
func (d DynamicArrayOutput) MarshalJSON() ([]byte, error)
func (DynamicArrayOutput) SetField ¶ added in v0.9.9
func (d DynamicArrayOutput) SetField(val reflect.Value) error
func (DynamicArrayOutput) Type ¶
func (d DynamicArrayOutput) Type() *ast.Type
type DynamicNullable ¶
func (DynamicNullable) Deref ¶
func (n DynamicNullable) Deref() (Typed, bool)
func (DynamicNullable) MarshalJSON ¶
func (n DynamicNullable) MarshalJSON() ([]byte, error)
func (DynamicNullable) Type ¶
func (n DynamicNullable) Type() *ast.Type
func (*DynamicNullable) UnmarshalJSON ¶
func (n *DynamicNullable) UnmarshalJSON(p []byte) error
type DynamicOptional ¶
func (DynamicOptional) DecodeInput ¶
func (o DynamicOptional) DecodeInput(val any) (Input, error)
func (DynamicOptional) Decoder ¶
func (o DynamicOptional) Decoder() InputDecoder
func (DynamicOptional) Deref ¶
func (o DynamicOptional) Deref() (Typed, bool)
func (DynamicOptional) MarshalJSON ¶
func (o DynamicOptional) MarshalJSON() ([]byte, error)
func (DynamicOptional) ToLiteral ¶
func (o DynamicOptional) ToLiteral() call.Literal
func (DynamicOptional) Type ¶
func (o DynamicOptional) Type() *ast.Type
type EnumValueName ¶ added in v0.13.6
func (*EnumValueName) DecodeInput ¶ added in v0.13.6
func (e *EnumValueName) DecodeInput(val any) (Input, error)
func (*EnumValueName) Decoder ¶ added in v0.13.6
func (e *EnumValueName) Decoder() InputDecoder
func (*EnumValueName) MarshalJSON ¶ added in v0.13.6
func (e *EnumValueName) MarshalJSON() ([]byte, error)
func (*EnumValueName) ToLiteral ¶ added in v0.13.6
func (e *EnumValueName) ToLiteral() call.Literal
func (*EnumValueName) Type ¶ added in v0.13.6
func (e *EnumValueName) Type() *ast.Type
func (*EnumValueName) TypeDefinition ¶ added in v0.13.6
func (e *EnumValueName) TypeDefinition(views ...string) *ast.Definition
func (*EnumValueName) TypeName ¶ added in v0.13.6
func (e *EnumValueName) TypeName() string
type EnumValues ¶
type EnumValues[T EnumValue] struct { // contains filtered or unexported fields }
EnumValues is a list of possible values for an Enum.
func NewEnum ¶
func NewEnum[T EnumValue](vals ...T) *EnumValues[T]
NewEnum creates a new EnumType with the given possible values.
func (*EnumValues[T]) DecodeInput ¶
func (e *EnumValues[T]) DecodeInput(val any) (Input, error)
func (*EnumValues[T]) Install ¶
func (e *EnumValues[T]) Install(srv *Server)
func (*EnumValues[T]) Literal ¶
func (e *EnumValues[T]) Literal(val T) call.Literal
func (*EnumValues[T]) Lookup ¶
func (e *EnumValues[T]) Lookup(val string) (T, error)
func (*EnumValues[T]) PossibleValues ¶
func (e *EnumValues[T]) PossibleValues() ast.EnumValueList
func (*EnumValues[T]) Register ¶
func (e *EnumValues[T]) Register(val T, desc ...string) T
func (*EnumValues[T]) Type ¶
func (e *EnumValues[T]) Type() *ast.Type
func (*EnumValues[T]) TypeDefinition ¶
func (e *EnumValues[T]) TypeDefinition(views ...string) *ast.Definition
func (*EnumValues[T]) TypeName ¶
func (e *EnumValues[T]) TypeName() string
type Enumerable ¶
type Enumerable interface { // Len returns the number of elements in the Enumerable. Len() int // Nth returns the Nth element of the Enumerable, with 1 representing the // first entry. Nth(int) (Typed, error) }
Enumerable is a value that has a length and allows indexing.
type ExtendedError ¶
ExtendedError is an error that can provide extra data in an error response.
type Field ¶
type Field[T Typed] struct { Spec FieldSpec Func func(context.Context, Instance[T], map[string]Input) (Typed, error) CacheKeyFunc func(context.Context, Instance[T], map[string]Input, digest.Digest) (digest.Digest, error) // ViewFilter is filter that specifies under which views this field is // accessible. If not view is present, the default is the "global" view. ViewFilter View }
Field defines a field of an Object type.
func Func ¶
func Func[T Typed, A any, R any](name string, fn func(ctx context.Context, self T, args A) (R, error)) Field[T]
Func is a helper for defining a field resolver and schema.
The function must accept a context.Context, the receiver, and a struct of arguments. All fields of the arguments struct must be Typed so that the schema may be derived, and Scalar to ensure a default value may be provided.
Arguments use struct tags to further configure the schema:
- `name:"bar"` sets the name of the argument. By default this is the toLowerCamel'd field name.
- `default:"foo"` sets the default value of the argument. The Scalar type determines how this value is parsed.
- `doc:"..."` sets the description of the argument.
The function must return a Typed value, and an error.
To configure a description for the field in the schema, call .Doc on the result.
func FuncWithCacheKey ¶ added in v0.15.3
func FuncWithCacheKey[T Typed, A any, R any]( name string, fn func(ctx context.Context, self T, args A) (R, error), cacheKeyFn func(ctx context.Context, self Instance[T], args A, origDgst digest.Digest) (digest.Digest, error), ) Field[T]
FuncWithCacheKey is like Func but allows specifying a custom digest that will be used to cache the operation in dagql.
func NodeFunc ¶
func NodeFunc[T Typed, A any, R any](name string, fn func(ctx context.Context, self Instance[T], args A) (R, error)) Field[T]
NodeFunc is the same as Func, except it passes the Instance instead of the receiver so that you can access its ID.
func NodeFuncWithCacheKey ¶ added in v0.15.3
func NodeFuncWithCacheKey[T Typed, A any, R any]( name string, fn func(ctx context.Context, self Instance[T], args A) (R, error), cacheKeyFn func(ctx context.Context, self Instance[T], args A, origDgst digest.Digest) (digest.Digest, error), ) Field[T]
NodeFuncWithCacheKey is like NodeFunc but allows specifying a custom digest that will be used to cache the operation in dagql.
func (Field[T]) ArgDeprecated ¶
func (Field[T]) ArgSensitive ¶
func (Field[T]) Deprecated ¶
Deprecated marks the field as deprecated, meaning it should not be used by new code.
func (Field[T]) Doc ¶
Doc sets the description of the field. Each argument is joined by two empty lines.
func (Field[T]) FieldDefinition ¶
func (field Field[T]) FieldDefinition() *ast.FieldDefinition
FieldDefinition returns the schema definition of the field.
func (Field[T]) Impure ¶
Impure marks the field as "impure", meaning its result may change over time, or it has side effects.
type FieldCacheKeyFunc ¶ added in v0.15.4
type FieldCacheKeyFunc func(context.Context, Object, map[string]Input, digest.Digest) (digest.Digest, error)
FieldCacheKeyFunc is a function that computes a cache key for a field on an object. The cache key will be used to cache the result of the field call in dagql's cache and serve as the digest of the call's ID.
type FieldFunc ¶
FieldFunc is a function that implements a field on an object while limited to the object's external interface.
type FieldSpec ¶
type FieldSpec struct { // Name is the name of the field. Name string // Description is the description of the field. Description string // Args is the list of arguments that the field accepts. Args InputSpecs // Type is the type of the field's result. Type Typed // Meta indicates that the field has no impact on the field's result. Meta bool // Sensitive indicates that the value returned by this field is sensitive and // should not be displayed in telemetry. Sensitive bool // ImpurityReason indicates that the field's result may change over time. ImpurityReason string // DeprecatedReason deprecates the field and provides a reason. DeprecatedReason string // Module is the module that provides the field's implementation. Module *call.Module // Directives is the list of GraphQL directives attached to this field. Directives []*ast.Directive // contains filtered or unexported fields }
FieldSpec is a specification for a field.
func (FieldSpec) FieldDefinition ¶
func (spec FieldSpec) FieldDefinition() *ast.FieldDefinition
type Float ¶
type Float float64
Float is a GraphQL Float scalar.
func (Float) Decoder ¶
func (Float) Decoder() InputDecoder
func (Float) MarshalJSON ¶
func (Float) TypeDefinition ¶
func (f Float) TypeDefinition(views ...string) *ast.Definition
func (*Float) UnmarshalJSON ¶
type ID ¶
type ID[T Typed] struct { // contains filtered or unexported fields }
ID is a type-checked ID scalar.
func (ID[T]) DecodeInput ¶
New creates a new ID with the given value.
It accepts either an *call.ID or a string. The string is expected to be the base64-encoded representation of an *call.ID.
func (ID[T]) Decoder ¶
func (i ID[T]) Decoder() InputDecoder
func (ID[T]) MarshalJSON ¶
func (ID[T]) TypeDefinition ¶
func (i ID[T]) TypeDefinition(views ...string) *ast.Definition
TypeDefinition returns the GraphQL definition of the type.
func (*ID[T]) UnmarshalJSON ¶
type IDType ¶
type IDType interface { Input IDable ScalarType }
type Input ¶
type Input interface { // All Inputs are typed. Typed // All Inputs are able to be represented as a Literal. call.Literate // All Inputs now how to decode new instances of themselves. Decoder() InputDecoder }
Input represents any value which may be passed as an input.
type InputDecoder ¶
type InputDecoder interface { // Decode converts a value to the Input type, if possible. DecodeInput(any) (Input, error) }
InputDecoder is a type that knows how to decode values into Inputs.
type InputObject ¶
type InputObject[T Type] struct { Value T }
func (InputObject[T]) Decoder ¶
func (InputObject[T]) Decoder() InputDecoder
func (InputObject[T]) ToLiteral ¶
func (input InputObject[T]) ToLiteral() call.Literal
func (InputObject[T]) Type ¶
func (InputObject[T]) Type() *ast.Type
type InputObjectSpec ¶
type InputObjectSpec struct { Name string Description string Fields InputSpecs }
func MustInputSpec ¶
func MustInputSpec(val Type) InputObjectSpec
func (InputObjectSpec) Install ¶
func (spec InputObjectSpec) Install(srv *Server)
func (InputObjectSpec) Type ¶
func (spec InputObjectSpec) Type() *ast.Type
func (InputObjectSpec) TypeDefinition ¶
func (spec InputObjectSpec) TypeDefinition(views ...string) *ast.Definition
func (InputObjectSpec) TypeName ¶
func (spec InputObjectSpec) TypeName() string
type InputSpec ¶
type InputSpec struct { // Name is the name of the argument. Name string // Description is the description of the argument. Description string // Type is the type of the argument. Type Input // Default is the default value of the argument. Default Input // DeprecatedReason deprecates the input and provides a reason. DeprecatedReason string // Sensitive indicates that the value of this arg is sensitive and should be // omitted from telemetry. Sensitive bool // Directives is the list of GraphQL directives attached to this input. Directives []*ast.Directive }
InputSpec specifies a field argument, or an input field.
type InputSpecs ¶
type InputSpecs []InputSpec
func (InputSpecs) ArgumentDefinitions ¶
func (specs InputSpecs) ArgumentDefinitions() []*ast.ArgumentDefinition
func (InputSpecs) FieldDefinitions ¶
func (specs InputSpecs) FieldDefinitions() []*ast.FieldDefinition
type Inputs ¶
type Inputs []NamedInput
type Instance ¶
type Instance[T Typed] struct { Constructor *call.ID Self T Class Class[T] Module *call.ID // contains filtered or unexported fields }
Instance is an instance of an Object type.
func NewInstanceForCurrentID ¶ added in v0.13.6
func NewInstanceForCurrentID[P, T Typed]( ctx context.Context, srv *Server, parent Instance[P], self T, ) (Instance[T], error)
NewInstanceForCurrentID creates a new Instance that's set to the current ID from the given self value.
func NewInstanceForID ¶ added in v0.15.3
func NewInstanceForID[P, T Typed]( srv *Server, parent Instance[P], self T, id *call.ID, ) (Instance[T], error)
NewInstanceForID creates a new Instance with the given ID and self value.
func (Instance[T]) Call ¶ added in v0.15.3
Call calls the field on the instance specified by the ID.
func (Instance[T]) GetPostCall ¶ added in v0.16.2
func (Instance[T]) ObjectType ¶
func (r Instance[T]) ObjectType() ObjectType
ObjectType returns the ObjectType of the instance.
func (Instance[T]) WithMetadata ¶ added in v0.15.3
WithMetadata returns an updated instance with the given metadata set. isPure changes the purity of the instance. customDigest overrides the default digest of the instance to the provided value. NOTE: customDigest must be used with care as any instances with the same digest will be considered equivalent and can thus replace each other in the cache. Generally, customDigest should be used when there's a content-based digest available that won't be caputured by the default, call-chain derived digest.
type Int ¶
type Int int64
Int is a GraphQL Int scalar.
func NewInt ¶
func NewInt[T constraints.Integer](val T) Int
func (Int) Decoder ¶
func (Int) Decoder() InputDecoder
func (Int) MarshalJSON ¶
func (Int) TypeDefinition ¶
func (i Int) TypeDefinition(views ...string) *ast.Definition
func (*Int) UnmarshalJSON ¶
type NamedInput ¶
func (NamedInput) String ¶
func (arg NamedInput) String() string
type Nullable ¶
Nullable wraps a type and allows it to be null.
This is used for optional arguments and return values.
func (Nullable[T]) MarshalJSON ¶
func (*Nullable[T]) UnmarshalJSON ¶
type Object ¶
type Object interface { Typed IDable PostCallable // ObjectType returns the type of the object. ObjectType() ObjectType // Call evaluates the field selected by the given ID and returns the result. // // The returned value is the raw Typed value returned from the field; it must // be instantiated with a class for further selection. // // Any Nullable values are automatically unwrapped. Call(context.Context, *Server, *call.ID) (Typed, *call.ID, error) // Select evaluates the field selected by the given selector and returns the result. // // The returned value is the raw Typed value returned from the field; it must // be instantiated with a class for further selection. // // Any Nullable values are automatically unwrapped. Select(context.Context, *Server, Selector) (Typed, *call.ID, error) }
Object represents an Object in the graph which has an ID and can have sub-selections.
type ObjectType ¶
type ObjectType interface { Type // Typed returns a Typed value whose Type refers to the object type. Typed() Typed // IDType returns the scalar type for the object's IDs. IDType() (IDType, bool) // New creates a new instance of the type. New(id *call.ID, val Typed) (Object, error) // ParseField parses the given field and returns a Selector and an expected // return type. ParseField(ctx context.Context, view string, astField *ast.Field, vars map[string]any) (Selector, *ast.Type, error) // Extend registers an additional field onto the type. // // Unlike natively added fields, the extended func is limited to the external // Object interface. // cacheKeyFun is optional, if not set the default dagql ID cache key will be used. Extend(spec FieldSpec, fun FieldFunc, cacheKeyFun FieldCacheKeyFunc) // FieldSpec looks up a field spec by name. FieldSpec(name string, views ...string) (FieldSpec, bool) }
ObjectType represents a GraphQL Object type.
type Optional ¶
Optional wraps a type and allows it to be null.
This is used for optional arguments and return values.
func (Optional[I]) Decoder ¶
func (o Optional[I]) Decoder() InputDecoder
func (Optional[I]) GetOr ¶
func (n Optional[I]) GetOr(v I) I
GetOr returns the value of the Optional, or the given value if the Optional is empty.
func (Optional[I]) MarshalJSON ¶
func (Optional[I]) ToNullable ¶
func (*Optional[I]) UnmarshalJSON ¶
type PanicError ¶ added in v0.10.0
func (PanicError) Error ¶ added in v0.10.0
func (err PanicError) Error() string
type PostCallTyped ¶ added in v0.16.0
type PostCallTyped struct { Typed // contains filtered or unexported fields }
PostCallTyped wraps a Typed value with an additional callback that needs to be called after any value is returned, whether the value was from cache or not
func NewPostCallTyped ¶ added in v0.16.2
func NewPostCallTyped(t Typed, fn func(context.Context) error) PostCallTyped
func (PostCallTyped) GetPostCall ¶ added in v0.16.2
func (p PostCallTyped) GetPostCall() (func(context.Context) error, Typed)
func (PostCallTyped) Unwrap ¶ added in v0.16.0
func (p PostCallTyped) Unwrap() Typed
type PostCallable ¶ added in v0.16.2
type PostCallable interface { // Return the postcall func (or nil if not set) and the Typed value in case it was wrapped // with a type used for attaching the postcall func GetPostCall() (func(context.Context) error, Typed) }
A type that has a callback attached that needs to always run before returned to a caller whether or not the type is being returned from cache or not
type Scalar ¶ added in v0.11.3
type Scalar[T ScalarValue] struct { Name string Value T }
Scalar is a GraphQL scalar.
func NewScalar ¶ added in v0.11.3
func NewScalar[T ScalarValue](name string, val T) Scalar[T]
func (Scalar[T]) DecodeInput ¶ added in v0.11.3
func (Scalar[T]) Decoder ¶ added in v0.11.3
func (s Scalar[T]) Decoder() InputDecoder
func (Scalar[T]) MarshalJSON ¶ added in v0.11.3
func (Scalar[T]) TypeDefinition ¶ added in v0.11.3
func (s Scalar[T]) TypeDefinition(views ...string) *ast.Definition
func (*Scalar[T]) UnmarshalJSON ¶ added in v0.11.3
type ScalarType ¶
type ScalarType interface { Type InputDecoder }
ScalarType represents a GraphQL Scalar type.
type ScalarValue ¶ added in v0.11.3
type ScalarValue interface { ScalarType Input }
type Selector ¶
type Selector struct { Field string Args []NamedInput Nth int View string // Override the default purity of the field. Typically used so that an impure // resolver call can return a pure result, by calling to itself or another // field with pure arguments. // // If Pure is false, and the field is marked Impure, the selection will not // be cached and the object's ID will be tainted. // // If Pure is true, the selection will be cached regardless of the field's // purity, and the object's ID will be untainted. Pure bool }
Selector specifies how to retrieve a value from an Instance.
type Server ¶
type Server struct { // View is the view that is applied to all queries on this server View string // Cache is the inner cache used by the server. It can be replicated to // another *Server to inherit and share caches. // // TODO: copy-on-write Cache Cache // contains filtered or unexported fields }
Server represents a GraphQL server whose schema is dynamically modified at runtime.
func (*Server) Around ¶
func (s *Server) Around(rec AroundFunc)
Around installs a function to be called around every non-cached selection.
func (*Server) Complexity ¶
func (s *Server) Complexity(typeName, field string, childComplexity int, args map[string]interface{}) (int, bool)
Complexity returns the complexity of the given field.
func (*Server) Exec ¶
func (s *Server) Exec(ctx1 context.Context) graphql.ResponseHandler
Exec implements graphql.ExecutableSchema.
func (*Server) InstallDirective ¶
func (s *Server) InstallDirective(directive DirectiveSpec)
InstallDirective installs the given Directive type into the schema.
func (*Server) InstallObject ¶
func (s *Server) InstallObject(class ObjectType)
InstallObject installs the given Object type into the schema.
func (*Server) InstallScalar ¶
func (s *Server) InstallScalar(scalar ScalarType)
InstallScalar installs the given Scalar type into the schema.
func (*Server) InstallTypeDef ¶
InstallTypeDef installs an arbitrary type definition into the schema.
func (*Server) ObjectType ¶
func (s *Server) ObjectType(name string) (ObjectType, bool)
ObjectType returns the ObjectType with the given name, if it exists.
func (*Server) Query ¶
func (s *Server) Query(ctx context.Context, query string, vars map[string]any) (map[string]any, error)
Query is a convenience method for executing a query against the server without having to go through HTTP. This can be useful for introspection, for example.
func (*Server) Resolve ¶
func (s *Server) Resolve(ctx context.Context, self Object, sels ...Selection) (map[string]any, error)
Resolve resolves the given selections on the given object.
Each selection is resolved in parallel, and the results are returned in a map whose keys correspond to the selection's field name or alias.
func (*Server) Root ¶
Root returns the root object of the server. It is suitable for passing to Resolve to resolve a query.
func (*Server) ScalarType ¶
func (s *Server) ScalarType(name string) (ScalarType, bool)
ScalarType returns the ScalarType with the given name, if it exists.
type Setter ¶
Setter allows a type to populate fields of a struct.
This is how builtins are supported.
type String ¶
type String string
String is a GraphQL String scalar.
func (String) Decoder ¶
func (String) Decoder() InputDecoder
func (String) MarshalJSON ¶
func (String) TypeDefinition ¶
func (s String) TypeDefinition(views ...string) *ast.Definition
func (*String) UnmarshalJSON ¶
type Type ¶
type Type interface { // TypeName returns the name of the type. TypeName() string }
Type is an object that defines a new GraphQL type.
type TypeDef ¶
type TypeDef interface { Type Definitive }
TypeDef is a type whose sole practical purpose is to define a GraphQL type, so it explicitly includes the Definitive interface.