/quick-check

Quick validation and convertion of JSON structures

Primary LanguageTypeScriptMIT LicenseMIT

Quick-check

NPM Version NPM Monthly download rate Build Status Test Coverage Code Grade

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

  • 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