tson-schema
TypeScript icon, indicating that this package has built-in type declarations

0.7.0 • Public • Published

tson-schema

This project aims to bring you an easy way to create json-schemas and TypeScript types using a single API. This API is kept as close as possible to json-schema so you don't have to worry about learning yet another API. Support for new json-schema versions and new TypeScript versions is added on a best effort basis.

This is a work in progress! Known missing json-schema features include:

  • array.additionalItems
  • object.additionalProperties
  • $ref
  • JSON-Schema conditional schemas (if/else)
  • Limited TypeScript support for:
    • big enum schemas
    • big allOf schemas

Installing

npm install -S tson-schema

Or

yarn add tson-schema

Usage

import * as t from 'tson-schema'
 
/**
 * Array
 */
const numberArraySchema = t.array({
  items: t.number({
    minimum: 1
  }),
  minItems: 2,
  uniqueItems: true
})
 
numberArraySchema.getSchema() // { type: 'array', items: { type: 'number', minimum: 1 }, minItems: 2, uniqueItems: true }
numberArraySchema.type        // number[]
 
/**
 * Object
 */
const objectSchema = t.object({
  properties: {
    req: t.string(),
    opt: t.tuple({
      items: [t.integer()]
    })
  },
  required: ['req']
})
 
objectSchema.getSchema() // { type: 'object', properties: { req: { type: 'string' }, opt: { type: 'array', items: [{ type: 'integer' }] } }, required: ['req'] }
objectSchema.type        // { req: 'string', opt?: [number] }
 
/**
 * Enum
 */
const enumSchema = t.enum(['A', 2, 'C', 4])
 
enumSchema.getSchema() // { enum: ['A', 2, 'C', 4] }
enumSchema.type        // 'A' | 2 | 'C' | 4
 
/**
 * anyOf
 */
const anyOfSchema = t.anyOf([
  s.const('A'),
  s.integer()
])
 
enumSchema.getSchema() // { anyOf: [{ const: 'A' }, { type: 'integer' }] }
enumSchema.type        // 'A' | number

Readme

Keywords

none

Package Sidebar

Install

npm i tson-schema

Weekly Downloads

2

Version

0.7.0

License

ISC

Unpacked Size

25.1 kB

Total Files

43

Last publish

Collaborators

  • mjwwit