package main import ( "encoding/json" "fmt" "os" "path/filepath" "strings" "github.com/evanw/esbuild/pkg/api" "gopkg.in/yaml.v3" ) func cfgToESBuildCfg(cfg options) api.BuildOptions { return api.BuildOptions{ EntryPoints: cfg.ESBuild.EntryPoints, Outdir: cfg.ESBuild.Outdir, Outfile: cfg.ESBuild.Outfile, Sourcemap: api.SourceMap(cfg.ESBuild.Sourcemap), Format: api.Format(cfg.ESBuild.Format), Splitting: cfg.ESBuild.Splitting, Platform: api.Platform(cfg.ESBuild.Platform), Bundle: cfg.ESBuild.Bundle, Write: cfg.ESBuild.Write, LogLevel: api.LogLevel(cfg.ESBuild.LogLevel), } } type options struct { ESBuild struct { EntryPoints []string `yaml:"entryPoints"` Outdir string `yaml:"outdir"` Outfile string `yaml:"outfile"` Sourcemap int `yaml:"sourcemap"` Format int `yaml:"format"` Splitting bool `yaml:"splitting"` Platform int `yaml:"platform"` Bundle bool `yaml:"bundle"` Write bool `yaml:"write"` LogLevel int `yaml:"logLevel"` PurgeBeforeBuild bool `yaml:"purgeBeforeBuild"` } `yaml:"esbuild"` Watch struct { Paths []string `yaml:"paths"` Exclude []string `yaml:"exclude"` } Serve struct { Path string `yaml:"path"` Port int `yaml:"port"` } `yaml:"serve"` Copy []struct { Src string `yaml:"src"` Dest string `yaml:"dest"` } `yaml:"copy"` Download []struct { Url string `yaml:"url"` Dest string `yaml:"dest"` } `yaml:"download"` Replace []struct { Pattern string `yaml:"pattern"` Search string `yaml:"search"` Replace string `yaml:"replace"` } `yaml:"replace"` Link struct { From string `yaml:"from"` To string `yaml:"to"` } `yaml:"link"` ProductionBuildOptions struct { CmdPostBuild string `yaml:"cmdPostBuild"` } `yaml:"productionBuildOptions"` NpmProxy struct { Overrides []NpmProxyOverride } `yaml:"npm_proxy"` } type NpmProxyOverride struct { Namespace string `yaml:"namespace"` Upstream string `yaml:"upstream"` PackageRoot string `yaml:"packageRoot"` } func readCfg(cfgPath string) []options { if filepath.Ext(cfgPath) == ".json" { jsonOpts := readJsonCfg(cfgPath) data, err := yaml.Marshal(jsonOpts) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } yamlPath := strings.TrimSuffix(cfgPath, ".json") + ".yaml" err = os.WriteFile(yamlPath, data, 0755) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } cfgPath = yamlPath } cfgContent, err := os.ReadFile(cfgPath) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } optsSetups := []options{} err = yaml.Unmarshal(cfgContent, &optsSetups) if err != nil { opt := options{} err = yaml.Unmarshal(cfgContent, &opt) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } optsSetups = append(optsSetups, opt) } return optsSetups } func readJsonCfg(cfgPath string) []options { cfgContent, err := os.ReadFile(cfgPath) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } optsSetups := []options{} err = json.Unmarshal(cfgContent, &optsSetups) if err != nil { opt := options{} err = json.Unmarshal(cfgContent, &opt) if err != nil { fmt.Printf("%+v\n", err) os.Exit(1) } optsSetups = append(optsSetups, opt) } return optsSetups }