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