JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 291
  • Score
    100M100P100Q88508F
  • License ISC

JSON Schema constructor and validator

Package Exports

  • jsonschema-definer

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jsonschema-definer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Welcome to jsonschema-definer 👋

Version License: ISC Release License: ISC

This package provides simple, well typed API for creating and validating JSON Schemas

🔥 Install

npm install jsonschema-definer

👌 Usage

This package was inspired by fluent-schema and prop-types, and is used to create and validate JSON Schema. It was written in typescript and provide a lot of usefull info from typings, such as infering interface types from schema. Here is an example:

import S from 'jsonschema-definer'

// Lets define a simple object schema
const UserSchema = S.shape({
  name: S.string(),
  email: S.string().format('email').optional(),
  password: S.string().minLength(8),
  role: S.enum('client', 'suplier'),
  birthday: S.instanceOf(Date)
})

// Now lets get interface of User from schema
type User = typeof UserSchema.type
/*
  type User = {
    name: string,
    email?: string | undefined,
    password: string,
    role: 'client' | 'suplier',
    birthday: Date
  }
*/

// We can validate user using .validate(data) function (ajv used)
const [valid, errors] = UserSchema.validate({
  name: 'Igor',
  email: 'fumo.sujimoshi@gmail.com',
  password: '12345678',
  role: 'client',
  birthday: new Date()
})

console.log(valid, errors) // [boolean, Error[]]

// Or get plain JSON Schema using .valueOf()
console.log(UserSchema.valueOf())

⭐️ Show your support

Give a ⭐️ if this project helped you!

📚 Documentation

Full documentation available here

Main exported variable S: SchemaFactory extends BaseSchema

Method Description JSON Schema
S.any(): BaseSchema Correspond to any type { }
S.string(): StringSchema For strings validation { "type": "string" }
S.number(): NumericSchema For float/integer validation { "type": "number" }
S.integer(): NumericSchema For integer values validation { "type": "integer" }
S.boolean(): BaseSchema For boolean values { "type": "boolean" }
S.null(): BaseSchema For null value validation { "type": "null" }
S.array(): ArraySchema Array validation { "type": "array" }
S.list(itemType: T): ArraySchema Validation of lists. Example: S.list(S.string()): ArraySchema { "type": "array", "items": { ... } }
S.object(): ObjectSchema Validation of object { "type": "object" }
S.shape({ key: Schema }: T): ObjectSchema Validation of objects { "type": "object", properties: T, additionalProperties: false } }
S.instanceOf(type: T): BaseSchema For validating instanceOf data. (Custom keyword used) { instanceOf: T.name }
S.enum(...constants: T[]): BaseSchema Enumerable schema { enum: [ T[0], T[1] ] }
S.const(constant: T): BaseSchema Constant value { const: T }
S.anyOf(...schemas: BaseSchema[]): BaseSchema Any (one or more) of given types { anyOf: [ T[0], T[1], ... ] }
S.oneOf(...schemas: BaseSchema[]): BaseSchema Value shoud correspond to ONE of given types { oneOf: [ T[0], T[1], ... ] }
S.allOf(...schemas: BaseSchema[]): BaseSchema Value should correspond to ALL of given type { allOf: [ T[0], T[1], ... ] }
S.raw(values: any): BaseSchema Set custom schema values (For Swagger definitions for example) { ...values }
S.custom(...validators: (value: T) => boolean): BaseSchema Add custom validation functions to schema. Supported by AJV custom keyword Does not supported by standard JSON Schema (Ajv support)

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Run tests

npm run test

Author

👤 Igor Solomakha fumo.sujimoshi@gmail.com

📝 License

Copyright © 2020 Igor Solomakha fumo.sujimoshi@gmail.com.
This project is ISC licensed.


This README was generated with ❤️ by readme-md-generator