1.0.1 • Published 5 years ago

alby v1.0.1

Weekly downloads
60
License
MIT
Repository
github
Last release
5 years ago

alby

A JSON validator and safe fallback utility for those rare times you can't trust your config.

🚀 Getting Started

Using npm:

npm install --save alby

Using yarn:

yarn add alby

⚠️ Warning

It is not recommended at this time suitable to use alby for sanitizing JSON which describes any complex relationships or references between data sources, as these will be malformed.

🤔 How does it work?

jsonschema is a proven tool for defining the expected structure, types and formatting of a particular JSON objects by declaring a corresponding schema. Unfortunately in practice, just defining the schema does not make it so. Poor form validation, developer errors or short-sighted data manipulation all conspire against the frontend developer. This can be particularly common case when third-partys are permitted to bulk datasets to your database. (See: Murphy's Law).

alby builds upon jsonschema by taking its analysis results and in case of error, reverting these back to a safe default value.

In effect, it turns responses like this:

{
  "uuid": "12d31a68-66ba-4857-8263-0512bace0385",
  "branding": "Unknown column '%all%' in 'where clause'",
}

Into something more like this:

{
  "uuid": "12d31a68-66ba-4857-8263-0512bace0385",
  "branding": {
    "backgroundColor": "firebrick",
    "title": "Default Title"
  }
}

Meanwhile, the actual errors from the failed response are still retained. This helps keep your frontend app working in production at a sensible default configuration, whilst you can fire off the failures using an analytics service.

✍️ Example

const { Validator } = require('jsonschema');
const alby = require('alby');

const validator = new Validator();

const schema = {
  id: '/Example',
  type: 'object',
  properties: {
    text: {
      title: 'string',
    },
  },
  required: [
    'title',
  ],
};

const backup = {
  title: 'Default Title',
};

validator.addSchema(
  schema,
);

const getErroneousJson = () => ({
  title: 39248,
});

const {
  result,
  warnings,
} = alby(
  validator,
  schema,
  backup,
  getErroneousJson(),
);
console.log(result); // { title: 'Default Title' },
console.log(warnings); // Lots of warnings!

Please check out the tests for further detail.

🙏 Dependencies

✌️ License

MIT