Negotiable Paleobotanist Missions


    0.1.2 • Public • Published


    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


    $ npm install chck


    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...


    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:


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

      name: {$present: true}


    Specify that the value of an attribute can be anything.

      description: {$any: true}


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

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


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

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


    The value can only be one of the ones specified.

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


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

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


    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']}


    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}


    npm i chck

    DownloadsWeekly Downloads






    Last publish


    • obie