Estoy tratando de validar un esquema que incluye dos claves, tags
y parameters
, que pretenden ser matrices de pares clave-valor arbitrarios. Sin embargo, por alguna razón, no puedo obtener nada de lo que especifique para que estas dos claves fallen en la validación (estoy usando la biblioteca nodejs ajv
).
Aquí está la definición del esquema:
var cfStackSchema = { name: { type: "string" }, application: { type: "string" }, account: { type: "string" }, environment: { type: "string" }, tags: { type: "array", items: { type: "object", patternProperties: { "^[a-zA-z0-9]$": { type: "string" } }, additionalProperties: false }, additionalItems: false }, parameters: { type: "array", items: { type: "object", patternProperties: { "^[a-zA-z0-9]$": { type: "string" } }, additionalProperties: false }, additionalItems: false }, deps: { type: "array", items: { type: "string" } }, required: ["name", "account", "environment", "parameters", "application"] };
Y aquí hay un objeto de prueba. Estoy pasando parameters
aquí como una cadena simple, con la intención de que falle la validación, pero en realidad pasa:
var spec = { name: "test", account: "test", environment: "test", parameters: "test", application: "test" };
Aquí está el código que estoy usando para validar:
var ajv = new Ajv({ useDefaults: true }); var validate = ajv.compile(cfStackSchema); if (!validate(spec)) { throw new Error('Stack does not match schema!') }
Solo necesita poner las propiedades dentro de un objeto de properties
var cfStackSchema = { properties: { name: { type: "string" }, application: { type: "string" }, account: { type: "string" }, environment: { type: "string" }, tags: { type: "array", items: { type: "object", patternProperties: { "^[a-zA-z0-9]$": { type: "string" } }, additionalProperties: false }, additionalItems: false }, parameters: { type: "array", items: { type: "object", patternProperties: { "^[a-zA-z0-9]$": { type: "string" } }, additionalProperties: false }, additionalItems: false }, deps: { type: "array", items: { type: "string" } }, }, required: ["name", "account", "environment", "parameters", "application"] };