@@ -50,9 +50,87 @@ func (f *HiddenEnvsFilter) Apply() error {
5050 f .oas .Paths .Delete (path )
5151 }
5252 }
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 )
53114 return nil
54115}
55116
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+
56134func (f * HiddenEnvsFilter ) applyOnPath (pathItem * openapi3.PathItem ) error {
57135 for k , operation := range pathItem .Operations () {
58136 f .removeOperationIfHiddenForEnv (k , pathItem , operation )
0 commit comments