package config import ( "os" "strings" ) // parseDotEnv loads a KEY=VALUE .env file into a map. It is tolerant by design: // a missing file yields an empty map and no error, because .env is a // development-only convenience. Values may be single- or double-quoted and may // carry an optional `export` prefix. Lines starting with `#` and blank lines // are ignored. func parseDotEnv(path string) (map[string]string, error) { data, err := os.ReadFile(path) if err != nil { if os.IsNotExist(err) { return map[string]string{}, nil } return nil, err } env := make(map[string]string) for _, raw := range strings.Split(string(data), "\n") { line := strings.TrimSpace(raw) if line == "" || strings.HasPrefix(line, "#") { continue } line = strings.TrimPrefix(line, "export ") key, val, ok := strings.Cut(line, "=") if !ok { continue } key = strings.TrimSpace(key) val = strings.TrimSpace(val) val = strings.Trim(val, `"'`) env[key] = val } return env, nil }