This package is an attempt to port the match
control structure, which exists in various languages (Rust, Scala, Kotlin, PHP, ...) as a JS function, the closest possible way.
Example:
import match from 'match-operator'
const food = 'strawberry'
const description = match(food, [
['apple', 'This food is an apple'],
['strawberry', 'raspberry', 'This food is a red fruit'], // First array items are subjects, last one is the result
]) // This food is a red fruit
const food = 'unknown'
const description = match(food, [
['apple', 'This food is an apple'],
['strawberry', 'raspberry', 'This food is a red fruit'],
]) // UnhandledMatchError
const food = 'unknown'
const description = match(food, [
['apple', 'This food is an apple'],
['strawberry', 'raspberry', 'This food is a red fruit'],
[match.default, 'This food is unknown']
]) // This food is unknown
You can also use a function to evaluate the result, which will be called only if the subject matches:
const food = 'banana'
const description = match(food, [
['apple', () => 'This food is an apple'], // it won't be evaluated because it's a banana
['strawberry', () => "This function won't be evaluated"], // same here
[match.default, (subject) => `We don't know this food, but it looks like ${subject}`],
])
You can use an array of subjects if you find it more readable.
const description = match(food, [
[['strawberry', 'raspberry', 'cherry'], 'This food is a red fruit'],
[['peach', 'pineapple'], 'This food is a yellow fruit'],
])
You can also use a simple object to define your matching rules, which can be more concise for simple key-value matches:
const fallback = () => 'This food is unknown'
const description = match(food, {
'apple': 'This food is an apple',
'strawberry': 'This food is a red fruit'
}, fallback)
This is equivalent to the array syntax and supports all features including function evaluation:
const description = match(food, {
'apple': (subject) => `This food is an ${subject}`,
'strawberry': 'This food is a red fruit'
})
npm install match-operator --save # If you're using NPM
yarn add match-operator # If you're using Yarn
npm run test # If you're using NPM
yarn test # If you're using Yarn
This is my first Typescript package - please be kind!
MIT.