File tree Expand file tree Collapse file tree 2 files changed +75
-21
lines changed Expand file tree Collapse file tree 2 files changed +75
-21
lines changed Original file line number Diff line number Diff line change @@ -122,28 +122,17 @@ function convertTypes(schema) {
122122 validateType ( schema . type ) ;
123123
124124 if ( Array . isArray ( schema . type ) ) {
125-
126- if ( schema . type . length > 2 || ! schema . type . includes ( 'null' ) ) {
127- throw new Error ( 'Type of ' + schema . type . join ( ',' ) + ' is too confusing for OpenAPI to understand. Found in ' + JSON . stringify ( schema ) ) ;
125+ if ( schema . type . includes ( 'null' ) ) {
126+ schema . nullable = true ;
128127 }
129-
130- switch ( schema . type . length ) {
131- case 0 :
132- delete schema . type ;
133- break ;
134-
135- case 1 :
136- if ( schema . type === 'null' ) {
137- schema . nullable = true ;
138- }
139- else {
140- schema . type = schema . type [ 0 ] ;
141- }
142- break ;
143-
144- default :
145- schema . type = schema . type . find ( type => type !== 'null' ) ;
146- schema . nullable = true ;
128+ const typesWithoutNull = schema . type . filter ( type => type !== 'null' ) ;
129+ if ( typesWithoutNull . length === 0 ) {
130+ delete schema . type
131+ } else if ( typesWithoutNull . length === 1 ) {
132+ schema . type = typesWithoutNull [ 0 ] ;
133+ } else {
134+ delete schema . type ;
135+ schema . anyOf = typesWithoutNull . map ( type => ( { type } ) ) ;
147136 }
148137 }
149138 else if ( schema . type === 'null' ) {
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+
3+ const convert = require ( '../' ) ;
4+ const should = require ( 'should' ) ;
5+
6+ it ( 'splits type arrays correctly' , async ( ) => {
7+ const schema = {
8+ $schema : 'http://json-schema.org/draft-04/schema#' ,
9+ type : 'object' ,
10+ properties : {
11+ emptyArray : {
12+ type : [ ]
13+ } ,
14+ arrayWithNull : {
15+ type : [ 'null' ]
16+ } ,
17+ arrayWithSingleType : {
18+ type : [ 'string' ]
19+ } ,
20+ arrayWithNullAndSingleType : {
21+ type : [ 'null' , 'string' ] ,
22+ } ,
23+ arrayWithNullAndMultipleTypes : {
24+ type : [ 'null' , 'string' , 'number' ] ,
25+ } ,
26+ arrayWithMultipleTypes : {
27+ type : [ 'string' , 'number' ] ,
28+ } ,
29+ }
30+ } ;
31+
32+ const result = await convert ( schema ) ;
33+
34+ const expected = {
35+ type : 'object' ,
36+ properties : {
37+ emptyArray : { } ,
38+ arrayWithNull : {
39+ nullable : true ,
40+ } ,
41+ arrayWithSingleType : {
42+ type : 'string' ,
43+ } ,
44+ arrayWithNullAndSingleType : {
45+ nullable : true ,
46+ type : 'string' ,
47+ } ,
48+ arrayWithNullAndMultipleTypes : {
49+ nullable : true ,
50+ anyOf : [
51+ { type : 'string' } ,
52+ { type : 'number' } ,
53+ ] ,
54+ } ,
55+ arrayWithMultipleTypes : {
56+ anyOf : [
57+ { type : 'string' } ,
58+ { type : 'number' } ,
59+ ] ,
60+ } ,
61+ }
62+ } ;
63+
64+ should ( result ) . deepEqual ( expected , 'converted' ) ;
65+ } ) ;
You can’t perform that action at this time.
0 commit comments