From cfe0f6bb707bb6266eef3e90db2f29a2c68a6d62 Mon Sep 17 00:00:00 2001 From: yusing Date: Sat, 7 Jun 2025 22:28:44 +0800 Subject: [PATCH] fix(route): remove x-properties routes during loading --- internal/route/provider/file.go | 11 ++++++++++- internal/route/route.go | 3 +-- internal/serialization/serialization.go | 11 +++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/internal/route/provider/file.go b/internal/route/provider/file.go index 06921b7..f8941ab 100644 --- a/internal/route/provider/file.go +++ b/internal/route/provider/file.go @@ -33,8 +33,17 @@ func FileProviderImpl(filename string) (ProviderImpl, error) { return impl, nil } +func removeXPrefix(m map[string]any) gperr.Error { + for alias := range m { + if strings.HasPrefix(alias, "x-") { + delete(m, alias) + } + } + return nil +} + func validate(data []byte) (routes route.Routes, err gperr.Error) { - err = serialization.UnmarshalValidateYAML(data, &routes) + err = serialization.UnmarshalValidateYAMLIntercept(data, &routes, removeXPrefix) return } diff --git a/internal/route/route.go b/internal/route/route.go index a8e4e96..743224d 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -433,8 +433,7 @@ func (r *Route) ShouldExclude() bool { } else if r.IsZeroPort() && r.Scheme != route.SchemeFileServer { return true } - if strings.HasPrefix(r.Alias, "x-") || - strings.HasSuffix(r.Alias, "-old") { + if strings.HasSuffix(r.Alias, "-old") { return true } return false diff --git a/internal/serialization/serialization.go b/internal/serialization/serialization.go index 02ed971..5f5e1fc 100644 --- a/internal/serialization/serialization.go +++ b/internal/serialization/serialization.go @@ -528,6 +528,17 @@ func UnmarshalValidateYAML[T any](data []byte, target *T) gperr.Error { return MapUnmarshalValidate(m, target) } +func UnmarshalValidateYAMLIntercept[T any](data []byte, target *T, intercept func(m map[string]any) gperr.Error) gperr.Error { + m := make(map[string]any) + if err := yaml.Unmarshal(data, &m); err != nil { + return gperr.Wrap(err) + } + if err := intercept(m); err != nil { + return err + } + return MapUnmarshalValidate(m, target) +} + func UnmarshalValidateYAMLXSync[V any](data []byte) (_ functional.Map[string, V], err gperr.Error) { m := make(map[string]any) if err = gperr.Wrap(yaml.Unmarshal(data, &m)); err != nil {