@@ -252,6 +252,84 @@ test('object', async () => {
252252 ] ) ;
253253} ) ;
254254
255+ test ( 'object required inside' , async ( ) => {
256+ const parser = new ComponentsParser ( {
257+ info : {
258+ title : 'test' ,
259+ version : '1.0.0' ,
260+ } ,
261+ openapi : '3.0.0' ,
262+ paths : { } ,
263+ components : {
264+ schemas : {
265+ O : {
266+ type : 'object' ,
267+ nullable : false ,
268+ properties : {
269+ B : {
270+ type : 'boolean' ,
271+ } ,
272+ S : {
273+ type : 'string' ,
274+ } ,
275+ N : {
276+ type : 'number' ,
277+ } ,
278+ I : {
279+ type : 'integer' ,
280+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
281+ // @ts -ignore
282+ required : true ,
283+ } ,
284+ R : {
285+ $ref : '#/components/schemas/R' ,
286+ } ,
287+ } ,
288+ required : [ 'B' , 'S' , 'N' ] ,
289+ additionalProperties : true ,
290+ } ,
291+ R : {
292+ type : 'string' ,
293+ } ,
294+ } ,
295+ } ,
296+ } ) ;
297+
298+ const t = parser . parseComponents ( ) ;
299+ expect ( t ) . toEqual < TypeList > ( [
300+ {
301+ kind : 'origin' ,
302+ name : 'O' ,
303+ type : 'object' ,
304+ required : true ,
305+ children : [
306+ // 已重新排序
307+ { name : 'B' , type : 'boolean' , required : true , kind : 'origin' } ,
308+ { name : 'I' , type : 'number' , required : true , kind : 'origin' } ,
309+ { name : 'N' , type : 'number' , required : true , kind : 'origin' } ,
310+ {
311+ kind : 'alias' ,
312+ refAble : false ,
313+ required : false ,
314+ name : 'R' ,
315+ target : 'R' ,
316+ origin : 'R' ,
317+ props : [ ] ,
318+ ref : '#/components/schemas/R' ,
319+ } ,
320+ { name : 'S' , type : 'string' , required : true , kind : 'origin' } ,
321+ { name : '[key: string]' , type : 'any' , required : true , kind : 'origin' } ,
322+ ] ,
323+ } ,
324+ {
325+ kind : 'origin' ,
326+ name : 'R' ,
327+ type : 'string' ,
328+ required : false ,
329+ } ,
330+ ] ) ;
331+ } ) ;
332+
255333test ( 'array' , async ( ) => {
256334 const parser = new ComponentsParser ( {
257335 info : {
0 commit comments