1
1
import Ajv , { SchemaObject , AnySchemaObject , AnySchema } from "ajv/dist/2019"
2
2
import type { DataValidationCxt , ValidateFunction } from "ajv/dist/types"
3
3
4
- type SchemaVersion = "draft7" | "draft2019"
4
+ type SchemaVersion = "draft7" | "draft2019" | "draft2020"
5
5
6
6
export const draft7 = getMigrate ( "draft7" )
7
7
export const draft2019 = getMigrate ( "draft2019" )
8
+ export const draft2020 = getMigrate ( "draft2020" )
8
9
9
10
function getMigrateSchema ( version : SchemaVersion ) : SchemaObject {
10
11
return {
@@ -41,7 +42,8 @@ export function getAjv(): Ajv {
41
42
keyword : "migrateSchema" ,
42
43
schemaType : "string" ,
43
44
modifying : true ,
44
- metaSchema : { enum : [ "draft7" , "draft2019" ] } ,
45
+ metaSchema : { enum : [ "draft7" , "draft2019" , "draft2020" ] } ,
46
+ // eslint-disable-next-line complexity
45
47
validate (
46
48
version : SchemaVersion ,
47
49
dataSchema : AnySchema ,
@@ -66,7 +68,7 @@ export function getAjv(): Ajv {
66
68
if ( typeof id !== "string" ) {
67
69
throw new Error ( `json-schema-migrate: schema id must be string` )
68
70
}
69
- if ( version === "draft2019" && id . includes ( "#" ) ) {
71
+ if ( ( version === "draft2019" || version === "draft2020" ) && id . includes ( "#" ) ) {
70
72
const [ $id , $anchor , ...rest ] = id . split ( "#" )
71
73
if ( rest . length > 0 ) {
72
74
throw new Error ( `json-schema-migrate: invalid schema id ${ id } ` )
@@ -127,6 +129,21 @@ export function getAjv(): Ajv {
127
129
}
128
130
break
129
131
}
132
+ case "items" :
133
+ if ( version === "draft2020" && Array . isArray ( dsCopy . items ) ) {
134
+ dataSchema . prefixItems = dsCopy . items
135
+ if ( dsCopy . additionalItems !== undefined ) {
136
+ dataSchema . items = dsCopy . additionalItems
137
+ }
138
+ } else {
139
+ dataSchema . items = dsCopy . items
140
+ }
141
+ break
142
+ case "additionalItems" :
143
+ if ( version !== "draft2020" ) {
144
+ dataSchema . additionalItems = dsCopy . additionalItems
145
+ }
146
+ break
130
147
default :
131
148
dataSchema [ key ] = dsCopy [ key ]
132
149
}
0 commit comments