MCPcopy Create free account
hub / github.com/dagger/dagger / Value

Method Value

core/modfunc.go:443–511  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

441}
442
443func (ud *UserDefault) Value(ctx context.Context) (any, error) {
444 if !ud.IsObject() && !ud.IsList() {
445 return ud.UserDefaultPrimitive.Value()
446 }
447 // List of non-object elements (e.g. []string) is handled by the primitive path
448 if ud.IsList() &&
449 ud.Arg.TypeDef.Self().AsList.Valid &&
450 ud.Arg.TypeDef.Self().AsList.Value.Self() != nil &&
451 ud.Arg.TypeDef.Self().AsList.Value.Self().ElementTypeDef.Self() != nil &&
452 ud.Arg.TypeDef.Self().AsList.Value.Self().ElementTypeDef.Self().Kind != TypeDefKindObject {
453 return ud.UserDefaultPrimitive.Value()
454 }
455 query, err := CurrentQuery(ctx)
456 if err != nil {
457 return nil, fmt.Errorf("get current query: %w", err)
458 }
459 mainClient, err := query.NonModuleParentClientMetadata(ctx)
460 if err != nil {
461 return nil, fmt.Errorf("access main client: %w", err)
462 }
463 mainCtx := engine.ContextWithClientMetadata(ctx, mainClient)
464 // Resolve object from user-supplied "address"
465 srv := dagql.CurrentDagqlServer(mainCtx)
466
467 resolveOne := func(userInput, typename string) (any, error) {
468 var result dagql.AnyObjectResult
469 if err := srv.Select(mainCtx, srv.Root(), &result,
470 dagql.Selector{
471 Field: "address",
472 Args: []dagql.NamedInput{{
473 Name: "value",
474 Value: dagql.NewString(userInput),
475 }},
476 },
477 dagql.Selector{
478 Field: strings.ToLower(typename),
479 },
480 ); err != nil {
481 return nil, ud.errorf(err, "resolve object (%q)", typename)
482 }
483
484 id, err := result.Select(mainCtx, srv, dagql.Selector{
485 Field: "id",
486 })
487 if err != nil {
488 return nil, ud.errorf(err, "get object ID")
489 }
490 return id.Unwrap(), nil
491 }
492
493 if ud.IsList() {
494 // "Secret" -> "secret", "GitRef" -> "gitRef", etc (from the element type)
495 typename := ud.Arg.TypeDef.Self().AsList.Value.Self().ElementTypeDef.Self().ToType().Name()
496 elements := strings.Split(ud.UserInput, ",")
497 ids := make([]any, 0, len(elements))
498 for _, elem := range elements {
499 id, err := resolveOne(strings.TrimSpace(elem), typename)
500 if err != nil {

Callers 2

CallInputMethod · 0.95
DagqlIDMethod · 0.95

Calls 15

IsObjectMethod · 0.95
IsListMethod · 0.95
SelectMethod · 0.95
CurrentDagqlServerFunction · 0.92
NewStringFunction · 0.92
CurrentQueryFunction · 0.85
SelfMethod · 0.80
errorfMethod · 0.80
ToTypeMethod · 0.80
ValueMethod · 0.65

Tested by

no test coverage detected