@@ -72,9 +72,8 @@ const allowedDefaultRefs = [
72
72
'queryParameters'
73
73
] ;
74
74
75
- // Remove non OpenApi properties (properties from https://swagger.io/specification/#schema-object)
76
- exports . defaultSanitizeSchema = function defaultSanitizeSchema ( schema ) {
77
- return pick ( schema , [
75
+ exports . defaultTransformSchema = function defaultTransformSchema ( schema ) {
76
+ const allowedProperties = pick ( schema , [
78
77
'title' ,
79
78
'multipleOf' ,
80
79
'maximum' ,
@@ -90,6 +89,8 @@ exports.defaultSanitizeSchema = function defaultSanitizeSchema (schema) {
90
89
'maxProperties' ,
91
90
'minProperties' ,
92
91
'required' ,
92
+ 'dependentRequired' ,
93
+ 'const' ,
93
94
'enum' ,
94
95
'type' ,
95
96
'allOf' ,
@@ -109,8 +110,38 @@ exports.defaultSanitizeSchema = function defaultSanitizeSchema (schema) {
109
110
'xml' ,
110
111
'externalDocs' ,
111
112
'example' ,
112
- 'deprecated'
113
+ 'deprecated' ,
114
+ '$ref' ,
115
+ '$dynamicRef' ,
116
+ '$anchor' ,
117
+ '$dynamicAnchor' ,
118
+ '$recursiveRef' ,
119
+ '$recursiveAnchor' ,
120
+ '$defs' ,
121
+ '$comment'
113
122
] ) ;
123
+
124
+ if ( allowedProperties . $ref && ! allowedProperties . $ref . includes ( '#' ) ) {
125
+ allowedProperties . $ref = '#/components/schemas/' + allowedProperties . $ref ;
126
+ }
127
+
128
+ if ( allowedProperties . items ) {
129
+ allowedProperties . items = defaultTransformSchema ( allowedProperties . items ) ;
130
+ }
131
+
132
+ if ( allowedProperties . properties ) {
133
+ allowedProperties . properties = Object . entries ( allowedProperties . properties ) . reduce (
134
+ ( previousValue , [ key , value ] ) => {
135
+ return {
136
+ ...previousValue ,
137
+ [ key ] : defaultTransformSchema ( value )
138
+ } ;
139
+ } ,
140
+ { }
141
+ ) ;
142
+ }
143
+
144
+ return allowedProperties ;
114
145
} ;
115
146
116
147
function determineSchemaPrefix ( schemas ) {
@@ -134,9 +165,9 @@ function determineSchemaPrefix (schemas) {
134
165
return undefined ;
135
166
}
136
167
137
- exports . createSwaggerServiceOptions = function createSwaggerServiceOptions ( { schemas, docs, sanitizeSchema } ) {
168
+ exports . createSwaggerServiceOptions = function createSwaggerServiceOptions ( { schemas, docs, transformSchema } ) {
138
169
const serviceDocs = { schemas : { } , refs : { } } ;
139
- const sanitizeSchemaFn = sanitizeSchema || exports . defaultSanitizeSchema ;
170
+ const transformSchemaFn = transformSchema || exports . defaultTransformSchema ;
140
171
141
172
let unspecificSchemas ;
142
173
const prefix = determineSchemaPrefix ( schemas ) ;
@@ -159,7 +190,7 @@ exports.createSwaggerServiceOptions = function createSwaggerServiceOptions ({ sc
159
190
const listSchemaName = `${ baseSchemeName } List` ;
160
191
161
192
serviceDocs . schemas = {
162
- [ baseSchemeName ] : sanitizeSchemaFn ( resultSchema ) ,
193
+ [ baseSchemeName ] : transformSchemaFn ( resultSchema ) ,
163
194
[ listSchemaName ] : {
164
195
type : 'array' ,
165
196
items : { $ref : `#/components/schemas/${ baseSchemeName } ` }
@@ -170,7 +201,7 @@ exports.createSwaggerServiceOptions = function createSwaggerServiceOptions ({ sc
170
201
171
202
if ( dataSchema ) {
172
203
const dataSchemeName = dataSchema . $id || `${ baseSchemeName } Data` ;
173
- serviceDocs . schemas [ dataSchemeName ] = sanitizeSchemaFn ( dataSchema ) ;
204
+ serviceDocs . schemas [ dataSchemeName ] = transformSchemaFn ( dataSchema ) ;
174
205
serviceDocs . refs . createRequest = dataSchemeName ;
175
206
serviceDocs . refs . updateRequest = dataSchemeName ;
176
207
}
@@ -181,13 +212,13 @@ exports.createSwaggerServiceOptions = function createSwaggerServiceOptions ({ sc
181
212
properties : omit ( baseQuerySchema . properties , [ '$limit' , '$skip' ] )
182
213
} ;
183
214
const querySchemaName = querySchema . $id || `${ baseSchemeName } Query` ;
184
- serviceDocs . schemas [ querySchemaName ] = sanitizeSchemaFn ( querySchema ) ;
215
+ serviceDocs . schemas [ querySchemaName ] = transformSchemaFn ( querySchema ) ;
185
216
serviceDocs . refs . queryParameters = querySchemaName ;
186
217
}
187
218
188
219
if ( patchSchema ) {
189
220
const patchSchemaName = patchSchema . $id || `${ baseSchemeName } PatchData` ;
190
- serviceDocs . schemas [ patchSchemaName ] = sanitizeSchemaFn ( patchSchema ) ;
221
+ serviceDocs . schemas [ patchSchemaName ] = transformSchemaFn ( patchSchema ) ;
191
222
serviceDocs . refs . patchRequest = patchSchemaName ;
192
223
}
193
224
@@ -203,7 +234,7 @@ exports.createSwaggerServiceOptions = function createSwaggerServiceOptions ({ sc
203
234
Object . entries ( unspecificSchemas ) . forEach ( ( [ key , schema ] ) => {
204
235
const schemaName = schema . $id ;
205
236
if ( schemaName ) {
206
- serviceDocs . schemas [ schemaName ] = sanitizeSchemaFn ( schema ) ;
237
+ serviceDocs . schemas [ schemaName ] = transformSchemaFn ( schema ) ;
207
238
if ( allowedDefaultRefs . includes ( key ) ) {
208
239
serviceDocs . refs [ key ] = schemaName ;
209
240
}
0 commit comments