diff --git a/cli/azd/cmd/cobra_builder.go b/cli/azd/cmd/cobra_builder.go index d9aff559174..94b19593c26 100644 --- a/cli/azd/cmd/cobra_builder.go +++ b/cli/azd/cmd/cobra_builder.go @@ -33,7 +33,7 @@ func NewCobraBuilder(container *container.Container) *CobraBuilder { } // Builds a cobra Command for the specified action descriptor -func (cb *CobraBuilder) BuildCommand(descriptor *actions.ActionDescriptor) (*cobra.Command, error) { +func (cb *CobraBuilder) BuildCommand(ctx context.Context, descriptor *actions.ActionDescriptor) (*cobra.Command, error) { cmd := descriptor.Options.Command if cmd.Use == "" { cmd.Use = descriptor.Name @@ -41,7 +41,7 @@ func (cb *CobraBuilder) BuildCommand(descriptor *actions.ActionDescriptor) (*cob // Build the full command tree for _, childDescriptor := range descriptor.Children() { - childCmd, err := cb.BuildCommand(childDescriptor) + childCmd, err := cb.BuildCommand(ctx, childDescriptor) if err != nil { return nil, err } @@ -52,7 +52,7 @@ func (cb *CobraBuilder) BuildCommand(descriptor *actions.ActionDescriptor) (*cob // Bind root command after command tree has been established // This ensures the command path is ready and consistent across all nested commands if descriptor.Parent() == nil { - if err := cb.bindCommand(cmd, descriptor); err != nil { + if err := cb.bindCommand(ctx, cmd, descriptor); err != nil { return nil, err } } @@ -204,7 +204,7 @@ func (df *docsFlag) Set(value string) error { } // Binds the intersection of cobra command options and action descriptor options -func (cb *CobraBuilder) bindCommand(cmd *cobra.Command, descriptor *actions.ActionDescriptor) error { +func (cb *CobraBuilder) bindCommand(ctx context.Context, cmd *cobra.Command, descriptor *actions.ActionDescriptor) error { actionName := createActionName(cmd) // Automatically adds a consistent help flag @@ -237,7 +237,7 @@ func (cb *CobraBuilder) bindCommand(cmd *cobra.Command, descriptor *actions.Acti // The flags resolver is constructed and bound to the cobra command via dependency injection // This allows flags to be options and support any set of required dependencies - if err := cb.container.InvokeAndRegister(context.TODO(), container.RegisterOptions{ + if err := cb.container.InvokeAndRegister(ctx, container.RegisterOptions{ Resolver: descriptor.Options.FlagsResolver, Lifetime: container.Singleton, }); err != nil { @@ -277,7 +277,7 @@ func (cb *CobraBuilder) bindCommand(cmd *cobra.Command, descriptor *actions.Acti // Bind the child commands for the current descriptor for _, childDescriptor := range descriptor.Children() { childCmd := childDescriptor.Options.Command - if err := cb.bindCommand(childCmd, childDescriptor); err != nil { + if err := cb.bindCommand(ctx, childCmd, childDescriptor); err != nil { return err } } diff --git a/cli/azd/cmd/cobra_builder_test.go b/cli/azd/cmd/cobra_builder_test.go index 6037f6f7e80..5edff4013f2 100644 --- a/cli/azd/cmd/cobra_builder_test.go +++ b/cli/azd/cmd/cobra_builder_test.go @@ -35,15 +35,16 @@ func Test_BuildAndRunSimpleCommand(t *testing.T) { }, }) + ctx := context.Background() builder := NewCobraBuilder(container) - cmd, err := builder.BuildCommand(root) + cmd, err := builder.BuildCommand(ctx, root) require.NotNil(t, cmd) require.NoError(t, err) // Disable args processing from os:args cmd.SetArgs([]string{}) - err = cmd.ExecuteContext(context.Background()) + err = cmd.ExecuteContext(ctx) require.NoError(t, err) require.True(t, ran) @@ -58,14 +59,15 @@ func Test_BuildAndRunSimpleAction(t *testing.T) { FlagsResolver: newTestFlags, }) + ctx := context.Background() builder := NewCobraBuilder(rootContainer) - cmd, err := builder.BuildCommand(root) + cmd, err := builder.BuildCommand(ctx, root) require.NotNil(t, cmd) require.NoError(t, err) cmd.SetArgs([]string{"-r"}) - err = cmd.ExecuteContext(context.Background()) + err = cmd.ExecuteContext(ctx) require.NoError(t, err) } @@ -79,8 +81,9 @@ func Test_BuildAndRunSimpleActionWithMiddleware(t *testing.T) { FlagsResolver: newTestFlags, }).UseMiddleware("A", newTestMiddlewareA) + ctx := context.Background() builder := NewCobraBuilder(rootContainer) - cmd, err := builder.BuildCommand(root) + cmd, err := builder.BuildCommand(ctx, root) require.NotNil(t, cmd) require.NoError(t, err) @@ -88,7 +91,6 @@ func Test_BuildAndRunSimpleActionWithMiddleware(t *testing.T) { actionRan := false middlewareRan := false - ctx := context.Background() ctx = context.WithValue(ctx, actionName, &actionRan) ctx = context.WithValue(ctx, middlewareAName, &middlewareRan) @@ -112,8 +114,9 @@ func Test_BuildAndRunActionWithNestedMiddleware(t *testing.T) { FlagsResolver: newTestFlags, }).UseMiddleware("B", newTestMiddlewareB) + ctx := context.Background() builder := NewCobraBuilder(rootContainer) - cmd, err := builder.BuildCommand(root) + cmd, err := builder.BuildCommand(ctx, root) require.NotNil(t, cmd) require.NoError(t, err) @@ -122,7 +125,6 @@ func Test_BuildAndRunActionWithNestedMiddleware(t *testing.T) { middlewareARan := false middlewareBRan := false - ctx := context.Background() ctx = context.WithValue(ctx, actionName, &actionRan) ctx = context.WithValue(ctx, middlewareAName, &middlewareARan) ctx = context.WithValue(ctx, middlewareBName, &middlewareBRan) @@ -154,8 +156,9 @@ func Test_BuildAndRunActionWithNestedAndConditionalMiddleware(t *testing.T) { return false }) + ctx := context.Background() builder := NewCobraBuilder(rootContainer) - cmd, err := builder.BuildCommand(root) + cmd, err := builder.BuildCommand(ctx, root) require.NotNil(t, cmd) require.NoError(t, err) @@ -164,7 +167,6 @@ func Test_BuildAndRunActionWithNestedAndConditionalMiddleware(t *testing.T) { middlewareARan := false middlewareBRan := false - ctx := context.Background() ctx = context.WithValue(ctx, actionName, &actionRan) ctx = context.WithValue(ctx, middlewareAName, &middlewareARan) ctx = context.WithValue(ctx, middlewareBName, &middlewareBRan) @@ -191,8 +193,9 @@ func Test_BuildCommandsWithAutomaticHelpAndOutputFlags(t *testing.T) { }, }) + ctx := context.Background() cobraBuilder := NewCobraBuilder(rootContainer) - cmd, err := cobraBuilder.BuildCommand(root) + cmd, err := cobraBuilder.BuildCommand(ctx, root) require.NoError(t, err) require.NotNil(t, cmd) @@ -238,7 +241,7 @@ func Test_RunDocsFlow(t *testing.T) { } cobraBuilder := NewCobraBuilder(rootContainer) - cmd, err := cobraBuilder.BuildCommand(root) + cmd, err := cobraBuilder.BuildCommand(*testCtx.Context, root) require.NoError(t, err) require.NotNil(t, cmd) @@ -270,7 +273,7 @@ func Test_RunDocsAndHelpFlow(t *testing.T) { } cobraBuilder := NewCobraBuilder(rootContainer) - cmd, err := cobraBuilder.BuildCommand(root) + cmd, err := cobraBuilder.BuildCommand(*testCtx.Context, root) require.NoError(t, err) require.NotNil(t, cmd) diff --git a/cli/azd/cmd/container.go b/cli/azd/cmd/container.go index a21c6f9426e..73c54dda302 100644 --- a/cli/azd/cmd/container.go +++ b/cli/azd/cmd/container.go @@ -255,10 +255,10 @@ func registerCommonDependencies(rootContainer *container.Container) { container.MustRegisterSingleton( rootContainer, - func(serviceLocator ioc.ServiceLocator) *lazy.Lazy[environment.LocalDataStore] { + func(ctx context.Context, serviceLocator ioc.ServiceLocator) *lazy.Lazy[environment.LocalDataStore] { return lazy.NewLazy(func() (environment.LocalDataStore, error) { var localDataStore environment.LocalDataStore - err := serviceLocator.Resolve(context.TODO(), &localDataStore) + err := serviceLocator.Resolve(ctx, &localDataStore) if err != nil { return nil, err } @@ -271,7 +271,11 @@ func registerCommonDependencies(rootContainer *container.Container) { // Environment manager depends on azd context container.MustRegisterSingleton( rootContainer, - func(serviceLocator ioc.ServiceLocator, azdContext *lazy.Lazy[*azdcontext.AzdContext]) *lazy.Lazy[environment.Manager] { + func( + ctx context.Context, + serviceLocator ioc.ServiceLocator, + azdContext *lazy.Lazy[*azdcontext.AzdContext], + ) *lazy.Lazy[environment.Manager] { return lazy.NewLazy(func() (environment.Manager, error) { azdCtx, err := azdContext.GetValue() if err != nil { @@ -284,7 +288,7 @@ func registerCommonDependencies(rootContainer *container.Container) { } var envManager environment.Manager - err = serviceLocator.Resolve(context.TODO(), &envManager) + err = serviceLocator.Resolve(ctx, &envManager) if err != nil { return nil, err } @@ -507,14 +511,17 @@ func registerCommonDependencies(rootContainer *container.Container) { container.MustRegisterSingleton(rootContainer, templates.NewTemplateManager) container.MustRegisterSingleton(rootContainer, templates.NewSourceManager) container.MustRegisterScoped(rootContainer, project.NewResourceManager) - container.MustRegisterScoped(rootContainer, func(serviceLocator ioc.ServiceLocator) *lazy.Lazy[project.ResourceManager] { - return lazy.NewLazy(func() (project.ResourceManager, error) { - var resourceManager project.ResourceManager - err := serviceLocator.Resolve(context.TODO(), &resourceManager) + container.MustRegisterScoped( + rootContainer, + func(ctx context.Context, serviceLocator ioc.ServiceLocator) *lazy.Lazy[project.ResourceManager] { + return lazy.NewLazy(func() (project.ResourceManager, error) { + var resourceManager project.ResourceManager + err := serviceLocator.Resolve(ctx, &resourceManager) - return resourceManager, err - }) - }) + return resourceManager, err + }) + }, + ) container.MustRegisterScoped(rootContainer, project.NewProjectManager) // Currently caches manifest across command executions container.MustRegisterSingleton(rootContainer, project.NewDotNetImporter) @@ -527,14 +534,17 @@ func registerCommonDependencies(rootContainer *container.Container) { return project.ServiceOperationCache{} }) - container.MustRegisterScoped(rootContainer, func(serviceLocator ioc.ServiceLocator) *lazy.Lazy[project.ServiceManager] { - return lazy.NewLazy(func() (project.ServiceManager, error) { - var serviceManager project.ServiceManager - err := serviceLocator.Resolve(context.TODO(), &serviceManager) + container.MustRegisterScoped( + rootContainer, + func(ctx context.Context, serviceLocator ioc.ServiceLocator) *lazy.Lazy[project.ServiceManager] { + return lazy.NewLazy(func() (project.ServiceManager, error) { + var serviceManager project.ServiceManager + err := serviceLocator.Resolve(ctx, &serviceManager) - return serviceManager, err - }) - }) + return serviceManager, err + }) + }, + ) container.MustRegisterSingleton(rootContainer, repository.NewInitializer) container.MustRegisterSingleton(rootContainer, alpha.NewFeaturesManager) container.MustRegisterSingleton(rootContainer, config.NewUserConfigManager) @@ -771,14 +781,17 @@ func registerCommonDependencies(rootContainer *container.Container) { container.MustRegisterNamedSingleton(rootContainer, platformName, constructor) } - container.MustRegisterSingleton(rootContainer, func(s ioc.ServiceLocator) (workflow.AzdCommandRunner, error) { - var rootCmd *cobra.Command - if err := s.ResolveNamed(context.TODO(), "root-cmd", &rootCmd); err != nil { - return nil, err - } - return &workflowCmdAdapter{cmd: rootCmd}, nil + container.MustRegisterSingleton( + rootContainer, + func(ctx context.Context, s ioc.ServiceLocator) (workflow.AzdCommandRunner, error) { + var rootCmd *cobra.Command + if err := s.ResolveNamed(ctx, "root-cmd", &rootCmd); err != nil { + return nil, err + } + return &workflowCmdAdapter{cmd: rootCmd}, nil - }) + }, + ) container.MustRegisterSingleton(rootContainer, workflow.NewRunner) // Required for nested actions called from composite actions like 'up' diff --git a/cli/azd/cmd/root.go b/cli/azd/cmd/root.go index 3d7a58f1684..46d63a4efc6 100644 --- a/cli/azd/cmd/root.go +++ b/cli/azd/cmd/root.go @@ -33,6 +33,7 @@ import ( // rootContainer - The IoC container to use for registering and resolving dependencies. If nil is provided, a new // container empty will be created. func NewRootCmd( + ctx context.Context, staticHelp bool, middlewareChain []*actions.MiddlewareRegistration, rootContainer *container.Container, @@ -348,17 +349,17 @@ func NewRootCmd( // Initialize the platform specific components for the IoC container // Only container resolution errors will return an error // Invalid configurations will fall back to default platform - if _, err := platform.Initialize(rootContainer, azd.PlatformKindDefault); err != nil { + if _, err := platform.Initialize(ctx, rootContainer, azd.PlatformKindDefault); err != nil { panic(err) } // Compose the hierarchy of action descriptions into cobra commands var cobraBuilder *CobraBuilder - if err := rootContainer.Resolve(context.TODO(), &cobraBuilder); err != nil { + if err := rootContainer.Resolve(ctx, &cobraBuilder); err != nil { panic(err) } - cmd, err := cobraBuilder.BuildCommand(root) + cmd, err := cobraBuilder.BuildCommand(ctx, root) if err != nil { // If their is a container registration issue or similar we'll get an error at this point diff --git a/cli/azd/cmd/usage_test.go b/cli/azd/cmd/usage_test.go index d6dcb403eb1..ee65aaf3640 100644 --- a/cli/azd/cmd/usage_test.go +++ b/cli/azd/cmd/usage_test.go @@ -2,6 +2,7 @@ package cmd import ( "bytes" + "context" "html/template" "strings" "testing" @@ -21,7 +22,7 @@ import ( func TestUsage(t *testing.T) { // disable rich formatting output t.Setenv("TERM", "dumb") - root := NewRootCmd(false, nil, nil) + root := NewRootCmd(context.Background(), false, nil, nil) usageSnapshot(t, root) } diff --git a/cli/azd/docs/docgen.go b/cli/azd/docs/docgen.go index 222b237d7eb..47371aa1fd4 100644 --- a/cli/azd/docs/docgen.go +++ b/cli/azd/docs/docgen.go @@ -5,6 +5,7 @@ package main import ( "bytes" + "context" "fmt" "io" "io/fs" @@ -53,7 +54,7 @@ func main() { // staticHelp is true to inform commands to use generate help text instead // of generating help text that includes execution-specific state. - cmd := azd.NewRootCmd(true, nil, nil) + cmd := azd.NewRootCmd(context.Background(), true, nil, nil) basename := strings.Replace(cmd.CommandPath(), " ", "_", -1) + ".md" filename := filepath.Join("./md", basename) diff --git a/cli/azd/main.go b/cli/azd/main.go index 82ed8f87599..31320bf9f70 100644 --- a/cli/azd/main.go +++ b/cli/azd/main.go @@ -61,7 +61,9 @@ func main() { go fetchLatestVersion(latest) rootContainer := container.New() - cmdErr := cmd.NewRootCmd(false, nil, rootContainer).ExecuteContext(ctx) + cmdErr := cmd. + NewRootCmd(ctx, false, nil, rootContainer). + ExecuteContext(ctx) oneauth.Shutdown() diff --git a/cli/azd/pkg/environment/manager.go b/cli/azd/pkg/environment/manager.go index 9de7d69c8a4..4b74a0d421f 100644 --- a/cli/azd/pkg/environment/manager.go +++ b/cli/azd/pkg/environment/manager.go @@ -86,6 +86,7 @@ type manager struct { // NewManager creates a new Manager instance func NewManager( + ctx context.Context, serviceLocator ioc.ServiceLocator, azdContext *azdcontext.AzdContext, console input.Console, @@ -98,7 +99,7 @@ func NewManager( // via the container but we can't do that because the remote data store is optional and the IoC // container doesn't support optional interface based dependencies. if remoteConfig != nil { - err := serviceLocator.ResolveNamed(context.TODO(), remoteConfig.Backend, &remote) + err := serviceLocator.ResolveNamed(ctx, remoteConfig.Backend, &remote) if err != nil { if errors.Is(err, container.ErrResolutionFailed) { return nil, fmt.Errorf( diff --git a/cli/azd/pkg/platform/platform.go b/cli/azd/pkg/platform/platform.go index 414d499c76a..014761bc00c 100644 --- a/cli/azd/pkg/platform/platform.go +++ b/cli/azd/pkg/platform/platform.go @@ -22,13 +22,13 @@ type Config struct { } // Initialize configures the IoC container with the platform specific components -func Initialize(rootContainer *container.Container, defaultPlatform PlatformKind) (Provider, error) { +func Initialize(ctx context.Context, rootContainer *container.Container, defaultPlatform PlatformKind) (Provider, error) { // Enable the platform provider if it is configured var platformConfig *Config platformType := defaultPlatform // Override platform type when specified - if err := rootContainer.Resolve(context.TODO(), &platformConfig); err != nil { + if err := rootContainer.Resolve(ctx, &platformConfig); err != nil { Error = err } @@ -40,7 +40,7 @@ func Initialize(rootContainer *container.Container, defaultPlatform PlatformKind platformKey := fmt.Sprintf("%s-platform", platformType) // Resolve the platform provider - if err := rootContainer.ResolveNamed(context.TODO(), platformKey, &provider); err != nil { + if err := rootContainer.ResolveNamed(ctx, platformKey, &provider); err != nil { return nil, fmt.Errorf("failed to resolve platform provider '%s': %w", platformType, err) } diff --git a/cli/azd/pkg/platform/platform_test.go b/cli/azd/pkg/platform/platform_test.go index 170eab1fe68..508f5a98f81 100644 --- a/cli/azd/pkg/platform/platform_test.go +++ b/cli/azd/pkg/platform/platform_test.go @@ -1,6 +1,7 @@ package platform import ( + "context" "testing" "github.com/stretchr/testify/require" @@ -18,7 +19,7 @@ func Test_Platform_Initialize(t *testing.T) { } container.MustRegisterInstance(rootContainer, config) - provider, err := Initialize(rootContainer, PlatformKind("default")) + provider, err := Initialize(context.Background(), rootContainer, PlatformKind("default")) require.NoError(t, err) require.NotNil(t, provider) require.IsType(t, new(testProvider), provider) @@ -34,7 +35,7 @@ func Test_Platform_Initialize(t *testing.T) { return nil, ErrPlatformConfigNotFound }) - provider, err := Initialize(rootContainer, PlatformKind("default")) + provider, err := Initialize(context.Background(), rootContainer, PlatformKind("default")) require.NoError(t, err) require.NotNil(t, provider) require.IsType(t, new(defaultProvider), provider) @@ -52,7 +53,7 @@ func Test_Platform_Initialize(t *testing.T) { return nil, ErrPlatformNotSupported }) - provider, err := Initialize(rootContainer, PlatformKind("default")) + provider, err := Initialize(context.Background(), rootContainer, PlatformKind("default")) require.NoError(t, err) require.NotNil(t, provider) require.IsType(t, new(defaultProvider), provider) diff --git a/cli/azd/test/functional/initialize_test.go b/cli/azd/test/functional/initialize_test.go index 79f4f2f13d0..f9c224bdfa0 100644 --- a/cli/azd/test/functional/initialize_test.go +++ b/cli/azd/test/functional/initialize_test.go @@ -70,7 +70,7 @@ func Test_CommandsAndActions_Initialize(t *testing.T) { // Creates the azd root command with a "Skip" middleware that will skip the invocation // of the underlying command / actions - rootCmd := cmd.NewRootCmd(true, chain, nil) + rootCmd := cmd.NewRootCmd(ctx, true, chain, nil) testCommand(t, rootCmd, ctx, chain, tempDir) } @@ -93,7 +93,7 @@ func testCommand( fullCmd := fmt.Sprintf("%s %s", testCmd.Parent().CommandPath(), use) args := strings.Split(fullCmd, " ")[1:] args = append(args, "--cwd", cwd) - childCmd := cmd.NewRootCmd(true, chain, nil) + childCmd := cmd.NewRootCmd(ctx, true, chain, nil) childCmd.SetArgs(args) err := childCmd.ExecuteContext(ctx) require.NoError(t, err) diff --git a/go.mod b/go.mod index 31728a761bf..d75e907d8d0 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,6 @@ require ( github.com/drone/envsubst v1.0.3 github.com/fatih/color v1.13.0 github.com/gofrs/flock v0.8.1 - github.com/golobby/container/v3 v3.3.1 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.1 github.com/joho/godotenv v1.4.0 @@ -56,6 +55,7 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 github.com/theckman/yacspin v0.13.12 + github.com/wbreza/container/v4 v4.0.2 go.lsp.dev/jsonrpc2 v0.10.0 go.opentelemetry.io/otel v1.8.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.8.0 @@ -93,7 +93,6 @@ require ( github.com/segmentio/asm v1.1.3 // indirect github.com/segmentio/encoding v0.3.4 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/wbreza/container/v4 v4.0.1 // indirect go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.8.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.8.0 // indirect go.opentelemetry.io/proto/otlp v0.18.0 // indirect @@ -105,5 +104,3 @@ require ( google.golang.org/grpc v1.56.3 // indirect google.golang.org/protobuf v1.33.0 // indirect ) - -replace github.com/wbreza/container/v4 => D:/dev/wbreza/container diff --git a/go.sum b/go.sum index ab3e1472989..b7b195fb923 100644 --- a/go.sum +++ b/go.sum @@ -254,8 +254,6 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golobby/container/v3 v3.3.1 h1:Y+QpwChmkz86tAKimvqc0qls8A4eYm/PhMqSEt/HTj4= -github.com/golobby/container/v3 v3.3.1/go.mod h1:RDdKpnKpV1Of11PFBe7Dxc2C1k2KaLE4FD47FflAmj0= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -501,10 +499,8 @@ github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955u github.com/theckman/yacspin v0.13.12 h1:CdZ57+n0U6JMuh2xqjnjRq5Haj6v1ner2djtLQRzJr4= github.com/theckman/yacspin v0.13.12/go.mod h1:Rd2+oG2LmQi5f3zC3yeZAOl245z8QOvrH4OPOJNZxLg= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/wbreza/container/v4 v4.0.0-20240716203220-f56ba0132e2f h1:N9PrWQFEEw+a8wccZLDlmKar0SSGfcA4duLGJXZ5dqM= -github.com/wbreza/container/v4 v4.0.0-20240716203220-f56ba0132e2f/go.mod h1:UmlgHkczd55CJpqdxcez4Ds0SwnMI/A8MtFWCDnF7zg= -github.com/wbreza/container/v4 v4.0.1 h1:BpCO4Mteef3H7dhf87l+4DTF+SnbD5T31Wz8WNyYuDQ= -github.com/wbreza/container/v4 v4.0.1/go.mod h1:UmlgHkczd55CJpqdxcez4Ds0SwnMI/A8MtFWCDnF7zg= +github.com/wbreza/container/v4 v4.0.2 h1:+1y9G52fhTzJ0oIgRfo8dDb5QWealFWqzgI1dTNsBBo= +github.com/wbreza/container/v4 v4.0.2/go.mod h1:UmlgHkczd55CJpqdxcez4Ds0SwnMI/A8MtFWCDnF7zg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=