mukan-ignite/ignite/pkg/cliui/log/output.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

146 lines
3.5 KiB
Go

package uilog
import (
"io"
"os"
"github.com/ignite/cli/v29/ignite/pkg/cliui/colors"
"github.com/ignite/cli/v29/ignite/pkg/cliui/lineprefixer"
"github.com/ignite/cli/v29/ignite/pkg/cliui/prefixgen"
"github.com/ignite/cli/v29/ignite/pkg/xio"
)
const (
defaultVerboseLabel = "ignite"
defaultVerboseLabelColor = colors.Red
)
// Verbosity enumerates possible verbosity levels for CLI output.
type Verbosity uint8
const (
VerbositySilent = iota
VerbosityDefault
VerbosityVerbose
)
// Outputer defines an interface for logging output creation.
type Outputer interface {
// NewOutput returns a new logging output.
NewOutput(label, color string) Output
// Verbosity returns the current verbosity level for the logging output.
Verbosity() Verbosity
}
// Output stores writers for standard output and error.
type Output struct {
verbosity Verbosity
stdout io.WriteCloser
stderr io.WriteCloser
}
// Stdout returns the standard output writer.
func (o Output) Stdout() io.WriteCloser {
return o.stdout
}
// Stderr returns the standard error writer.
func (o Output) Stderr() io.WriteCloser {
return o.stderr
}
// Verbosity returns the log output verbosity.
func (o Output) Verbosity() Verbosity {
return o.verbosity
}
type option struct {
stdout io.WriteCloser
stderr io.WriteCloser
verbosity Verbosity
verboseLabel string
verboseLabelColor string
}
// Option configures log output options.
type Option func(*option)
// Verbose changes the log output to be prefixed with "ignite".
func Verbose() Option {
return func(o *option) {
o.verbosity = VerbosityVerbose
o.verboseLabel = defaultVerboseLabel
o.verboseLabelColor = defaultVerboseLabelColor
}
}
// CustomVerbose changes the log output to be prefixed with a custom label.
func CustomVerbose(label, color string) Option {
return func(o *option) {
o.verbosity = VerbosityVerbose
o.verboseLabel = label
o.verboseLabelColor = color
}
}
// Silent creates a log output that doesn't print any of the written lines.
func Silent() Option {
return func(o *option) {
o.verbosity = VerbositySilent
}
}
// WithStdout sets a custom writer to use instead of the default `os.Stdout`.
func WithStdout(r io.WriteCloser) Option {
return func(o *option) {
o.stdout = r
}
}
// WithStderr sets a custom writer to use instead of the default `os.Stderr`.
func WithStderr(r io.WriteCloser) Option {
return func(o *option) {
o.stderr = r
}
}
// NewOutput creates a new log output.
// By default, the new output uses the default OS stdout and stderr to
// initialize the outputs with a default verbosity that doesn't change
// the output.
func NewOutput(options ...Option) (out Output) {
o := option{
verbosity: VerbosityDefault,
stdout: os.Stdout,
stderr: os.Stderr,
}
for _, apply := range options {
apply(&o)
}
out.verbosity = o.verbosity
switch o.verbosity {
case VerbositySilent:
out.stdout = xio.NopWriteCloser(io.Discard)
out.stderr = xio.NopWriteCloser(io.Discard)
case VerbosityVerbose:
// Function to add a custom prefix to each log output
prefixer := func(w io.Writer) *lineprefixer.Writer {
options := prefixgen.Common(prefixgen.Color(o.verboseLabelColor))
prefix := prefixgen.New(o.verboseLabel, options...).Gen()
return lineprefixer.NewWriter(w, func() string { return prefix })
}
out.stdout = xio.NopWriteCloser(prefixer(o.stdout))
out.stderr = xio.NopWriteCloser(prefixer(o.stderr))
default:
out.stdout = o.stdout
out.stderr = o.stderr
}
return out
}