Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

257
Views
Los últimos formatos AJV y ajv deben romperse en React

He estado usando AJV para la validación, desde hace unos meses. Estuve en v6.x por un tiempo y ahora necesito actualizar para que funcionen los mensajes de error personalizados y de formato. Desafortunadamente, parece horriblemente roto. No puedo encontrar ninguna ayuda en los informes de errores y otras charlas por ahí.

Paquetes:

 "ajv": "^8.8.2", "ajv-errors": "^3.0.0", "ajv-formats": "^2.1.1",

Para ser claros, puedo hacer que esto funcione bien en Express API, declarado así:

 const Ajv = require("ajv"); const ajv = new Ajv({ allErrors: true, strict: false }); const ajvFormats = require("ajv-formats")(ajv); const ajvErrors = require("ajv-errors")(ajv);

Sin embargo, también lo estoy usando en proyectos React y ahí es donde vomita. Declarado así:

 import Ajv from "ajv"; import AjvFormats from "ajv-formats"; import AjvErrors from "ajv-errors"; const ajv = new Ajv({ allErrors: true, strict: false, strictTypes: false, code: { optimize: false } }); AjvErrors(ajv); AjvFormats(ajv);

Independientemente de las opciones utilizadas en el constructor Ajv, arroja el siguiente error:

 TypeError: Cannot read properties of undefined (reading 'allErrors') ajvErrors src/index.ts:385 Module.<anonymous> src/mod/validator.js:10 7 | strictTypes: false, 8 | code: { optimize: false } 9 | }); > 10 | AjvErrors(ajv); 11 | AjvFormats(ajv);

Si comento la línea AjvErrors(ajv) para ver si los formatos funcionarán, obtengo un error separado y completamente diferente para AjvFormats(ajv):

 TypeError: Cannot read properties of undefined (reading 'code') addFormats src/index.ts:55 52 | if (items) { 53 | errors.items = {}; 54 | for (let i = 0; i < items.length; i++) > 55 | errors.items[i] = []; | ^ 56 | } 57 | return errors; 58 | } View compiled formatsPlugin src/index.ts:42 39 | const schMessage = typeof sch == "string" ? sch : sch._; 40 | if (schMessage) 41 | processAllErrors(schMessage); > 42 | if (!options.keepErrors) | ^ 43 | removeUsedErrors(); 44 | }); 45 | function childErrorsConfig({ properties, items }) { View compiled Module.<anonymous> src/mod/validator.js:11 8 | code: { optimize: false } 9 | }); 10 | // AjvErrors(ajv); > 11 | AjvFormats(ajv); 12 | 13 | const initValidationCache = async () => { 14 | let { entityType, schema } = window;

¿Soy SOL? ¿Están muertos estos proyectos? Hay muy poca actividad en los informes de errores que veo por ahí. Ya invertí mucho tiempo y escribí mucho código en torno a esta biblioteca, como mi biblioteca de validación, porque se descarga decenas de millones de veces al mes. ¡Parecía seguro! No muy alentador. :(

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Una respuesta, si nadie más tiene nada, es encontrar el punto óptimo de la versión del paquete. Seguro que sería bueno no perder horas tratando de armar esto:

 npm install ajv@7.2.3 ajv-errors@2.0.1 ajv-formats@2.1.1 --save

Lo gracioso de esto es; funciona en React muy bien así:

 import Ajv from "ajv"; import AjvFormats from "ajv-formats"; import AjvErrors from "ajv-errors"; const ajv = new Ajv({ allErrors: true, strict: false }); AjvFormats(ajv); AjvErrors(ajv);

Pero estas mismas versiones exactas del paquete en mi Express API ahora bombardean:

 const Ajv = require("ajv"); const ajv = new Ajv({ allErrors: true, strict: false }); //this fails! const AjvFormats = require("ajv-formats"); const AjvErrors = require("ajv-errors"); AjvFormats(ajv); AjvErrors(ajv);

...con este error..que parece absurdo.

Ajv no es un constructor.

Estoy perdido, de verdad. Estoy listo para volver a Joi porque nunca tuve un problema con varios años de uso.

ACTUALIZAR:

Esto resuelve el problema con el error del constructor anterior: TypeError: Ajv no es un constructor

AJV y afines parecen ser objetivos en movimiento. ¡Estoy grabando esta versión en piedra y nunca la actualizo!

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!