Skip to content

DZakh/rescript-json-schema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CI codecov npm

ReScript JSON Schema πŸ“„

Typesafe JSON Schema for ReScript

Install

npm install rescript-json-schema rescript-schema

Then add rescript-json-schema and rescript-schema to bs-dependencies in your rescript.json:

{ ... + "bs-dependencies": ["rescript-json-schema", "rescript-schema"] + "bsc-flags": ["-open RescriptSchema"], }

Create JSON schemas with type safety

One of the library's main features is the rescript-schema, which provides a way to describe the schema of a value. This schema contains meta information used for parsing, serializing, and generating JSON Schema. When working with the library, you will mostly interact with rescript-schema to define the schema of the values you are working with.

For example, if you have the following schema:

type rating = | @as("G") GeneralAudiences | @as("PG") ParentalGuidanceSuggested | @as("PG13") ParentalStronglyCautioned | @as("R") Restricted type film = { id: float, title: string, tags: array<string>, rating: rating, deprecatedAgeRestriction: option<int>, } let filmSchema = S.object(s => { id: s.field("Id", S.float), title: s.field("Title", S.string), tags: s.fieldOr("Tags", S.array(S.string), []), rating: s.field( "Rating", S.union([ S.literal(GeneralAudiences), S.literal(ParentalGuidanceSuggested), S.literal(ParentalStronglyCautioned), S.literal(Restricted), ]), ), deprecatedAgeRestriction: s.field("Age", S.option(S.int)->S.deprecate("Use rating instead")), })

You can use it to generate JSON Schema for the value it describes:

JSONSchema.make(filmSchema)
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "Id": { "type": "number" }, "Title": { "type": "string" }, "Tags": { "items": { "type": "string" }, "type": "array", "default": [] }, "Rating": { "enum": ["G", "PG", "PG13", "R"] }, "Age": { "type": "integer", "deprecated": true, "description": "Use rating instead" } }, "additionalProperties": true, "required": ["Id", "Title", "Rating"] }

Create rescript-schema from JSON schema

Online

ReScript JSON Schema Online

Just paste your JSON schemas here!