5
5
* LICENSE file in the root directory of this source tree.
6
6
* ========================================================================== */
7
7
8
+ // eslint-disable-next-line import/no-extraneous-dependencies
9
+ import { merge } from "allof-merge" ;
8
10
import clsx from "clsx" ;
9
11
import isEmpty from "lodash/isEmpty" ;
10
12
@@ -19,41 +21,18 @@ import { getQualifierMessage, getSchemaName } from "./schema";
19
21
import { create , guard } from "./utils" ;
20
22
import { SchemaObject } from "../openapi/types" ;
21
23
22
- const jsonSchemaMergeAllOf = require ( "json-schema-merge-allof" ) ;
23
-
24
24
let SCHEMA_TYPE : "request" | "response" ;
25
25
26
26
/**
27
27
* Returns a merged representation of allOf array of schemas.
28
28
*/
29
- export function mergeAllOf ( allOf : SchemaObject [ ] ) {
30
- const mergedSchemas = jsonSchemaMergeAllOf ( allOf , {
31
- resolvers : {
32
- readOnly : function ( ) {
33
- return true ;
34
- } ,
35
- writeOnly : function ( ) {
36
- return true ;
37
- } ,
38
- example : function ( ) {
39
- return true ;
40
- } ,
41
- "x-examples" : function ( ) {
42
- return true ;
43
- } ,
44
- } ,
45
- ignoreAdditionalProperties : true ,
46
- } ) ;
47
-
48
- const mergedRequired = allOf . reduce ( ( acc , cur ) => {
49
- if ( Array . isArray ( cur . required ) ) {
50
- const next = [ ...acc , ...cur . required ] ;
51
- return next ;
52
- }
53
- return acc ;
54
- } , [ ] as any ) ;
29
+ export function mergeAllOf ( allOf : SchemaObject ) {
30
+ const onMergeError = ( msg : string ) => {
31
+ console . warn ( msg ) ;
32
+ } ;
55
33
56
- return { mergedSchemas, mergedRequired } ;
34
+ const mergedSchemas = merge ( allOf , { onMergeError } ) ;
35
+ return mergedSchemas ;
57
36
}
58
37
59
38
/**
@@ -271,10 +250,7 @@ function createItems(schema: SchemaObject) {
271
250
272
251
if ( schema . items ?. allOf !== undefined ) {
273
252
// TODO: figure out if and how we should pass merged required array
274
- const {
275
- mergedSchemas,
276
- } : { mergedSchemas : SchemaObject ; mergedRequired : string [ ] | boolean } =
277
- mergeAllOf ( schema . items ?. allOf ) ;
253
+ const mergedSchemas = mergeAllOf ( schema . items ) as SchemaObject ;
278
254
279
255
// Handles combo anyOf/oneOf + properties
280
256
if (
@@ -684,60 +660,52 @@ function createEdges({
684
660
}
685
661
686
662
if ( schema . allOf !== undefined ) {
687
- const { mergedSchemas } : { mergedSchemas : SchemaObject } = mergeAllOf (
688
- schema . allOf
689
- ) ;
690
- delete schema . allOf ;
691
- const combinedSchemas = { ...schema , ...mergedSchemas } ;
663
+ const mergedSchemas = mergeAllOf ( schema ) as SchemaObject ;
692
664
693
665
if ( SCHEMA_TYPE === "request" ) {
694
- if ( combinedSchemas . readOnly && combinedSchemas . readOnly === true ) {
666
+ if ( mergedSchemas . readOnly && mergedSchemas . readOnly === true ) {
695
667
return undefined ;
696
668
}
697
669
}
698
670
699
671
if ( SCHEMA_TYPE === "response" ) {
700
- if ( combinedSchemas . writeOnly && combinedSchemas . writeOnly === true ) {
672
+ if ( mergedSchemas . writeOnly && mergedSchemas . writeOnly === true ) {
701
673
return undefined ;
702
674
}
703
675
}
704
676
705
- const mergedSchemaName = getSchemaName ( combinedSchemas ) ;
706
-
707
- if ( name === "eventName" ) {
708
- console . log ( mergedSchemaName , combinedSchemas ) ;
709
- }
677
+ const mergedSchemaName = getSchemaName ( mergedSchemas ) ;
710
678
711
679
if (
712
- combinedSchemas . oneOf !== undefined ||
713
- combinedSchemas . anyOf !== undefined
680
+ mergedSchemas . oneOf !== undefined ||
681
+ mergedSchemas . anyOf !== undefined
714
682
) {
715
683
return createDetailsNode (
716
684
name ,
717
685
mergedSchemaName ,
718
- combinedSchemas ,
686
+ mergedSchemas ,
719
687
required ,
720
- combinedSchemas . nullable
688
+ mergedSchemas . nullable
721
689
) ;
722
690
}
723
691
724
- if ( combinedSchemas . properties !== undefined ) {
692
+ if ( mergedSchemas . properties !== undefined ) {
725
693
return createDetailsNode (
726
694
name ,
727
695
mergedSchemaName ,
728
- combinedSchemas ,
696
+ mergedSchemas ,
729
697
required ,
730
- combinedSchemas . nullable
698
+ mergedSchemas . nullable
731
699
) ;
732
700
}
733
701
734
- if ( combinedSchemas . additionalProperties !== undefined ) {
702
+ if ( mergedSchemas . additionalProperties !== undefined ) {
735
703
return createDetailsNode (
736
704
name ,
737
705
mergedSchemaName ,
738
- combinedSchemas ,
706
+ mergedSchemas ,
739
707
required ,
740
- combinedSchemas . nullable
708
+ mergedSchemas . nullable
741
709
) ;
742
710
}
743
711
@@ -746,9 +714,9 @@ function createEdges({
746
714
return createDetailsNode (
747
715
name ,
748
716
mergedSchemaName ,
749
- combinedSchemas ,
717
+ mergedSchemas ,
750
718
required ,
751
- combinedSchemas . nullable
719
+ mergedSchemas . nullable
752
720
) ;
753
721
}
754
722
@@ -757,8 +725,8 @@ function createEdges({
757
725
name,
758
726
required : Array . isArray ( required ) ? required . includes ( name ) : required ,
759
727
schemaName : mergedSchemaName ,
760
- qualifierMessage : getQualifierMessage ( combinedSchemas ) ,
761
- schema : combinedSchemas ,
728
+ qualifierMessage : getQualifierMessage ( mergedSchemas ) ,
729
+ schema : mergedSchemas ,
762
730
} ) ;
763
731
}
764
732
@@ -815,7 +783,7 @@ export function createNodes(
815
783
}
816
784
817
785
if ( schema . allOf !== undefined ) {
818
- const { mergedSchemas } = mergeAllOf ( schema . allOf ) ;
786
+ const mergedSchemas = mergeAllOf ( schema ) as SchemaObject ;
819
787
820
788
if (
821
789
mergedSchemas . oneOf !== undefined ||
0 commit comments