🚀 DAY 5 OF LAUNCH WEEK:Introducing Webhook Events for Alert Changes.Learn more →
Socket
Book a DemoInstallSign in
Socket

declarative-pattern

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

declarative-pattern

Pattern matching

latest
Source
npmnpm
Version
0.4.1
Version published
Maintainers
1
Created
Source

Pattern matching is a declarative way to check multiple conditionals. It's similar to a switch-statement but is much more powerful and at the same time simpler as it does not support fall-though which is a common source of error.

Usage

import {match, pattern, range} from 'declarative-pattern'

// Either build a pattern that can be stored and executed at a later time
const fib = pattern()
  .when(0, 0)
  .when(1, 1)
  .default(n => fib(n-1) + fib(n-2))

// Or match a value directly
const isWeekend = match(new Date().getDay(), p => p
  .when(0, false)
  .when(range(1, 5), true)
  .when(6, false))

Supported pattern types:

  • Value literals
    booleans, numbers, strings, null and undefined match the same value
  • Types
    Array, Boolean, Error, Number, Object, String will match any value of the corresponding type
  • RegExp RegExps will be tested on the value beeing matched
  • Array literals
    An array literal will match arrays with at least the same length and every specified pattern must match the corresponding element of the value being matched
  • Object literals
    An object literal will match objects where all the specified properties match the corresponding pattern
  • Functions Any function returning true or false can be used as a pattern, the matching value will be passed as the only argument

A default case can be added which will match otherwise unmatched values, if no default case exist and no pattern matches an Error will be thrown.

Provided pattern functions

_

_ will match any value

import {pattern, _} from 'declarative-pattern'

pattern()
  .when([_, 2], 'The array have a length of two or more and the second element is 2')

some

some will match everything but null and undefined

import {pattern, some} from 'declarative-pattern'

pattern()
  .when(some, 'There is some value')

none

none will match null and undefined

import {pattern, none} from 'declarative-pattern'

pattern()
  .when(none, 'There is no value')

either(...patterns)

either(...patterns) lets you match on two or more patterns

import {pattern, either} from 'declarative-pattern'

pattern()
  .when(either(5, 10), 'The number is either a five or a six')
  .when(either(Boolean, Number), 'The value is either a boolean or a number')

range(start, end)

range(start, end) matches numbers within a range from start to end

import {pattern, range} from 'declarative-pattern'

pattern()
  .when(range(1, 10), 'The number is >= 1 and <= 10')

lt(number)

lt(number) matches number less than number

import {pattern, lt} from 'declarative-pattern'

pattern()
  .when(lt(10), 'The number < 10')

lte(number)

lt(number) matches number less than or equal to number

import {pattern, lte} from 'declarative-pattern'

pattern()
  .when(lte(10), 'The number <= 10')

gt(number)

gt(number) matches number greater than number

import {pattern, gt} from 'declarative-pattern'

pattern()
  .when(gt(10), 'The number > 10')

gte(number)

gt(number) matches number greater than or equal to number

import {pattern, gte} from 'declarative-pattern'

pattern()
  .when(gte(10), 'The number >= 10')

What happens when a pattern matches?

If the value passed to a when or default is a function, it will be executed when that arm matches. The value that was matched will be passed as the only argument to the function and the match will return the return value of the function. If the value passed to a when or default is not a function, the match will return the value directly.

FAQs

Package last updated on 03 Aug 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