diff --git a/package-lock.json b/package-lock.json index 8584c55..03f3311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1830,9 +1830,31 @@ } }, "@open-rpc/meta-schema": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@open-rpc/meta-schema/-/meta-schema-1.5.4.tgz", - "integrity": "sha512-L6vxIp7S+c9JwmOMZcAC85C/tyqYqFskGNv/HU9tjUzbbl4R3GHYBNVNTQaMQXtsD2n4Yw/ReO8gBshyA4vdxQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@open-rpc/meta-schema/-/meta-schema-1.7.0.tgz", + "integrity": "sha512-n/1hV/ysLhKDaBmFOvmow549bSv6gbhkwf2irTSnvHDVkB8O65RM3yCJjWRh3EkjFP8UDK23mdZpx0cRX3LoPg==" + }, + "@open-rpc/schema-utils-js": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@open-rpc/schema-utils-js/-/schema-utils-js-1.12.0.tgz", + "integrity": "sha512-N4g9O9EgjGDkspVRbMH1XtZS1IBIHpnGLTRh9de+YSxpN8htB8XN+vbPzJTfBwfUC8ALXhXfjw0iBSlLE3kW+g==", + "requires": { + "@open-rpc/meta-schema": "^1.6.0", + "ajv": "^6.10.0", + "detect-node": "^2.0.4", + "fs-extra": "^8.1.0", + "is-url": "^1.2.4", + "isomorphic-fetch": "^2.2.1", + "json-schema-ref-parser": "^7.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "@open-rpc/meta-schema": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@open-rpc/meta-schema/-/meta-schema-1.7.0.tgz", + "integrity": "sha512-n/1hV/ysLhKDaBmFOvmow549bSv6gbhkwf2irTSnvHDVkB8O65RM3yCJjWRh3EkjFP8UDK23mdZpx0cRX3LoPg==" + } + } }, "@rehooks/window-size": { "version": "1.0.2", @@ -2765,7 +2787,6 @@ "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -2957,7 +2978,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -4104,8 +4124,7 @@ "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "caller-callsite": { "version": "2.0.0", @@ -5589,8 +5608,7 @@ "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" }, "detect-port-alt": { "version": "1.1.6", @@ -6925,8 +6943,7 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-glob": { "version": "3.1.1", @@ -6943,8 +6960,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -9264,6 +9280,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10625,7 +10646,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -10699,11 +10719,20 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, + "json-schema-ref-parser": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-7.1.4.tgz", + "integrity": "sha512-AD7bvav0vak1/63w3jH8F7eHId/4E4EPdMAEZhGxtjktteUv9dnNB/cJy6nVnMyoTPBJnLwFK6tiQPSTeleCtQ==", + "requires": { + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1", + "ono": "^6.0.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", @@ -15254,6 +15283,11 @@ "mimic-fn": "^2.1.0" } }, + "ono": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ono/-/ono-6.0.1.tgz", + "integrity": "sha512-5rdYW/106kHqLeG22GE2MHKq+FlsxMERZev9DCzQX1zwkxnFwBivSn5i17a5O/rDmOJOdf4Wyt80UZljzx9+DA==" + }, "open": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/open/-/open-7.0.0.tgz", @@ -17097,8 +17131,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pure-color": { "version": "1.3.0", @@ -19902,8 +19935,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", @@ -20985,7 +21017,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } diff --git a/package.json b/package.json index 5b80e12..69b77bc 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,8 @@ "@material-ui/icons": "^4.5.1", "@monaco-editor/react": "^2.3.0", "@open-rpc/client-js": "^1.2.1", - "@open-rpc/meta-schema": "^1.5.3", + "@open-rpc/meta-schema": "^1.7.0", + "@open-rpc/schema-utils-js": "^1.12.0", "@rehooks/window-size": "^1.0.2", "acorn-dynamic-import": "^4.0.0", "monaco-editor": "^0.18.1", diff --git a/src/containers/Inspector.tsx b/src/containers/Inspector.tsx index ca3fdf2..b172665 100644 --- a/src/containers/Inspector.tsx +++ b/src/containers/Inspector.tsx @@ -15,6 +15,7 @@ import MonacoEditor from "@etclabscore/react-monaco-editor"; import useTabs from "../hooks/useTabs"; import { useDebounce } from "use-debounce"; import { green } from "@material-ui/core/colors"; +import { parseOpenRPCDocument } from "@open-rpc/schema-utils-js"; const errorToJSON = (error: JSONRPCError | undefined): any => { if (!error) { @@ -189,8 +190,9 @@ const Inspector: React.FC = (props) => { if (url) { try { const d = await client.request("rpc.discover", []); - setOpenRpcDocument(d); - setTabOpenRPCDocument(tabIndex, d); + const doc = await parseOpenRPCDocument(d); + setOpenRpcDocument(doc); + setTabOpenRPCDocument(tabIndex, doc); } catch (e) { setOpenRpcDocument(undefined); setTabOpenRPCDocument(tabIndex, undefined); diff --git a/src/containers/JSONRPCRequestEditor.tsx b/src/containers/JSONRPCRequestEditor.tsx index 6a18ade..daea9fb 100644 --- a/src/containers/JSONRPCRequestEditor.tsx +++ b/src/containers/JSONRPCRequestEditor.tsx @@ -1,7 +1,7 @@ import React, { useRef, useEffect } from "react"; import MonacoEditor from "@etclabscore/react-monaco-editor"; import * as monaco from "monaco-editor"; -import { MethodObject, ContentDescriptorObject, OpenRPC } from "@open-rpc/meta-schema"; +import { MethodObject, ContentDescriptorObject, OpenrpcDocument } from "@open-rpc/meta-schema"; import useWindowSize from "@rehooks/window-size"; import { addDiagnostics } from "@etclabscore/monaco-add-json-schema-diagnostics"; import openrpcDocumentToJSONRPCSchema from "../helpers/openrpcDocumentToJSONRPCSchema"; @@ -9,7 +9,7 @@ import openrpcDocumentToJSONRPCSchema from "../helpers/openrpcDocumentToJSONRPCS interface IProps { onChange?: (newValue: any) => void; openrpcMethodObject?: MethodObject; - openrpcDocument?: OpenRPC; + openrpcDocument?: OpenrpcDocument; value: any; } diff --git a/src/helpers/openrpcDocumentToJSONRPCSchema.ts b/src/helpers/openrpcDocumentToJSONRPCSchema.ts index 3697bc2..fb2c629 100644 --- a/src/helpers/openrpcDocumentToJSONRPCSchema.ts +++ b/src/helpers/openrpcDocumentToJSONRPCSchema.ts @@ -1,4 +1,4 @@ -import { MethodObject, ContentDescriptorObject, OpenRPC, ExampleObject } from "@open-rpc/meta-schema"; +import { MethodObject, ContentDescriptorObject, OpenrpcDocument, ExampleObject } from "@open-rpc/meta-schema"; const schema: any = { type: "object", @@ -23,7 +23,7 @@ const schema: any = { }, }; -const openrpcDocumentToJSONRPCSchema = (openrpcDocument: OpenRPC) => { +const openrpcDocumentToJSONRPCSchema = (openrpcDocument: OpenrpcDocument) => { return { type: "object", properties: { diff --git a/src/hooks/useTabs.ts b/src/hooks/useTabs.ts index 661bd20..9945ea6 100644 --- a/src/hooks/useTabs.ts +++ b/src/hooks/useTabs.ts @@ -1,5 +1,5 @@ import { useState, Dispatch, useEffect } from "react"; -import { OpenRPC } from "@open-rpc/meta-schema"; +import { OpenrpcDocument } from "@open-rpc/meta-schema"; interface ITab { name: string; @@ -7,7 +7,7 @@ interface ITab { results?: string; editing?: boolean; url?: string; - openrpcDocument?: OpenRPC; + openrpcDocument?: OpenrpcDocument; } const emptyJSONRPC = { @@ -63,7 +63,7 @@ const useTabs = (defaultTabs?: ITab[]) => { setTabs(newTabs); }; - const setTabOpenRPCDocument = (ti: number, openrpcDocument: OpenRPC | undefined) => { + const setTabOpenRPCDocument = (ti: number, openrpcDocument: OpenrpcDocument | undefined) => { const newTabs = tabs.map((innerTab, i) => { if (i === ti) { if (!openrpcDocument) {