Negotiable Paleobotanist Missions

    chck

    0.1.2 • Public • Published

    chck

    Inspired by JSON Filter by Matt McKegg

    Check that objects match a specification. Written specifically for use in Lambda function event handler guard clauses as described in Serverless: Patterns of Modern Application Design Using Microservices

    Installation

    $ npm install chck

    Example

    We find chck especially useful for refactoring boolean expressions in guard clauses so that they're obvious and maintainable.

    var chck = require('chck');
     
    exports.handler = function(order, context) {
      if(chck(order, {
        UserId: {$present: true},
        FeedbackHistory: {$present: false}
      })) {
        feedback.lookup(order.UserId, function(err, history) {
          // attach history to message...
     

    Usage

    var chck = require('chck')

    chck(source, spec)

    Checks a source object according to a spec object and returns true or false depending on whether it matches. Every attribute in spec must be satisfied or the check fails.

    chck.any(source, spec)

    Matching attributes in spec is not required, but if there is a match, it must pass.

    chck.strict(source, spec)

    Slight variation in that every attribute present in source must be included in spec.

    chck.same(source, spec)

    Deep comparison. All attributes must be exactly the same and $conditionals are ignored. Useful for detecting changed objects.

    Specification Object

    The spec parameter is an object with keys and values constituting instructions for either accepting or rejecting the source object. For example, if you want to require that the attribute type equals person then your spec would be {type: 'person'}.

    Spec Conditionals

    The following conditional attributes are available:

    $present

    Specify that the value of an attribute must not be null or false (i.e. 'truthy').

    {
      name: {$present: true}
    }

    $any

    Specify that the value of an attribute can be anything.

    {
      description: {$any: true}
    }

    $contains

    For matching against an array. The array must contain all of the values specified.

    {
      tags: {$contains: ['cat', 'animal']}
    }

    $excludes

    For matching against an array. The array cannot contain any of the values specified.

    {
      permissions: {$excludes: ['admin', 'mod']}
    }

    $only

    The value can only be one of the ones specified.

    {
      gender: {$only: ['male', 'female', 'unspecified']}
    }

    $not

    The value can be anything except one of the ones specified.

    {
      browser: {$not: ['IE', 'Firefox']}
    }

    $matchAny

    Allows a filter to branch into multiple filters when at least one must match.

    {
      $matchAny: [
        { type: "Post"
          state: {$only: ['draft', 'published']}
        },
        { type: "Comment"
          state: {$only: ['pending', 'approved', 'spam']}
        }
      ]
    }

    $optional

    Syntax sugar for specifying many $any filters at the same time.

    {
      $optional: ['description', 'color', 'age']
    }

    Is equivalent to:

    {
      description: {$any: true},
      color: {$any: true},
      age: {$any: true}
    }

    Install

    npm i chck

    DownloadsWeekly Downloads

    5

    Version

    0.1.2

    License

    MIT

    Last publish

    Collaborators

    • obie