Gathering detailed insights and metrics for ajv-formats-draft2019
Gathering detailed insights and metrics for ajv-formats-draft2019
Gathering detailed insights and metrics for ajv-formats-draft2019
Gathering detailed insights and metrics for ajv-formats-draft2019
Plugin for AJV that adds support for some of string formats adding in the draft2019 JSON Schema.
npm install ajv-formats-draft2019
Module System
Min. Node Version
Typescript Support
Node Version
NPM Version
10 Stars
66 Commits
8 Forks
4 Watching
5 Branches
6 Contributors
Updated on 22 Oct 2024
JavaScript (100%)
Cumulative downloads
Total Downloads
Last day
1.6%
40,452
Compared to previous day
Last week
5.7%
209,327
Compared to previous week
Last month
14.2%
843,633
Compared to previous month
Last year
89%
8,209,614
Compared to previous year
An AJV plugin adding support for draft2019 formats missing from AJV.
Currently, iri
, iri-reference
, idn-email
, idn-hostname
, and duration
formats are supported. duration
was added in draft 2019. The uuid
format was
added in draft2019, but is already supported by the ajv-formats
package.
The idn-email
and idn-hostname
formats are implemented per RFC 1123, however
earlier JSON schemas specify RFC 1034. This is probably just fine, but you have
been warned...
1npm install --save ajv-formats-draft2019
The default export is an apply
function that patches an existing instance of
ajv
.
1const Ajv = require('ajv'); 2const apply = require('ajv-formats-draft2019'); 3const ajv = new Ajv(); 4apply(ajv); // returns ajv instance, allowing chaining 5 6let schema = { 7 type: 'string', 8 format: 'idn-email', 9}; 10ajv.validate(schema, 'квіточка@пошта.укр'); // returns true
The apply
function also accepts a second optional parameter to specify which
formats to add to the ajv
instance.
1const Ajv = require('ajv'); 2const apply = require('ajv-formats-draft2019'); 3const ajv = new Ajv(); 4 5// Install only the idn-email and iri formats 6apply(ajv, { formats: ['idn-email', 'iri'] });
The module also provides an alternate entrypoint ajv-formats-draft2019/formats
that works with the ajv
constructor to add the formats to new instances.
1const Ajv = require('ajv'); 2const formats = require('ajv-formats-draft2019/formats'); 3const ajv = new Ajv({ formats }); 4 5let schema = { 6 type: 'string', 7 format: 'idn-email', 8}; 9ajv.validate(schema, 'квіточка@пошта.укр'); // returns true
Using the ajv-formats-draft2019/formats
entry point also allows cherry picking
formats. Note the approach below only works for formats that don't contain a
hypen -
in the name. This approach may yield smaller packed bundles since it
allows tree-shaking to remove unwanted validators and related dependencies.
1const Ajv = require('ajv'); 2const { duration, iri } = require('ajv-formats-draft2019/formats'); 3const ajv = new Ajv({ formats: { duration, iri } });
The library also provides an idn
export to load only the international formats
(ie. iri
, iri-reference
, idn-hostname
and idn-email
).
1const Ajv = require('ajv'); 2const formats = require('ajv-formats-draft2019/idn'); 3const ajv = new Ajv({ formats });
The string is parsed with 'uri-js' and the scheme is checked against the list of
known IANA schemes. If it's a 'mailto' schemes, all of the to:
addresses are
validated, otherwise we check there IRI includes a path and is an absolute
reference.
All valid IRIs are valid. Fragments must have a valid path and of type "relative", "same-document" or "uri". If there is a scheme, it must be valid.
Validating a IRI references is challenging since the syntax is so permissive. Basically, any URL-safe string is a valid IRI syntactically. I struggled to find negative test cases when writing the unit tests for IRI-references. Consider:
google.com
is NOT a valid IRI because it does not include a scheme.file.txt
is a valid IRI-reference/this:that
is a valid IRI-referencethis:that
is a NOT a valid IRI-referencesmtp-address-parser
is
used to check the validity of the email.
The hostname is converted to ascii with punycode and checked for a valid tld.
The string is checked against a regex.
v1.6.1
schemes
dependency, adding support for modbus+tcp
and mqtt
in URIs.v1.6.0
ajv
is exported, rather than changes
to this library.v1.5.0
v1.4.4
mailto:
IRIs.No vulnerabilities found.
Reason
no dangerous workflow patterns detected
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
4 existing vulnerabilities detected
Details
Reason
dependency not pinned by hash detected -- score normalized to 3
Details
Reason
Found 4/14 approved changesets -- score normalized to 2
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
detected GitHub workflow tokens with excessive permissions
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
project is not fuzzed
Details
Reason
security policy file not detected
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2024-11-18
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More