1
1
import React , { useRef , useEffect } from "react" ;
2
2
import MonacoEditor from "@etclabscore/react-monaco-editor" ;
3
3
import * as monaco from "monaco-editor" ;
4
- import { MethodObject } from "@open-rpc/meta-schema" ;
4
+ import { MethodObject , ContentDescriptorObject } from "@open-rpc/meta-schema" ;
5
5
import useWindowSize from "@rehooks/window-size" ;
6
6
import { addDiagnostics } from "@etclabscore/monaco-add-json-schema-diagnostics" ;
7
7
@@ -48,9 +48,6 @@ const JSONRPCRequestEditor: React.FC<IProps> = (props) => {
48
48
method : {
49
49
type : "string" ,
50
50
} ,
51
- params : {
52
- type : "array" ,
53
- } ,
54
51
} ,
55
52
} ;
56
53
if ( props . openrpcMethodObject ) {
@@ -64,13 +61,41 @@ const JSONRPCRequestEditor: React.FC<IProps> = (props) => {
64
61
enum : [ props . openrpcMethodObject . name ] ,
65
62
} ,
66
63
params : {
67
- ...schema . properties . params ,
68
- items : props . openrpcMethodObject . params . map ( ( param : any ) => {
69
- return {
70
- ...param . schema ,
71
- additionalProperties : false ,
72
- } ;
73
- } ) ,
64
+ oneOf : [
65
+ {
66
+ type : "array" ,
67
+ ...schema . properties . params ,
68
+ items : props . openrpcMethodObject . params . map ( ( param : any ) => {
69
+ return {
70
+ ...param . schema ,
71
+ additionalProperties : false ,
72
+ } ;
73
+ } ) ,
74
+ } ,
75
+ {
76
+ type : "object" ,
77
+ properties : props . openrpcMethodObject . params . reduce ( ( memo : any , param : any ) => {
78
+ memo [ param . name ] = {
79
+ ...param . schema ,
80
+ additionalProperties : false ,
81
+ } ;
82
+ return memo ;
83
+ } , { } ) ,
84
+ } ,
85
+ ] ,
86
+ } ,
87
+ } ,
88
+ } ;
89
+ } else {
90
+ schema = {
91
+ additionalProperties : false ,
92
+ properties : {
93
+ ...schema . properties ,
94
+ params : {
95
+ oneOf : [
96
+ { type : "array" } ,
97
+ { type : "object" } ,
98
+ ] ,
74
99
} ,
75
100
} ,
76
101
} ;
0 commit comments