@@ -113,55 +113,83 @@ exports.defaultSanitizeSchema = function defaultSanitizeSchema (schema) {
113
113
] ) ;
114
114
} ;
115
115
116
+ function determineSchemaPrefix ( schemas ) {
117
+ const dataSchemaKey = Object . keys ( schemas ) . find ( value => value . endsWith ( 'DataSchema' ) ) ;
118
+ if ( dataSchemaKey ) {
119
+ return dataSchemaKey . replace ( / D a t a S c h e m a $ / , '' ) ;
120
+ }
121
+ const querySchemaKey = Object . keys ( schemas ) . find ( value => value . endsWith ( 'QuerySchema' ) ) ;
122
+ if ( querySchemaKey ) {
123
+ return querySchemaKey . replace ( / Q u e r y S c h e m a $ / , '' ) ;
124
+ }
125
+ const patchSchemaKey = Object . keys ( schemas ) . find ( value => value . endsWith ( 'PatchSchema' ) ) ;
126
+ if ( patchSchemaKey ) {
127
+ return patchSchemaKey . replace ( / P a t c h S c h e m a $ / , '' ) ;
128
+ }
129
+ const schemaKey = Object . keys ( schemas ) . find ( value => value . endsWith ( 'Schema' ) ) ;
130
+ if ( schemaKey ) {
131
+ return schemaKey . replace ( / S c h e m a $ / , '' ) ;
132
+ }
133
+
134
+ return undefined ;
135
+ }
136
+
116
137
exports . createSwaggerServiceOptions = function createSwaggerServiceOptions ( { schemas, docs, sanitizeSchema } ) {
117
138
const serviceDocs = { schemas : { } , refs : { } } ;
118
139
const sanitizeSchemaFn = sanitizeSchema || exports . defaultSanitizeSchema ;
119
140
120
141
let unspecificSchemas ;
121
- const dataSchemaKey = Object . keys ( schemas ) . find ( value => value . endsWith ( 'DataSchema' ) ) ;
122
- if ( dataSchemaKey ) {
123
- const prefix = dataSchemaKey . replace ( / D a t a S c h e m a $ / , '' ) ;
124
- const querySchemaKey = `${ prefix } QuerySchema` ;
142
+ const prefix = determineSchemaPrefix ( schemas ) ;
143
+ if ( prefix ) {
125
144
const resultSchemaKey = `${ prefix } Schema` ;
126
- if ( schemas [ dataSchemaKey ] && schemas [ querySchemaKey ] && schemas [ resultSchemaKey ] ) {
145
+ const dataSchemaKey = `${ prefix } DataSchema` ;
146
+ const querySchemaKey = `${ prefix } QuerySchema` ;
147
+ const patchSchemaKey = `${ prefix } PatchSchema` ;
148
+ if ( schemas [ resultSchemaKey ] ) {
127
149
const {
128
150
[ dataSchemaKey ] : dataSchema ,
129
151
[ querySchemaKey ] : baseQuerySchema ,
130
152
[ resultSchemaKey ] : resultSchema ,
153
+ [ patchSchemaKey ] : patchSchema ,
131
154
...otherSchemas
132
155
} = schemas ;
133
156
unspecificSchemas = otherSchemas ;
134
157
135
- const querySchema = {
136
- ...baseQuerySchema ,
137
- properties : omit ( baseQuerySchema . properties , [ '$limit' , '$skip' ] )
138
- } ;
139
-
140
158
const baseSchemeName = resultSchema . $id || prefix ;
141
- const dataSchemeName = dataSchema . $id || `${ baseSchemeName } Data` ;
142
- const querySchemaName = querySchema . $id || `${ baseSchemeName } Query` ;
143
159
const listSchemaName = `${ baseSchemeName } List` ;
144
160
145
- const patchSchemaName = `${ baseSchemeName } PatchData` ;
146
- const patchSchema = omit ( dataSchema , [ 'required' , '$id' ] ) ;
147
-
148
161
serviceDocs . schemas = {
149
162
[ baseSchemeName ] : sanitizeSchemaFn ( resultSchema ) ,
150
- [ dataSchemeName ] : sanitizeSchemaFn ( dataSchema ) ,
151
- [ querySchemaName ] : sanitizeSchemaFn ( querySchema ) ,
152
- [ patchSchemaName ] : sanitizeSchemaFn ( patchSchema ) ,
153
163
[ listSchemaName ] : {
154
164
type : 'array' ,
155
165
items : { $ref : `#/components/schemas/${ baseSchemeName } ` }
156
166
}
157
167
} ;
158
168
159
- serviceDocs . refs = {
160
- createRequest : dataSchemeName ,
161
- updateRequest : dataSchemeName ,
162
- patchRequest : patchSchemaName ,
163
- queryParameters : querySchemaName
164
- } ;
169
+ serviceDocs . refs = { } ;
170
+
171
+ if ( dataSchema ) {
172
+ const dataSchemeName = dataSchema . $id || `${ baseSchemeName } Data` ;
173
+ serviceDocs . schemas [ dataSchemeName ] = sanitizeSchemaFn ( dataSchema ) ;
174
+ serviceDocs . refs . createRequest = dataSchemeName ;
175
+ serviceDocs . refs . updateRequest = dataSchemeName ;
176
+ }
177
+
178
+ if ( baseQuerySchema ) {
179
+ const querySchema = {
180
+ ...baseQuerySchema ,
181
+ properties : omit ( baseQuerySchema . properties , [ '$limit' , '$skip' ] )
182
+ } ;
183
+ const querySchemaName = querySchema . $id || `${ baseSchemeName } Query` ;
184
+ serviceDocs . schemas [ querySchemaName ] = sanitizeSchemaFn ( querySchema ) ;
185
+ serviceDocs . refs . queryParameters = querySchemaName ;
186
+ }
187
+
188
+ if ( patchSchema ) {
189
+ const patchSchemaName = patchSchema . $id || `${ baseSchemeName } PatchData` ;
190
+ serviceDocs . schemas [ patchSchemaName ] = sanitizeSchemaFn ( patchSchema ) ;
191
+ serviceDocs . refs . patchRequest = patchSchemaName ;
192
+ }
165
193
166
194
if ( ! docs || ! docs . model ) {
167
195
serviceDocs . model = baseSchemeName ;
0 commit comments