@fchauvel/quick-check
v0.2.0
Published
Internal DSL to check and convert JSON structures
Downloads
2
Maintainers
Readme
Quick-check
Quick-check is small Javascript library to express JSON schema directly in the code, parse and convert objects into custom classes.
Checkout the documentation.
Schema Declaration
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")));
Validation
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());
}
Convertion
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);
Features
[x] Convertion
[ ] Validation
[x] Booleans
[ ] Integers
- [x] even
- [x] odd
- [x] a multiple of
- [x] a power of
[ ] Numbers
- [x] Strictly greater than
- [x] Greater than
- [x] Strictly smaller than
- [x] Smaller than
- [x] Is positive
- [x] Is negative
- [ ] CloseTo
[x] Strings
- [x] Not empty
- [x] Match a given pattern
- [x] Start with prefix
- [x] Ends with suffix
- [x] Has length, at least x characters
- [x] Has length, at most x characters
[x] Arrays
- [x] fixed length
- [x] Length check (at most)
- [x] Length check (at least)
- [x] Uniqueness of element
[x] Unions
[ ] Enumerations