@@ -14,12 +14,26 @@ import (
1414
1515var digitCheck = regexp .MustCompile (`^[0-9]+$` )
1616
17- func UnifyParameterizedPathIfApplicable (path string ) string {
17+ // UnifyParameterizedPathIfApplicable normalizes a path by replacing dynamic segments with {paramN}.
18+ // If isSpec = true, also treats existing {param} segments in OpenAPI specs as parameters.
19+ func UnifyParameterizedPathIfApplicable (path string , isSpec bool ) string {
20+ if path == "" {
21+ return ""
22+ }
23+ if path == "/" {
24+ return "/"
25+ }
26+
27+ pathParts := strings .Split (strings .Trim (path , "/" ), "/" )
1828 var parameterizedPathParts []string
1929 paramCount := 0
20- pathParts := strings .Split (path , "/" )
2130
2231 for _ , part := range pathParts {
32+ if isSpec && strings .HasPrefix (part , "{" ) && strings .HasSuffix (part , "}" ) {
33+ parameterizedPathParts = append (parameterizedPathParts , part )
34+ continue
35+ }
36+
2337 if isSuspectPathParam (part ) {
2438 paramCount ++
2539 paramName := fmt .Sprintf ("param%v" , paramCount )
@@ -28,36 +42,19 @@ func UnifyParameterizedPathIfApplicable(path string) string {
2842 parameterizedPathParts = append (parameterizedPathParts , part )
2943 }
3044 }
31- return strings .Join (parameterizedPathParts , "/" )
32- }
33-
34- func isSuspectPathParam (pathPart string ) bool {
35- if isNumber (pathPart ) {
36- return true
37- }
38- if isUUID (pathPart ) {
39- return true
40- }
41- if isMixed (pathPart ) {
42- return true
43- }
44- if isString (pathPart ) {
45- return true
46- }
47- return false
45+ return "/" + strings .Join (parameterizedPathParts , "/" )
4846}
4947
50- func isString (pathPart string ) bool {
51- return strings .Contains (pathPart , "{" ) &&
52- strings .Contains (pathPart , "}" )
48+ func isSuspectPathParam (part string ) bool {
49+ return isNumber (part ) || isUUID (part ) || isMixed (part )
5350}
5451
55- func isNumber (pathPart string ) bool {
56- return digitCheck .MatchString (pathPart )
52+ func isNumber (s string ) bool {
53+ return digitCheck .MatchString (s )
5754}
5855
59- func isUUID (pathPart string ) bool {
60- _ , err := uuid .FromString (pathPart )
56+ func isUUID (s string ) bool {
57+ _ , err := uuid .FromString (s )
6158 return err == nil
6259}
6360
0 commit comments