mukan-ignite/ignite/config/chain/config.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

145 lines
4 KiB
Go

package chain
import (
"fmt"
"io"
"os"
"path/filepath"
"strings"
"gopkg.in/yaml.v3"
v0 "github.com/ignite/cli/v29/ignite/config/chain/v0"
v1 "github.com/ignite/cli/v29/ignite/config/chain/v1"
"github.com/ignite/cli/v29/ignite/config/chain/version"
)
var (
// ConfigFilenames is a list of recognized names as Ignite's chain config file.
ConfigFilenames = []string{"config.yml", "config.yaml"}
// DefaultTSClientPath defines the default relative path to use when generating the TS client.
// The path is relative to the app's directory.
DefaultTSClientPath = "ts-client"
// DefaultVuePath defines the default relative path to use when scaffolding a Vue app.
// The path is relative to the app's directory.
DefaultVuePath = "vue"
// DefaultComposablesPath defines the default relative path to use when generating useQuery composables for a Vue app.
// The path is relative to the app's directory.
DefaultComposablesPath = "vue/src/composables"
// DefaultVueTypesPath defines the default vue types path.
DefaultVueTypesPath = "vue/src/views/Types.vue"
// DefaultOpenAPIPath defines the default relative path to use when generating an OpenAPI schema.
// The path is relative to the app's directory.
DefaultOpenAPIPath = "docs/static/openapi.json"
// LatestVersion defines the latest version of the config.
LatestVersion version.Version = 1
// Versions holds config types for the supported versions.
Versions = map[version.Version]version.Converter{
0: &v0.Config{},
1: &v1.Config{},
}
)
type (
// Config defines the latest chain config.
Config = v1.Config
// Validator defines the latest validator settings.
Validator = v1.Validator
)
// DefaultChainConfig returns a config for the latest version initialized with default values.
func DefaultChainConfig() *Config {
return v1.DefaultConfig()
}
// FaucetHost returns the faucet host to use.
func FaucetHost(cfg *Config) string {
// We keep supporting Port option for backward compatibility
// TODO: drop this option in the future
host := cfg.Faucet.Host
if cfg.Faucet.Port != uint(0) {
host = fmt.Sprintf(":%d", cfg.Faucet.Port)
}
return host
}
// TSClientPath returns the relative path to the Typescript client directory.
// Path is relative to the app's directory.
func TSClientPath(conf Config) string {
if path := strings.TrimSpace(conf.Client.Typescript.Path); path != "" {
return filepath.Clean(path)
}
return DefaultTSClientPath
}
// ComposablesPath returns the relative path to the Vue useQuery composables directory.
// Path is relative to the app's directory.
func ComposablesPath(conf *Config) string {
if path := strings.TrimSpace(conf.Client.Composables.Path); path != "" {
return filepath.Clean(path)
}
return DefaultComposablesPath
}
// LocateDefault locates the default path for the config file.
// Returns ErrConfigNotFound when no config file found.
func LocateDefault(root string) (path string, err error) {
for _, name := range ConfigFilenames {
path = filepath.Join(root, name)
if _, err := os.Stat(path); err == nil {
return path, nil
} else if !os.IsNotExist(err) {
return "", err
}
}
return "", ErrConfigNotFound
}
// CheckVersion checks that the config version is the latest
// and if not a VersionError is returned.
func CheckVersion(configFile io.Reader) error {
version, err := ReadConfigVersion(configFile)
if err != nil {
return err
}
if version != LatestVersion {
return VersionError{version}
}
return nil
}
// Save saves a config to a YAML file.
func Save(c Config, path string) error {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC, 0o755)
if err != nil {
return err
}
defer file.Close()
return yaml.NewEncoder(file).Encode(c)
}
// FirstValidator returns the first validator from the validators list.
// An error is returned when there are no validators defined in the config.
func FirstValidator(conf *Config) (Validator, error) {
if len(conf.Validators) == 0 {
return Validator{}, &ValidationError{"at least one validator is required"}
}
return conf.Validators[0], nil
}