Quiero guardar un object[] usando electron-store con JSON Schema , después de leer el documento de JSON Schema , obtengo el código que se puede ejecutar con éxito pero con una advertencia:
strict mode: "items" is 1-tuple, but minItems or maxItems/additionalItems are not specified or different at path "#/properties/todo"Y mi código es:
const Store = require('electron-store') /** @type import('json-schema-typed').JSONSchema */ const schema = { todo: { type: 'array', items: [true], minItems: 0, maxItems: 999, additionalItems: { type: 'object', properties: { id: { type: 'number' }, name: { type: 'string' } } } } } const todoStore = new Store({ schema }) const todoItem = [{ id: 1, name: '11111' }] todoStore.set('todo', todoItem) console.log(todoStore.get('todo')) const newTodo = [...todoStore.get('todo')] newTodo.push({ id: 2, name: '22222' }) todoStore.set('todo', prev) console.log(todoStore.get('todo')) module.exports = todoStore agrego minItems y maxItems , pero la advertencia sigue apareciendo. Lo compruebo durante unas horas, pero no puedo trabajar. ¿Alguien puede ayudarme?
Por cierto, quiero preguntar si uso JSON Schema de la manera correcta.
Puede instalar electron-store y ejecutarlo directamente con node ./xxx.js
Gracias por ayudarme.
No hay nada malo con tu esquema.
AJV versión 8 introdujo el "modo estricto" que está activado de forma predeterminada. Su objetivo es evitar cometer errores al escribir esquemas.
Uno de los valores predeterminados es evitar elementos sin restricciones cuando se utilizan items en forma de tupla.
Ajv también registra una advertencia si "items" es una matriz (para el esquema que define una tupla) pero no están presentes las palabras clave "minItems" ni "additionalItems"/"maxItems" (o tienen un valor incorrecto):
https://ajv.js.org/strict-mode.html#unconstrained-tuplas
Yo argumentaría que, aunque no haya configurado los elementos additionalItems en falso, aún ha restringido todos los valores cuando configuró maxItems .
Plantearé un problema en su nombre y lo vincularé en los comentarios.
Hasta que se solucione (si se soluciona), puede deshabilitar este elemento de modo estricto usando una configuración cuando inicializa AJV ( https://ajv.js.org/options.html#stricttuples )
const ajv = new Ajv({ strictTuples: false });