Quick-check is small Javascript library to express JSON schema directly in the code, parse and convert objects into custom classes.
Checkout the documentation.
Quick-check let us declare data schema in a readable manner that reduces the need for documentation.
const schema = new Grammar();
schema.define("team")
.as(anObject()
.with(aProperty("name").ofType("string"))
.with(aProperty("members")
.ofType(anArrayOf(eitherOf("person", "team")))));
schema.define("person")
.as(anObject()
.with(aProperty("firstname")
.ofType("string")
.withDefault("Unknown"))
.with(aProperty("lastname").ofType("string")));
We can now check whether the data we get from JSON or YAML file adhere to our schema.
const fileContent = fs.readFileSync('./data.yaml', 'utf8');
const data = yaml.safeLoad(fileContents);
try {
const myTeam = schema.read(data).as("team");
} catch (report) {
console.log(report.toString());
}
We can also equip our type definitions with convertion rules to obtain objects instance of specific home-grown classes.
schema.on("team").apply((data) => {
return new Team(data.name, data.members);
});
schema.on("person").apply((data) => {
return new Person(data.firstname, data.lastname);
});
const myTeam = schema.read(data).as("team");
console.log(myTeam.members[1].members[0].name);
-
Convertion
-
Validation
-
Booleans
-
Integers
- even
- odd
- a multiple of
- a power of
-
Numbers
- Strictly greater than
- Greater than
- Strictly smaller than
- Smaller than
- Is positive
- Is negative
- CloseTo
-
Strings
- Not empty
- Match a given pattern
- Start with prefix
- Ends with suffix
- Has length, at least x characters
- Has length, at most x characters
-
Arrays
- fixed length
- Length check (at most)
- Length check (at least)
- Uniqueness of element
-
Unions
-
Enumerations
-