@@ -56,10 +56,12 @@ const numberContracts = [
56
56
]
57
57
const stringContracts = [ "minLength" , "maxLength" ]
58
58
59
- const liftSampleHelper = ( oldSchema , target , config = { } ) => {
59
+ export const mergeJsonSchema = ( target , source , config = { } ) => {
60
+ const merged = { ...target }
61
+
60
62
const setIfNotDefinedInTarget = ( key ) => {
61
- if ( target [ key ] === undefined && oldSchema [ key ] !== undefined ) {
62
- target [ key ] = oldSchema [ key ]
63
+ if ( merged [ key ] === undefined && source [ key ] !== undefined ) {
64
+ merged [ key ] = source [ key ]
63
65
}
64
66
}
65
67
@@ -75,22 +77,22 @@ const liftSampleHelper = (oldSchema, target, config = {}) => {
75
77
...stringContracts ,
76
78
] . forEach ( key => setIfNotDefinedInTarget ( key ) )
77
79
78
- if ( oldSchema . required !== undefined && Array . isArray ( oldSchema . required ) ) {
79
- if ( target . required === undefined || ! target . required . length ) {
80
- target . required = [ ]
80
+ if ( source . required !== undefined && Array . isArray ( source . required ) ) {
81
+ if ( merged . required === undefined || ! merged . required . length ) {
82
+ merged . required = [ ]
81
83
}
82
- oldSchema . required . forEach ( key => {
83
- if ( target . required . includes ( key ) ) {
84
+ source . required . forEach ( key => {
85
+ if ( merged . required . includes ( key ) ) {
84
86
return
85
87
}
86
- target . required . push ( key )
88
+ merged . required . push ( key )
87
89
} )
88
90
}
89
- if ( oldSchema . properties ) {
90
- if ( ! target . properties ) {
91
- target . properties = { }
91
+ if ( source . properties ) {
92
+ if ( ! merged . properties ) {
93
+ merged . properties = { }
92
94
}
93
- let props = objectify ( oldSchema . properties )
95
+ let props = objectify ( source . properties )
94
96
for ( let propName in props ) {
95
97
if ( ! Object . prototype . hasOwnProperty . call ( props , propName ) ) {
96
98
continue
@@ -104,26 +106,26 @@ const liftSampleHelper = (oldSchema, target, config = {}) => {
104
106
if ( props [ propName ] && props [ propName ] . writeOnly && ! config . includeWriteOnly ) {
105
107
continue
106
108
}
107
- if ( ! target . properties [ propName ] ) {
108
- target . properties [ propName ] = props [ propName ]
109
- if ( ! oldSchema . required && Array . isArray ( oldSchema . required ) && oldSchema . required . indexOf ( propName ) !== - 1 ) {
110
- if ( ! target . required ) {
111
- target . required = [ propName ]
109
+ if ( ! merged . properties [ propName ] ) {
110
+ merged . properties [ propName ] = props [ propName ]
111
+ if ( ! source . required && Array . isArray ( source . required ) && source . required . indexOf ( propName ) !== - 1 ) {
112
+ if ( ! merged . required ) {
113
+ merged . required = [ propName ]
112
114
} else {
113
- target . required . push ( propName )
115
+ merged . required . push ( propName )
114
116
}
115
117
}
116
118
}
117
119
}
118
120
}
119
- if ( oldSchema . items ) {
120
- if ( ! target . items ) {
121
- target . items = { }
121
+ if ( source . items ) {
122
+ if ( ! merged . items ) {
123
+ merged . items = { }
122
124
}
123
- target . items = liftSampleHelper ( oldSchema . items , target . items , config )
125
+ merged . items = mergeJsonSchema ( merged . items , source . items , config )
124
126
}
125
127
126
- return target
128
+ return merged
127
129
}
128
130
129
131
export const sampleFromSchemaGeneric = ( schema , config = { } , exampleOverride = undefined , respectXML = false ) => {
@@ -138,7 +140,7 @@ export const sampleFromSchemaGeneric = (schema, config={}, exampleOverride = und
138
140
? schema . oneOf [ 0 ]
139
141
: schema . anyOf [ 0 ]
140
142
)
141
- liftSampleHelper ( schemaToAdd , schema , config )
143
+ schema = mergeJsonSchema ( schema , schemaToAdd , config )
142
144
if ( ! schema . xml && schemaToAdd . xml ) {
143
145
schema . xml = schemaToAdd . xml
144
146
}
@@ -537,9 +539,9 @@ export const sampleFromSchemaGeneric = (schema, config={}, exampleOverride = und
537
539
}
538
540
539
541
if ( Array . isArray ( items . anyOf ) ) {
540
- sampleArray = items . anyOf . map ( i => sampleFromSchemaGeneric ( liftSampleHelper ( items , i , config ) , config , undefined , respectXML ) )
542
+ sampleArray = items . anyOf . map ( i => sampleFromSchemaGeneric ( mergeJsonSchema ( i , items , config ) , config , undefined , respectXML ) )
541
543
} else if ( Array . isArray ( items . oneOf ) ) {
542
- sampleArray = items . oneOf . map ( i => sampleFromSchemaGeneric ( liftSampleHelper ( items , i , config ) , config , undefined , respectXML ) )
544
+ sampleArray = items . oneOf . map ( i => sampleFromSchemaGeneric ( mergeJsonSchema ( i , items , config ) , config , undefined , respectXML ) )
543
545
} else if ( ! respectXML || respectXML && xml . wrapped ) {
544
546
sampleArray = [ sampleFromSchemaGeneric ( items , config , undefined , respectXML ) ]
545
547
} else {
0 commit comments