Tiny Validator for JSON Schema v4

Related tags

Validation tv4
Overview

Tiny Validator (for v4 JSON Schema)

Build Status Dependency Status NPM version

Use json-schema draft v4 to validate simple values and complex objects using a rich validation vocabulary (examples).

There is support for $ref with JSON Pointer fragment paths (other-schema.json#/properties/myKey).

Usage 1: Simple validation

var valid = tv4.validate(data, schema);

If validation returns false, then an explanation of why validation failed can be found in tv4.error.

The error object will look something like:

{
    "code": 0,
    "message": "Invalid type: string",
    "dataPath": "/intKey",
    "schemaPath": "/properties/intKey/type"
}

The "code" property will refer to one of the values in tv4.errorCodes - in this case, tv4.errorCodes.INVALID_TYPE.

To enable external schema to be referenced, you use:

tv4.addSchema(url, schema);

If schemas are referenced ($ref) but not known, then validation will return true and the missing schema(s) will be listed in tv4.missing. For more info see the API documentation below.

Usage 2: Multi-threaded validation

Storing the error and missing schemas does not work well in multi-threaded environments, so there is an alternative syntax:

var result = tv4.validateResult(data, schema);

The result will look something like:

{
    "valid": false,
    "error": {...},
    "missing": [...]
}

Usage 3: Multiple errors

Normally, tv4 stops when it encounters the first validation error. However, you can collect an array of validation errors using:

var result = tv4.validateMultiple(data, schema);

The result will look something like:

{
    "valid": false,
    "errors": [
        {...},
        ...
    ],
    "missing": [...]
}

Asynchronous validation

Support for asynchronous validation (where missing schemas are fetched) can be added by including an extra JavaScript file. Currently, the only version requires jQuery (tv4.async-jquery.js), but the code is very short and should be fairly easy to modify for other libraries (such as MooTools).

Usage:

tv4.validate(data, schema, function (isValid, validationError) { ... });

validationError is simply taken from tv4.error.

Cyclical JavaScript objects

While they don't occur in proper JSON, JavaScript does support self-referencing objects. Any of the above calls support an optional third argument: checkRecursive. If true, tv4 will handle self-referencing objects properly - this slows down validation slightly, but that's better than a hanging script.

Consider this data, notice how both a and b refer to each other:

var a = {};
var b = { a: a };
a.b = b;
var aSchema = { properties: { b: { $ref: 'bSchema' }}};
var bSchema = { properties: { a: { $ref: 'aSchema' }}};
tv4.addSchema('aSchema', aSchema);
tv4.addSchema('bSchema', bSchema);

If the checkRecursive argument were missing, this would throw a "too much recursion" error.

To enable support for this, pass true as additional argument to any of the regular validation methods:

tv4.validate(a, aSchema, true);
tv4.validateResult(data, aSchema, true);
tv4.validateMultiple(data, aSchema, true);

The banUnknownProperties flag

Sometimes, it is desirable to flag all unknown properties as an error. This is especially useful during development, to catch typos and the like, even when extra custom-defined properties are allowed.

As such, tv4 implements "ban unknown properties" mode, enabled by a fourth-argument flag:

tv4.validate(data, schema, checkRecursive, true);
tv4.validateResult(data, schema, checkRecursive, true);
tv4.validateMultiple(data, schema, checkRecursive, true);

API

There are additional api commands available for more complex use-cases:

addSchema(uri, schema)

Pre-register a schema for reference by other schema and synchronous validation.

tv4.addSchema('http://example.com/schema', { ... });
  • uri the uri to identify this schema.
  • schema the schema object.

Schemas that have their id property set can be added directly.

tv4.addSchema({ ... });
getSchema(uri)

Return a schema from the cache.

  • uri the uri of the schema (may contain a # fragment)
var schema = tv4.getSchema('http://example.com/schema');
getSchemaMap()

Return a shallow copy of the schema cache, mapping schema document URIs to schema objects.

var map = tv4.getSchemaMap();

var schema = map[uri];
getSchemaUris(filter)

Return an Array with known schema document URIs.

  • filter optional RegExp to filter URIs
var arr = tv4.getSchemaUris();

// optional filter using a RegExp
var arr = tv4.getSchemaUris(/^https?://example.com/);
getMissingUris(filter)

Return an Array with schema document URIs that are used as $ref in known schemas but which currently have no associated schema data.

Use this in combination with tv4.addSchema(uri, schema) to preload the cache for complete synchronous validation with.

  • filter optional RegExp to filter URIs
var arr = tv4.getMissingUris();

// optional filter using a RegExp
var arr = tv4.getMissingUris(/^https?://example.com/);
dropSchemas()

Drop all known schema document URIs from the cache.

tv4.dropSchemas();
freshApi()

Return a new tv4 instance with no shared state.

var otherTV4 = tv4.freshApi();
reset()

Manually reset validation status from the simple tv4.validate(data, schema). Although tv4 will self reset on each validation there are some implementation scenarios where this is useful.

tv4.reset();
setErrorReporter(reporter)

Sets a custom error reporter. This is a function that accepts three arguments, and returns an error message (string):

tv4.setErrorReporter(function (error, data, schema) {
    return "Error code: " + error.code;
});

The error object already has everything aside from the .message property filled in (so you can use error.params, error.dataPath, error.schemaPath etc.).

If nothing is returned (or the empty string), then it falls back to the default error reporter. To remove a custom error reporter, call tv4.setErrorReporter(null).

language(code)

Sets the language used by the default error reporter.

  • code is a language code, like 'en' or 'en-gb'
tv4.language('en-gb');

If you specify a multi-level language code (e.g. fr-CH), then it will fall back to the generic version (fr) if needed.

addLanguage(code, map)

Add a new template-based language map for the default error reporter (used by tv4.language(code))

  • code is new language code
  • map is an object mapping error IDs or constant names (e.g. 103 or "NUMBER_MAXIMUM") to language strings.
tv4.addLanguage('fr', { ... });

// select for use
tv4.language('fr')

If you register a multi-level language code (e.g. fr-FR), then it will also be registered for plain fr if that does not already exist.

addFormat(format, validationFunction)

Add a custom format validator. (There are no built-in format validators. Several common ones can be found here though)

  • format is a string, corresponding to the "format" value in schemas.
  • validationFunction is a function that either returns:
    • null (meaning no error)
    • an error string (explaining the reason for failure)
tv4.addFormat('decimal-digits', function (data, schema) {
	if (typeof data === 'string' && !/^[0-9]+$/.test(data)) {
		return null;
	}
	return "must be string of decimal digits";
});

Alternatively, multiple formats can be added at the same time using an object:

tv4.addFormat({
	'my-format': function () {...},
	'other-format': function () {...}
});
defineKeyword(keyword, validationFunction)

Add a custom keyword validator.

  • keyword is a string, corresponding to a schema keyword
  • validationFunction is a function that either returns:
    • null (meaning no error)
    • an error string (explaining the reason for failure)
    • an error object (containing some of: code/message/dataPath/schemaPath)
tv4.defineKeyword('my-custom-keyword', function (data, value, schema) {
	if (simpleFailure()) {
		return "Failure";
	} else if (detailedFailure()) {
		return {code: tv4.errorCodes.MY_CUSTOM_CODE, message: {param1: 'a', param2: 'b'}};
	} else {
		return null;
	}
});

schema is the schema upon which the keyword is defined. In the above example, value === schema['my-custom-keyword'].

If an object is returned from the custom validator, and its message is a string, then that is used as the message result. If message is an object, then that is used to populate the (localisable) error template.

defineError(codeName, codeNumber, defaultMessage)

Defines a custom error code.

  • codeName is a string, all-caps underscore separated, e.g. "MY_CUSTOM_ERROR"
  • codeNumber is an integer > 10000, which will be stored in tv4.errorCodes (e.g. tv4.errorCodes.MY_CUSTOM_ERROR)
  • defaultMessage is an error message template to use (assuming translations have not been provided for this code)

An example of defaultMessage might be: "Incorrect moon (expected {expected}, got {actual}"). This is filled out if a custom keyword returns a object message (see above). Translations will be used, if associated with the correct code name/number.

Demos

Basic usage

var schema = {
	"items": {
		"type": "boolean"
	}
};
var data1 = [true, false];
var data2 = [true, 123];

alert("data 1: " + tv4.validate(data1, schema)); // true alert("data 2: " + tv4.validate(data2, schema)); // false alert("data 2 error: " + JSON.stringify(tv4.error, null, 4));

Use of $ref

var schema = {
	"type": "array",
	"items": {"$ref": "#"}
};
var data1 = [[], [[]]];
var data2 = [[], [true, []]];

alert("data 1: " + tv4.validate(data1, schema)); // true alert("data 2: " + tv4.validate(data2, schema)); // false

Missing schema

var schema = {
	"type": "array",
	"items": {"$ref": "http://example.com/schema" }
};
var data = [1, 2, 3];

alert("Valid: " + tv4.validate(data, schema)); // true alert("Missing schemas: " + JSON.stringify(tv4.missing));

Referencing remote schema

tv4.addSchema("http://example.com/schema", {
	"definitions": {
		"arrayItem": {"type": "boolean"}
	}
});
var schema = {
	"type": "array",
	"items": {"$ref": "http://example.com/schema#/definitions/arrayItem" }
};
var data1 = [true, false, true];
var data2 = [1, 2, 3];

alert("data 1: " + tv4.validate(data1, schema)); // true alert("data 2: " + tv4.validate(data2, schema)); // false

Supported platforms

  • Node.js
  • All modern browsers
  • IE >= 7

Installation

You can manually download tv4.js or the minified tv4.min.js and include it in your html to create the global tv4 variable.

Alternately use it as a CommonJS module:

var tv4 = require('tv4');

or as an AMD module (e.g. with requirejs):

require('tv4', function(tv4){
  //use tv4 here
});

There is a command-line tool that wraps this library: tv4-cmd.

npm

$ npm install tv4

bower

$ bower install tv4

component.io

$ component install geraintluff/tv4

Build and test

You can rebuild and run the node and browser tests using node.js and grunt:

Make sure you have the global grunt cli command:

$ npm install grunt-cli -g

Clone the git repos, open a shell in the root folder and install the development dependencies:

$ npm install

Rebuild and run the tests:

$ grunt

It will run a build and display one Spec-style report for the node.js and two Dot-style reports for both the plain and minified browser tests (via phantomJS). You can also use your own browser to manually run the suites by opening test/index.html and test/index-min.html.

Contributing

Pull-requests for fixes and expansions are welcome. Edit the partial files in /source and add your tests in a suitable suite or folder under /test/tests and run grunt to rebuild and run the test suite. Try to maintain an idiomatic coding style and add tests for any new features. It is recommend to discuss big changes in an Issue.

Do you speak another language? tv4 needs internationalisation - please contribute language files to /lang!

Packages using tv4

License

The code is available as "public domain", meaning that it is completely free to use, without any restrictions at all. Read the full license here.

It's also available under an MIT license.

Comments
  • ignore inherited and non-enumerable object properties

    ignore inherited and non-enumerable object properties

    The current version of tv4 includes several methods that iterate over object properties without filtering out inherited and non-enumerable properties. As a result, the data object fails validation in the following example, because data inherits the extraMethod property:

    function DataMaker(o) {
        var self = this;
        Object.keys(o).forEach(function(key) {
            self[key] = o[key];
        });
    }
    
    DataMaker.prototype.extraMethod = function() {};
    
    var schema = {
        properties: {
            foo: {type: 'boolean'}
        },
        additionalProperties: false
    };
    var data = new DataMaker({foo: true});
    
    tv4.normSchema(schema);
    var valid = tv4.validate(data, schema);
    

    This pull request fixes the issue by iterating over the return value of Object.keys(obj) rather than calling for (var prop in obj). If you'd prefer to fix this issue in a different way, I'd be happy to close this pull request and submit a new one.

    opened by hegemonic 27
  • Setting custom error messages?

    Setting custom error messages?

    Hello, I was wondering how I could give the user better error messages in certain cases. For example, some parameters need to be floats, in order to validate for this my schema looks like:

                'lat' : {
                  'type' : 'number',
                  'not': {
                    'multipleOf':1
                  }
                },
                'lng' : {
                  'type' : 'number',
                  'not': {
                    'multipleOf':1
                  }
                }
    

    When i send a string, the error message generated is:

    invalid type: string (expected number)

    When I send a number, the error message generated is:

    Data matches schema from "not"

    This will be very confusing to someone who doesn't know I'm expecting a float. Are there any ways to handle this within the schema definition (setting a custom error message for failures on a specific property?) Or any work-arounds?

    opened by silverbucket 20
  • Bug in validate.js?

    Bug in validate.js?

    I was researching a weird issue and noticed this, is it intentional?

    https://github.com/geraintluff/tv4/blob/61096b18713d54df158c4d7b01f080b0d6542626/source/validate.js#L156

    Seems = should be === ?

    bug 
    opened by Bartvds 11
  • "npm install tv4" fails due to checksum error

    This may or may not be the same as #96, so I'm filing a different issue.

    Starting today, npm install [email protected] is failing:

    $ rm -rf node_modules ~/.npm/tv4 ; npm install [email protected]
    npm http GET https://registry.npmjs.org/tv4/1.0.12
    npm http 200 https://registry.npmjs.org/tv4/1.0.12
    npm http GET https://registry.npmjs.org/tv4/-/tv4-1.0.12.tgz
    npm http 200 https://registry.npmjs.org/tv4/-/tv4-1.0.12.tgz
    npm ERR! Error: shasum check failed for /var/folders/2g/3zgp6rzs1dn3m15rrfhcg6_40000gn/T/npm-41972-6mxhW2gn/1392241739221-0.09058637404814363/tmp.tgz
    npm ERR! Expected: 36d0bd8d96ddce68abc73edca61bebbddc3d141f
    npm ERR! Actual:   6899bdf360c5e58ca0906fbd37ee3816b48036ac
    npm ERR! From:     https://registry.npmjs.org/tv4/-/tv4-1.0.12.tgz
    npm ERR!     at /Users/ian/.nvm/v0.8.26/lib/node_modules/npm/node_modules/sha/index.js:38:8
    npm ERR!     at null.<anonymous> (/Users/ian/.nvm/v0.8.26/lib/node_modules/npm/node_modules/sha/index.js:85:7)
    npm ERR!     at EventEmitter.emit (events.js:93:17)
    npm ERR!     at afterRead (fs.js:1330:12)
    npm ERR!     at fs.read.callback (/Users/ian/.nvm/v0.8.26/lib/node_modules/npm/node_modules/graceful-fs/polyfills.js:207:17)
    npm ERR!     at Object.wrapper [as oncomplete] (fs.js:362:17)
    npm ERR! If you need help, you may report this *entire* log,
    npm ERR! including the npm and node versions, at:
    npm ERR!     <http://github.com/isaacs/npm/issues>
    
    npm ERR! System Darwin 12.5.0
    npm ERR! command "node" "/Users/ian/.nvm/v0.8.26/bin/npm" "install" "[email protected]"
    npm ERR! cwd /Users/ian/Desktop
    npm ERR! node -v v0.8.26
    npm ERR! npm -v 1.3.23
    npm ERR!
    npm ERR! Additional logging details can be found in:
    npm ERR!     /Users/ian/Desktop/npm-debug.log
    npm ERR! not ok code 0
    

    Interestingly, while 1.0.12 is a version available on npmjs.org, there is no tag in the repository for that version. Maybe that's related.

    Downgrading to 1.0.11 fixes this problem.

    (CC @mlogan)

    opened by statico 11
  • Exporting as AMD module?

    Exporting as AMD module?

    Current we only support CommonJS and a browser global.

    I had some user feedback on some dependent modules that requested AMD support for those.

    For tv4 it might not be essential as browser globals can be easily shimmed (well, I know RequireJS can do it).

    Still it could be as easy as expanding the _header.js / _footer.js.

    I'll leave this ticket for consideration.

    If anybody find this ticket and want to send a PR for this note it will need a test: easy to duplicate one of the the existing grunt-mocha (PhantomJS) tests and add them to the gruntfile.

    opened by Bartvds 11
  • Help us to solve issues with validation

    Help us to solve issues with validation

    When we validate our JSON against JSON Schema its get validated successfully.But in this cases we have noted two issues in your script 1,If we removed a mandatory key/value pair from json no error displayed ( Actually we need to display an error like " Key value pair is missing in json " like some online validators) 2,If we alter the key name no error should be raised.We need to raise some error like invalid JSON

    opened by ratheesh-kr 11
  • Customisable validation

    Customisable validation

    I think this could be done with a combination of extra types, and simple "validation extension" functions to be called each time.

    From @Bartvds:


    Using json-schema on JS objects could use a few more schema rules/flags. Like

    • ownProperty, enumerable
    • non-JSON data types (like function, date, regex, maybe nan, undefined etc)
    • from ES5 frozen / sealed / extensible

    So maybe we should look at the schema-rule part of this in a slightly wider scope and see if tv4 + json-schema can support these kind of JS specific 'extensions' (I guess it can if the implementation complexity is not too much).

    opened by geraintluff 10
  • Add method to remove registered schemas

    Add method to remove registered schemas

    I was adding some tests to my chai and grunt plugins and I think tv4 should have a method to drop all currently added schemas.

    Do you agree on this? I could implement and add tests for this myself but since this would modify the functional code I would like your advice.

    opened by Bartvds 10
  • Semantic validation with

    Semantic validation with "format" (e.g. "date-time")

    Hi Geraint,

    I'm new to JSON schema, but as fare as I understand the documentation s.th. like the following should be possible and should result in a not valid instance. Did your schema validator already support semantic validation with "format"?

      it('check format date-time', function () {
        var instance = { "created_at": "-foo-"};
        var schema = {
          "type": "object",
          "properties": {
          "created_at": {
              "format": "date-time",
              "type": "string"
            }
          }
        };
        var result = tv4.validateMultiple(instance, schema);
    
        expect(result.valid).toBeFalsy()
      });
    

    Thanks a lot, Leif

    enhancement 
    opened by leifhanack 10
  • Add method to extract external schema urls from used $ref's

    Add method to extract external schema urls from used $ref's

    Optionally only the ones that aren't loaded yet. This methods could then be used to simplify preloading the schema's for tv4.addSchema() and synchronous validation.

    I could have a got at this myself but a complications will be to find a way to resolve nested or recursive references. Do you got an idea on how to approach this?

    opened by Bartvds 9
  • Populate dataPath for required properties

    Populate dataPath for required properties

    I've been using tv4 for form validation, and I automatically match an error with a form field using its dataPath. Currently, the dataPath for required fields is always an empty string, so I've modified validateObjectRequiredProperties to produce a useful dataPath.

    opened by russpowers 8
  • Support for `required: true` (all properties required) syntax?

    Support for `required: true` (all properties required) syntax?

    See this StackOverflow question lamenting the repetitiveness of the required key in schemas like:

    "type": "object",
    "properties": {
      "foo": { "type": "string" },
      "bar": { "type": "string" },
      "baz": { "type": "string" },
    },
    "required": ["foo", "bar", "baz"]
    

    This gets pretty ugly and error-prone with larger schemas. The suggested minProperties fix is problematic when the object might have additional properties on it.

    Would it be possible to support a shorthand syntax like required: true? (Or maybe optional: [])?

    opened by githorse 0
  • null error when data is passed

    null error when data is passed "null" when adding addFormat or defineKeword

    @geraintluff, introduced a custom format to accept null or any accepted data type as input value. But somewhere in the tv4 code the null check is being executed even before it actually checks for the format and hence tv4 throws a null error before checking the custom format. Can any changes be done to move the null check in the library in such a way that addFormat or defineKeword do not throw error even if we send null as the data.

    opened by geetikabeskhiyar 1
  • Trying to get in touch regarding a security issue

    Trying to get in touch regarding a security issue

    Hey there!

    I'd like to report a security issue but cannot find contact instructions on your repository.

    If not a hassle, might you kindly add a SECURITY.md file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.

    Thank you for your consideration, and I look forward to hearing from you!

    (cc @huntr-helper)

    opened by JamieSlome 0
  • grungey object.isfrozen hack in tv4.js line 118

    grungey object.isfrozen hack in tv4.js line 118

    Please let me know what below code is doing?

    // Grungey Object.isFrozen hack if (!Object.isFrozen) { Object.isFrozen = function (obj) { var key = "tv4_test_frozen_key"; while (obj.hasOwnProperty(key)) { key += Math.random(); } try { obj[key] = true; delete obj[key]; return false; } catch (e) { return true; } }; }

    opened by kumarperla-gmail 0
  • Modified ENUM mismatch response

    Modified ENUM mismatch response

    • Earlier it was JSON.stringify(data) which was giving unnecessary "inverted commas(" ")".

    • And generally, we use "!==" operator,

    opened by Addis4 1
Owner
Geraint
Mathematician, programmer, musician. For some of my less serious code, check out BitBucket:
Geraint
Vue-input-validator - 🛡️ Highly extensible & customizable input validator for Vue 2

??️ Vue-input-validator demo! What is this package all about? By using this package, you can create input validators only with the help of a single di

null 14 May 26, 2022
Convert JSON examples into JSON schema (supports Swagger 2, OpenAPI 3 and 3.1)

json-to-json-schema Convert JSON examples into JSON schema. Supports JSON Schema draft-05 used in Swagger 2.0 and OpenAPI 3.0 and new draft draft-2020

Redocly 9 Sep 15, 2022
Schema-Inspector is an JSON API sanitisation and validation module.

Schema-Inspector is a powerful tool to sanitize and validate JS objects. It's designed to work both client-side and server-side and to be scalable wit

null 494 Oct 3, 2022
ForgJs is a javascript lightweight object validator. Go check the Quick start section and start coding with love

Hey every one im really happy that this repo reached this many stars ?? ,but this repo needs your contibution I started to better document the code th

Hamdaoui Oussama 1.7k Dec 21, 2022
A JSONSchema validator that uses code generation to be extremely fast

is-my-json-valid A JSONSchema validator that uses code generation to be extremely fast. It passes the entire JSONSchema v4 test suite except for remot

Mathias Buus 948 Dec 31, 2022
Super Fast Complex Object Validator for Javascript(& Typescript).

Super Fast Object Validator for Javascript(& Typescript). Safen supports the syntax similar to the type script interface. This makes it easy to create

Changwan Jun 31 Nov 25, 2022
Simple validator for Steuerliche Identifikationsnummer (German personal tax number) according to the official docs (see readme).

simple-de-taxid-validator Important Code of this validator is taken (with small changes like optimization or removing not needed elements) from THIS R

Wojciech 3 Feb 24, 2022
Easy HTML Form Validator

Easy HTML Form Validator

Ali Nazari 314 Dec 26, 2022
A simple environment variables validator for Node.js and web browsers

A simple environment variables validator for Node.js and web browsers

Mathieu Acthernoene 25 Jul 20, 2022
Facile is an HTML form validator that is inspired by Laravel's validation style and is designed for simplicity of use.

Facile is an HTML form validator that is inspired by Laravel's validation style and is designed for simplicity of use.

upjs 314 Dec 26, 2022
Fast, compiled, eval-free data validator/transformer

spectypes Fast, compiled, eval-free data validator/transformer Features really fast, can be even faster than ajv detailed errors, failure will result

null 65 Dec 29, 2022
Simple password validator made with Javascript 💛

Password Validator Simple password validator made with Javascript ?? Branch history base-code: a complex logic to password validator. In next branches

Lais Frigério 8 Jul 25, 2022
What does the Cosmos Hub validator set looks like without ICF delegations?

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Made in Block 2 Sep 2, 2022
This is the code repository of the official mun testnet validator node source code.

How to join Munchain network Infrastructure **Recommended configuration:** - Number of CPUs: 4 - Memory: 16GB - OS: Ubuntu 22.04 LTS - Allow all incom

MUN Blockchain 16 Dec 15, 2022
Dead simple Object schema validation

Yup Yup is a JavaScript schema builder for value parsing and validation. Define a schema, transform a value to match, validate the shape of an existin

Jason Quense 19.2k Jan 2, 2023
Validate for XML schema and returns all the possible failures

detailed-xml-validator Validate for XML schema and returns all the possible failures Sample Rules file <?xml version = "1.0"?> <students nillable="fa

Natural Intelligence 11 Dec 20, 2022
Validate graphql operations against a schema

@graphql-validate With the power of GraphQL-Tools and GraphQL-JS, we are able to provide a smooth experience for validation your GraphQL operations du

Saihajpreet Singh 13 Dec 23, 2022
TypeScript-first schema validation for h3 and Nuxt applications

h3-zod Validate h3 and Nuxt 3 requests using zod schema's. Install npm install h3-zod Usage import { createServer } from 'http' import { createApp } f

Robert Soriano 48 Dec 28, 2022
Schema validation utilities for h3, using typebox & ajv

h3-typebox JSON schema validation for h3, using typebox & ajv. Install # Using npm npm install h3-typebox # Using yarn yarn install h3-typebox # Usi

Kevin Marrec 43 Dec 10, 2022