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

1.0.0 • Public • Published

ema

A schema validator with value type checking and data generation

npm License: MIT Build Status Code Coverage

Getting Started

Install with npm:

npm install xema

Features

  • Type checking
  • Data generation
  • Typescript definition included
  • Schema validation checking

Defining a schema:

const xema = require('xema');
 //Create a string schema with that validates initial text
const loremSchema = xema.string.startsWith('Lorem');

loremSchema.validate('Lorem ipsum'); // {} 

Values that fails on schema validation contains information about the failure

loremSchema.validate('invalid text'); // {error: 'string = "invalid text" does not start with "Lorem"'}

All schemas are immutable, so every rule added to a schema creates a new one.

const loremIpsumSchema = loremSchema.endsWith('ipsum');
loremSchema.validate('Lorem ipsum dolor sit amet'); // {} 
loremIpsumSchema.validate('Lorem ipsum dolor sit amet'); // {error: 'string = "Lorem ipsum dolor sit ame" does not end with "ipsum"'}

Schemas do not allow null values by default, to allow them the optional rule must be called.

const optionalLoremIpsumSchema = loremIpsumSchema.optional();
optionalLoremIpsumSchema.validate(null); // {}
optionalLoremIpsumSchema.validate(undefined);  // {}
loremIpsumSchema.validate(null); // {error: 'value = null is not a string'}
loremIpsumSchema.validate(undefined); // {error: 'value = undefined is not a string'}

You can check if a schema is a subset of another schema, this feature can be used for type checking.

A schema is a subset of another schema if all values that respects the subset schema respects the superset schema.

The following code shows the schema subset check usage

const optionalLoremIpsumSchema = loremIpsumSchema.optional();
xema.string.isSubsetOf(xema.string); // {isSubset: true}
xema.number.isSubsetOf(xema.number.optional()); // {isSubset: true}
xema.string.checkSubsetOf(xema.boolean); // {isSubset: false, reason: 'StringSchema cannot be a subset of BooleanSchema'}

There are two ways to generate data: sequential and random.

You can generate sequential data only on string, number and boolean schemas.

var generatedNumbers = xema.number.integer().min(1).generateSequentialData({maxAmount: 10000}); // generatedNumbers is a generator

//logs 1 to 10000
for( let num of generatedNumbers ){
 console.log(num);
}

You can generate random data on any schema.

var generatedRandomNumbers = xema.number.integer().min(1).generateRandomData({maxAmount: 10000}); // generatedRandomNumbers is a generator
//logs any positive integer greater than 0, 10000 times
for( let num of generatedRandomNumbers ){
 console.log(num);
}

Package Sidebar

Install

npm i xema

Weekly Downloads

3

Version

1.0.0

License

MIT

Unpacked Size

44.1 kB

Total Files

17

Last publish

Collaborators

  • omarcastro