@@ -50,9 +50,87 @@ func (f *HiddenEnvsFilter) Apply() error {
50
50
f .oas .Paths .Delete (path )
51
51
}
52
52
}
53
+
54
+ if f .oas .Components == nil || f .oas .Components .Schemas == nil {
55
+ return nil
56
+ }
57
+
58
+ return f .applyOnSchemas (f .oas .Components .Schemas )
59
+ }
60
+
61
+ func (f * HiddenEnvsFilter ) applyOnSchemas (schemas openapi3.Schemas ) error {
62
+ for name , schema := range schemas {
63
+ if err := f .removeSchemaIfHiddenForEnv (name , schema , schemas ); err != nil {
64
+ return err
65
+ }
66
+ }
67
+ return nil
68
+ }
69
+
70
+ func (f * HiddenEnvsFilter ) removeSchemaIfHiddenForEnv (name string , schema * openapi3.SchemaRef , schemas openapi3.Schemas ) error {
71
+ if schema == nil {
72
+ return nil
73
+ }
74
+
75
+ // Remove the schema if it is hidden for the target environment
76
+ if extension , ok := schema .Extensions [hiddenEnvsExtension ]; ok {
77
+ log .Printf ("Found x-hidden-envs in schema: K: %q, V: %q" , hiddenEnvsExtension , extension )
78
+ if isHiddenExtensionEqualToTargetEnv (extension , f .metadata .targetEnv ) {
79
+ log .Printf ("Removing schema: %q because is hidden for target env: %q" , name , f .metadata .targetEnv )
80
+ delete (schemas , name )
81
+ return nil
82
+ }
83
+
84
+ // Remove the Hidden extension from the final OAS
85
+ delete (schema .Extensions , hiddenEnvsExtension )
86
+ }
87
+
88
+ if schema .Value == nil {
89
+ return nil
90
+ }
91
+
92
+ if schema .Value .Extensions != nil {
93
+ if extension , ok := schema .Value .Extensions [hiddenEnvsExtension ]; ok {
94
+ log .Printf ("Found x-hidden-envs in schema: K: %q, V: %q" , hiddenEnvsExtension , extension )
95
+ if isHiddenExtensionEqualToTargetEnv (extension , f .metadata .targetEnv ) {
96
+ log .Printf ("Removing schema: %q because is hidden for target env: %q" , name , f .metadata .targetEnv )
97
+ delete (schemas , name )
98
+ return nil
99
+ }
100
+
101
+ // Remove the Hidden extension from the final OAS
102
+ delete (schema .Value .Extensions , hiddenEnvsExtension )
103
+ }
104
+ }
105
+
106
+ // Remove properties and items if they are hidden for the target environment
107
+ if schema .Value .Properties != nil {
108
+ if err := f .applyOnSchemas (schema .Value .Properties ); err != nil {
109
+ return err
110
+ }
111
+ }
112
+
113
+ f .removeItemsIfHiddenForEnv (schema )
53
114
return nil
54
115
}
55
116
117
+ func (f * HiddenEnvsFilter ) removeItemsIfHiddenForEnv (schema * openapi3.SchemaRef ) {
118
+ if schema .Value == nil || schema .Value .Items == nil {
119
+ return
120
+ }
121
+
122
+ if extension , ok := schema .Value .Items .Extensions [hiddenEnvsExtension ]; ok {
123
+ log .Printf ("Found x-hidden-envs in items: K: %q, V: %q" , hiddenEnvsExtension , extension )
124
+ if isHiddenExtensionEqualToTargetEnv (extension , f .metadata .targetEnv ) {
125
+ log .Printf ("Removing items because is hidden for target env: %q" , f .metadata .targetEnv )
126
+ schema .Value .Items = nil
127
+ } else {
128
+ // Remove the Hidden extension from the final OAS
129
+ delete (schema .Value .Items .Extensions , hiddenEnvsExtension )
130
+ }
131
+ }
132
+ }
133
+
56
134
func (f * HiddenEnvsFilter ) applyOnPath (pathItem * openapi3.PathItem ) error {
57
135
for k , operation := range pathItem .Operations () {
58
136
f .removeOperationIfHiddenForEnv (k , pathItem , operation )
0 commit comments