mirror of
https://github.com/nvms/esr.git
synced 2025-12-16 22:50:53 +00:00
125 lines
2.8 KiB
Go
125 lines
2.8 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type Common struct {
|
|
Minify bool `yaml:"minify,omitempty"`
|
|
MinifyWhitespace bool `yaml:"minifyWhitespace"`
|
|
MinifyIdentifiers bool `yaml:"minifyIdentifiers"`
|
|
Bundle bool `yaml:"bundle"`
|
|
Sourcemap bool `yaml:"sourcemap"`
|
|
Platform string `yaml:"platform"`
|
|
Format string `yaml:"format"`
|
|
Outdir string `yaml:"outdir"`
|
|
JSX string `yaml:"jsx"`
|
|
JSXFactory string `yaml:"jsxFactory"`
|
|
JSXImportSource string `yaml:"jsxImportSource"`
|
|
Loader map[string]string `yaml:"loader,omitempty"`
|
|
External []string `yaml:"external,omitempty"`
|
|
}
|
|
|
|
type Config struct {
|
|
Serve *ServeConfig `yaml:"serve,omitempty"`
|
|
Build *BuildConfig `yaml:"build,omitempty"`
|
|
Run *RunConfig `yaml:"run,omitempty"`
|
|
Watch *WatchConfig `yaml:"watch,omitempty"`
|
|
Common `yaml:",inline"`
|
|
}
|
|
|
|
type ServeConfig struct {
|
|
Html string `yaml:"html"`
|
|
Port int `yaml:"port"`
|
|
Common `yaml:",inline"`
|
|
}
|
|
|
|
type BuildConfig struct {
|
|
Common `yaml:",inline"`
|
|
}
|
|
|
|
type RunConfig struct {
|
|
Runtime string `yaml:"runtime"`
|
|
Common `yaml:",inline"`
|
|
}
|
|
|
|
type WatchConfig struct {
|
|
Paths []string `yaml:"paths"`
|
|
}
|
|
|
|
func GetDefaultConfig() *Config {
|
|
defaultConfig := Common{
|
|
Minify: false,
|
|
MinifyWhitespace: false,
|
|
MinifyIdentifiers: false,
|
|
Bundle: true,
|
|
Sourcemap: true,
|
|
Platform: "browser",
|
|
Format: "esm",
|
|
Outdir: "public",
|
|
JSX: "automatic",
|
|
JSXFactory: "React.createElement",
|
|
JSXImportSource: "",
|
|
Loader: map[string]string{},
|
|
External: []string{},
|
|
}
|
|
|
|
return &Config{
|
|
Serve: &ServeConfig{
|
|
Html: "public/index.html",
|
|
Port: 1234,
|
|
Common: defaultConfig,
|
|
},
|
|
Build: &BuildConfig{
|
|
Common: defaultConfig,
|
|
},
|
|
Run: &RunConfig{
|
|
Runtime: "node",
|
|
Common: defaultConfig,
|
|
},
|
|
Watch: &WatchConfig{
|
|
Paths: []string{"src/**/*.{ts,tsx,js,jsx}"},
|
|
},
|
|
Common: defaultConfig,
|
|
}
|
|
}
|
|
|
|
func ReadConfig(filename string) (*Config, error) {
|
|
absPath, err := filepath.Abs(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data, err := os.ReadFile(absPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
config := GetDefaultConfig()
|
|
|
|
if err := yaml.Unmarshal(data, &config.Build); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, &config.Serve); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, &config.Run); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, &config.Watch); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := yaml.Unmarshal(data, &config); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return config, nil
|
|
}
|