ata-validator
1.61.3 · 29 Oct 2026MIT21.8k / weekRepositoryHomepagenpmAtom feed
1.61.3 is the newest release of 1.x.
Release note
Formats. Four were checked on one engine and ignored on the other, four more were wrong, and four did not exist.
json-pointer, relative-json-pointer, uri-template and regex were enforced by the interpreter and ignored by the code generator, so the same schema and the same document got opposite answers depending on whether the runtime allowed code generation. The engine parity test now covers every format either engine claims.
email accepted .test@example.com, test.@example.com and te..st@example.com; it now reads the local part and the domain. date accepted 2020-02-30 and 2021-02-29; it now counts the days in the month. time and date-time refused the leap second and accepted a clock with no offset, which RFC 3339 does not; both are fixed, and second 60 is accepted only where it is 23:59:60 in UTC. duration accepted P1Y2D and PT0.5S; it now follows the RFC 3339 grammar, where the units form a chain and none takes a fraction.
uri and uri-reference only looked for whitespace, so a backslash, a quote, an angle bracket or a lone percent sign passed. They now check the RFC 3986 character set, percent-encoding, and the authority, which rejects a non-numeric port and an unbracketed IPv6 host. iri, iri-reference and idn-email are new.
On the official optional format suite for draft 2020-12 this moves 559 of 740 to 663 of 740. The rest is idn-hostname and the internationalised half of hostname: deciding whether an xn-- label is a valid name needs the IDNA2008 tables, which is tens of kilobytes in a library whose compiled output is about a kilobyte per schema, and a partial version would turn valid names away. Those stay unasserted and docs/API.md says so.
An AOT module that validates an email is larger than before, by about 850 bytes gzipped on a ten-field schema. That is the cost of the check actually being a check.