我正在尝试使用Ajv lib验证已经针对元模式的一些架构。即使将其更改为无效的定义,我仍然得到架构有效的结果。
这是一个架构:
{
"id": "TEST_SCHEMA",
"name": "TEST_SCHEMA",
"type": "object",
"properties": {
"isEnabled": {
"type": "boolean",
"name": "isEnabled",
"default": false
},
"options": {
"type": "array",
"name": "options",
"items": {
"type": "object",
"properties": {
"content": {
"type": "string",
"name": "content",
"default": ""
},
"isChecked": {
"type": "boolean",
"name": "isChecked",
"default": true
},
"entities": {
"type": "array",
"name": "entities",
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"club",
"businessPartners"
]
}
}
}
},
"channels": {
"type": "array",
"name": "channels",
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"email",
"phone",
"sms",
"post"
]
}
}
}
}
}
}
}
}
}
这是我的元模式:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://www.example.com/meta-schema.json#",
"title": "Core schema meta-schema",
"definitions": {
"schemaArray": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#" }
},
"schemaObject": {
"type": "object",
"minProperties": 1,
"patternProperties": {
"^([A-Za-z0-9_$]){2,}$": {"$ref": "#"}
},
"additionalProperties": fanlse
},
"simpleTypes": {
"enum": [
"array",
"boolean",
"integer",
"null",
"number",
"object",
"string",
"function"
]
},
"stringArray": {
"type": "array",
"items": { "type": "string" },
"uniqueItems": true,
"default": []
}
},
"type": ["object", "boolean"],
"properties": {
"id": {
"type": "string",
"format": "uri-reference"
},
"$ref": {
"type": "string",
"format": "uri-reference"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"default": true,
"readOnly": {
"type": "boolean",
"default": false
},
"pattern": {
"type": "string",
"format": "regex"
},
"items": {
"$ref": "#",
"default": true
},
"uniqueItems": {
"type": "boolean",
"default": false
},
"required": { "$ref": "#/definitions/stringArray" },
"additionalProperties": { "$ref": "#" },
"definitions": {
"type": "object",
"additionalProperties": { "$ref": "#" },
"default": {}
},
"properties": {
"$ref": "#",
"default": true
},
"dependencies": {
"type": "object",
"additionalProperties": {
"anyOf": [
{ "$ref": "#" },
{ "$ref": "#/definitions/stringArray" }
]
}
},
"propertyNames": { "$ref": "#" },
"enum": {
"type": "array",
"items": true,
"minItems": 1,
"uniqueItems": true
},
"type": {
"anyOf": [
{ "$ref": "#/definitions/simpleTypes" },
{
"type": "array",
"items": { "$ref": "#/definitions/simpleTypes" },
"minItems": 1,
"uniqueItems": true
}
]
}
},
"default": true
}
我如何使用Ajv:
const ajv = new Ajv({
allErrors: true,
schemaId: `auto`,
extendRefs: `fail`,
schemas: refs,
meta: META_SCHEMA
})
try {
ajv.validateSchema(schema)
} catch (error) {
console.error(`Schema Validation Error:`, file, error)
console.table(ajv.errors, [`keyword`,`params`,`message`])
}
我希望架构定义无效时会失败。
我的元模式错误或我以错误的方式使用Ajv?