xema
v1.0.0
Published
A schema validator with subset checking and data generation
Downloads
21
Maintainers
Readme
ema
A schema validator with value type checking and data generation
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);
}