1.0.0 • Published 6 years ago

xema v1.0.0

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

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);
}
1.0.0

6 years ago

1.0.0-rc

6 years ago

0.7.0

6 years ago

0.6.0

6 years ago

0.5.0

6 years ago

0.4.0

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.0

6 years ago