1
1
import { readdirSync , readFileSync } from "node:fs" ;
2
2
import YAML from "yaml" ;
3
- import { validate , setMetaSchemaOutputFormat } from "@hyperjump/json-schema/openapi-3-1" ;
4
- import { BASIC } from "@hyperjump/json-schema/experimental" ;
3
+ import { registerSchema , validate , setMetaSchemaOutputFormat } from "@hyperjump/json-schema/openapi-3-1" ;
4
+ import { BASIC , addKeyword , defineVocabulary } from "@hyperjump/json-schema/experimental" ;
5
5
import { describe , test , expect } from "vitest" ;
6
6
7
7
import contentTypeParser from "content-type" ;
@@ -26,7 +26,64 @@ const parseYamlFromFile = (filePath) => {
26
26
27
27
setMetaSchemaOutputFormat ( BASIC ) ;
28
28
29
- const validateOpenApi = await validate ( "./src/schemas/validation/schema.yaml" ) ;
29
+ addKeyword ( {
30
+ id : "https://spec.openapis.org/oas/schema/vocab/keyword/discriminator" ,
31
+ interpret : ( discriminator , instance , context ) => {
32
+ return true ;
33
+ } ,
34
+ /* discriminator is not exactly an annotation, but it's not allowed
35
+ * to change the validation outcome (hence returing true from interopret())
36
+ * and for our purposes of testing, this is sufficient.
37
+ */
38
+ annotation : ( discriminator ) => {
39
+ return discriminator ;
40
+ } ,
41
+ } ) ;
42
+
43
+ addKeyword ( {
44
+ id : "https://spec.openapis.org/oas/schema/vocab/keyword/example" ,
45
+ interpret : ( example , instance , context ) => {
46
+ return true ;
47
+ } ,
48
+ annotation : ( example ) => {
49
+ return example ;
50
+ } ,
51
+ } ) ;
52
+
53
+ addKeyword ( {
54
+ id : "https://spec.openapis.org/oas/schema/vocab/keyword/externalDocs" ,
55
+ interpret : ( externalDocs , instance , context ) => {
56
+ return true ;
57
+ } ,
58
+ annotation : ( externalDocs ) => {
59
+ return externalDocs ;
60
+ } ,
61
+ } ) ;
62
+
63
+ addKeyword ( {
64
+ id : "https://spec.openapis.org/oas/schema/vocab/keyword/xml" ,
65
+ interpret : ( xml , instance , context ) => {
66
+ return true ;
67
+ } ,
68
+ annotation : ( xml ) => {
69
+ return xml ;
70
+ } ,
71
+ } ) ;
72
+
73
+ defineVocabulary (
74
+ "https://spec.openapis.org/oas/3.1/vocab/base" ,
75
+ {
76
+ "discriminator" : "https://spec.openapis.org/oas/schema/vocab/keyword/discriminator" ,
77
+ "example" : "https://spec.openapis.org/oas/schema/vocab/keyword/example" ,
78
+ "externalDocs" : "https://spec.openapis.org/oas/schema/vocab/keyword/externalDocs" ,
79
+ "xml" : "https://spec.openapis.org/oas/schema/vocab/keyword/xml" ,
80
+ } ,
81
+ ) ;
82
+
83
+ registerSchema ( parseYamlFromFile ( "./src/schemas/validation/meta.yaml" ) ) ;
84
+ registerSchema ( parseYamlFromFile ( "./src/schemas/validation/dialect.yaml" ) ) ;
85
+ registerSchema ( parseYamlFromFile ( "./src/schemas/validation/schema.yaml" ) ) ;
86
+ const validateOpenApi = await validate ( "./src/schemas/validation/schema-base.yaml" ) ;
30
87
const fixtures = './tests/schema' ;
31
88
32
89
describe ( "v3.1" , ( ) => {
0 commit comments