New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

chck

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

chck

Check that an object's attributes match a specification

latest
Source
npmnpm
Version
0.1.2
Version published
Maintainers
1
Created
Source

#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}
}

Keywords

attributes

FAQs

Package last updated on 24 Jan 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts