1+ import { JSONSchema , JSONSchemaObject } from "@json-schema-tools/meta-schema" ;
2+ import { InvalidFileSystemPathError , InvalidRemoteURLError , NonJsonRefError } from "./errors" ;
13import referenceResolver from "./index" ;
2- import { NonJsonRefError , InvalidJsonPointerRefError , InvalidFileSystemPathError , InvalidRemoteURLError } from "./reference-resolver " ;
4+ import { InvalidJsonPointerRefError } from "./resolve-pointer " ;
35
46describe ( "referenceResolver" , ( ) => {
57
68 it ( "simple" , async ( ) => {
7- const resolvedRef = await referenceResolver ( "#/properties/foo" , { properties : { foo : "boo" } } ) ;
9+ const resolvedRef = await referenceResolver . resolve ( "#/properties/foo" , { properties : { foo : "boo" } } ) ;
810 expect ( resolvedRef ) . toBe ( "boo" ) ;
911 } ) ;
1012
1113 it ( "file" , async ( ) => {
12- const resolvedRef = await referenceResolver ( "./src/test-obj.json" , { } ) ;
14+ const resolvedRef = await referenceResolver . resolve ( "./src/test-obj.json" ) ;
1315 expect ( resolvedRef ) . toEqual ( { type : "string" } ) ;
1416 } ) ;
1517
1618 it ( "https uri" , async ( ) => {
17- const resolvedRef = await referenceResolver (
18- "https://raw.githubusercontent.com/json-schema-tools/meta-schema/master/src/schema.json" ,
19- { } ,
20- ) ;
19+ const uri = "https://meta.json-schema.tools" ;
20+ const resolvedRef = await referenceResolver . resolve ( uri ) as JSONSchemaObject ;
21+
2122 expect ( resolvedRef . title ) . toBe ( "JSONSchema" ) ;
2223 } ) ;
2324
2425 it ( "errors on non-json" , async ( ) => {
2526 expect . assertions ( 1 ) ;
2627 try {
27- await referenceResolver ( "./src/test-non-json.json" , { } ) ;
28+ await referenceResolver . resolve ( "./src/test-non-json.json" ) ;
2829 } catch ( e ) {
2930 expect ( e ) . toBeInstanceOf ( NonJsonRefError ) ;
3031 }
@@ -33,7 +34,7 @@ describe("referenceResolver", () => {
3334 it ( "errors on bad json pointer ref" , async ( ) => {
3435 expect . assertions ( 1 ) ;
3536 try {
36- await referenceResolver ( "#/nope" , { foo : { bar : true } } ) ;
37+ await referenceResolver . resolve ( "#/nope" , { foo : { bar : true } } ) ;
3738 } catch ( e ) {
3839 expect ( e ) . toBeInstanceOf ( InvalidJsonPointerRefError ) ;
3940 }
@@ -42,7 +43,7 @@ describe("referenceResolver", () => {
4243 it ( "errors if file cant be found" , async ( ) => {
4344 expect . assertions ( 1 ) ;
4445 try {
45- await referenceResolver ( "../not-real-file" , { } ) ;
46+ await referenceResolver . resolve ( "../not-real-file" ) ;
4647 } catch ( e ) {
4748 expect ( e ) . toBeInstanceOf ( InvalidFileSystemPathError ) ;
4849 }
@@ -51,28 +52,29 @@ describe("referenceResolver", () => {
5152 it ( "files are not relative to the src folder" , async ( ) => {
5253 expect . assertions ( 1 ) ;
5354 try {
54- await referenceResolver ( "test-schema-1.json" , { } ) ;
55+ await referenceResolver . resolve ( "test-schema-1.json" ) ;
5556 } catch ( e ) {
5657 expect ( e ) . toBeInstanceOf ( InvalidFileSystemPathError ) ;
5758 }
5859 } ) ;
5960
6061 it ( "files are relative to the folder the script is run from (in this case, project root)" , async ( ) => {
6162 expect . assertions ( 1 ) ;
62- const reffed = await referenceResolver ( "src/test-schema-1.json" , { } ) ;
63+ const reffed = await referenceResolver . resolve ( "src/test-schema-1.json" ) ;
6364 expect ( reffed ) . toBeDefined ( ) ;
6465 } ) ;
6566
6667 it ( "works with nested folders when using relative file path & no prefixing" , async ( ) => {
6768 expect . assertions ( 1 ) ;
68- const resolved = await referenceResolver ( "nestedtest/test-schema-1.json" , { } ) ;
69+ const resolved = await referenceResolver
70+ . resolve ( "nestedtest/test-schema-1.json" ) as JSONSchemaObject ;
6971 expect ( resolved . $ref ) . toBe ( "./src/test-schema.json" ) ;
7072 } ) ;
7173
7274 it ( "errors on urls that arent real" , async ( ) => {
7375 expect . assertions ( 1 ) ;
7476 try {
75- await referenceResolver ( "https://not.real.at.all" , { } ) ;
77+ await referenceResolver . resolve ( "https://not.real.at.all" ) ;
7678 } catch ( e ) {
7779 expect ( e ) . toBeInstanceOf ( InvalidRemoteURLError ) ;
7880 }
@@ -81,9 +83,9 @@ describe("referenceResolver", () => {
8183 it ( "errors on urls that dont return json" , async ( ) => {
8284 expect . assertions ( 1 ) ;
8385 try {
84- await referenceResolver ( "https://open-rpc.org/" , { } ) ;
86+ await referenceResolver . resolve ( "https://open-rpc.org/" ) ;
8587 } catch ( e ) {
86- expect ( e ) . toBeInstanceOf ( InvalidRemoteURLError ) ;
88+ expect ( e ) . toBeInstanceOf ( NonJsonRefError ) ;
8789 }
8890 } ) ;
8991} ) ;
@@ -92,13 +94,14 @@ describe("referenceResolver", () => {
9294describe ( "refs with hash fragment / internal reference component" , ( ) => {
9395 describe ( "files" , ( ) => {
9496 it ( "works in simple case" , async ( ) => {
95- expect ( await referenceResolver ( "./src/test-obj.json#/type" , { } ) ) . toBe ( "string" ) ;
97+ expect ( await referenceResolver . resolve ( "./src/test-obj.json#/type" ) )
98+ . toBe ( "string" ) ;
9699 } ) ;
97100
98101 it ( "errors when the json pointer is invalid" , async ( ) => {
99102 expect . assertions ( 1 ) ;
100103 try {
101- await referenceResolver ( "./src/test-obj.json#balony" , { } ) ;
104+ await referenceResolver . resolve ( "./src/test-obj.json#balony" ) ;
102105 } catch ( e ) {
103106 expect ( e ) . toBeInstanceOf ( InvalidJsonPointerRefError ) ;
104107 }
@@ -107,16 +110,16 @@ describe("refs with hash fragment / internal reference component", () => {
107110
108111 describe ( "urls" , ( ) => {
109112 it ( "works with forward slashes surrounding the hash" , async ( ) => {
110- expect ( await referenceResolver ( "https://meta.open-rpc.org/#/type" , { } ) ) . toBe ( "object" ) ;
113+ expect ( await referenceResolver . resolve ( "https://meta.open-rpc.org/#/type" ) ) . toBe ( "object" ) ;
111114 } ) ;
112115 it ( "works without slash infront of hash, but with one after" , async ( ) => {
113- expect ( await referenceResolver ( "https://meta.open-rpc.org#/type" , { } ) ) . toBe ( "object" ) ;
116+ expect ( await referenceResolver . resolve ( "https://meta.open-rpc.org#/type" ) ) . toBe ( "object" ) ;
114117 } ) ;
115118
116119 it ( "errors when the json pointer is invalid" , async ( ) => {
117120 expect . assertions ( 1 ) ;
118121 try {
119- await referenceResolver ( "https://meta.open-rpc.org/#type" , { } ) ;
122+ await referenceResolver . resolve ( "https://meta.open-rpc.org/#type" ) ;
120123 } catch ( e ) {
121124 expect ( e ) . toBeInstanceOf ( InvalidJsonPointerRefError ) ;
122125 }
@@ -125,10 +128,23 @@ describe("refs with hash fragment / internal reference component", () => {
125128 it ( "errors when you have 2 hash fragments in 1 ref" , async ( ) => {
126129 expect . assertions ( 1 ) ;
127130 try {
128- await referenceResolver ( "https://meta.open-rpc.org/#properties/#openrpc" , { } ) ;
131+ await referenceResolver . resolve ( "https://meta.open-rpc.org/#properties/#openrpc" , { } ) ;
129132 } catch ( e ) {
130133 expect ( e ) . toBeInstanceOf ( InvalidJsonPointerRefError ) ;
131134 }
132135 } ) ;
133136 } ) ;
134137} ) ;
138+
139+
140+ describe ( "adding custom protocol handlers" , ( ) => {
141+ it ( "has a way to add ipfs" , ( ) => {
142+ referenceResolver . protocolHandlerMap . ipfs = ( ) => {
143+ // pretend like we are doing ipfs things here
144+ const fetchedFromIpfs = { title : "foo" , type : "string" } as JSONSchema ;
145+ return Promise . resolve ( fetchedFromIpfs ) ;
146+ } ;
147+
148+ referenceResolver . resolve ( "ipfs://80088008800880088008" )
149+ } ) ;
150+ } ) ;
0 commit comments