-
Notifications
You must be signed in to change notification settings - Fork 2
Core Pattern helpers
Conan edited this page Apr 26, 2022
·
9 revisions
- Numbers
- Strings
- Strings + Arrays
- Arrays
- Primitives
- Truthiness
- Negation
- Combinators
match-iz
provides a number of composable matchers you can use to build patterns:
Numbers | Strings | Strings/Arrays | Arrays | Truthiness | Primitives | Negate | Combinators |
---|---|---|---|---|---|---|---|
gt(n) |
startsWith('s') |
includes(o) |
some(...) |
empty |
isArray |
not(...) |
allOf(...) |
lt(n) |
endsWith('s') |
- | every(...) |
falsy |
isDate |
- | anyOf(...) |
gte(n) |
- | - | - | defined |
isFunction |
- | firstOf(...) |
lte(n) |
- | - | - | truthy |
isNumber |
- | lastOf(...) |
inRange(x,y) |
- | - | - | - | isPojo |
- | includedIn(...) |
- | - | - | - | - | isRegExp |
- | hasOwn(...) |
- | - | - | - | - | isString |
- | - |
- | - | - | - | - | instanceOf |
- | - |
Just import them from match-iz
as you do the core library:
import { gt, lt, ...etc } from 'match-iz'
Matchers | Meaning |
---|---|
gt / lt / gte / lte / inRange
|
number comparisons |
match(5)(
when(3)('Exactly 3'),
when(gt(0))('Greater than 0'),
when(gte(4))('Greater than or equal to 4'),
when(lt(10))('Less than 10'),
when(lte(9))('Less than or equal to 9'),
when(inRange(5, 10))('Between 5 and 10 inclusive')
)
Matchers | Meaning |
---|---|
startsWith / endsWith
|
string comparisons |
match('lorem ipsum')(
when('lipsum')('Exactly "lipsum"'),
when(startsWith('ip'))('Starts with "ip"'),
when(endsWith('um'))('Ends with "um"')
)
Helper | Meaning |
---|---|
includes |
string/array comparisons |
match('lorem ipsum')(
when(includes('em'))('Got "em"'),
when(includes('zap'))('Found "zap"')
)
match([1, 2, 3, 4])(
when(includes(5))('Array has a 5'),
when([1, 2, 3, gt(3)])('Array is [1, 2, 3, >3]')
)
Matchers | Meaning |
---|---|
some / every
|
array item comparisons |
match(array)(
when(every(isNumber))('all items are numbers'),
when(some(isNumber))('some items are numbers'),
when(every({ id: isNumber }))('all items have an id property')
)
Matchers | Meaning |
---|---|
empty / defined / falsy / truthy
|
bottom-value comparisons |
match('')(
when(empty)(() => {
return "It's '', {}, [], null, undefined, or NaN"
}),
when(defined)('Opposite of empty'),
when(falsy)("It's falsy"),
when(truthy)("It's truthy")
)
Matchers | Meaning |
---|---|
isArray / isDate / isFunction / isNumber / isPojo / isRegExp / isString / instanceOf
|
primitive comparisons |
match([1, 2, 3])(
when(isArray)('Looks like an array, eh?'),
when(instanceOf(Component))('A nice component')
)
Helper | Meaning |
---|---|
not |
negation |
match(5)(
when(not(5))('Not a 5'),
when(not(gte(4)))('Less than 4'),
when(not(inRange(100, 0)))(() => {
return 'Less than 0 or greater than 100'
})
)
Matchers | Meaning |
---|---|
allOf / anyOf / firstOf / lastOf / includedIn / hasOwn
|
combinators |
match({ one: 1, two: 2, three: [1, 2, 'a'] })(
when(allOf(isPojo, hasOwn('one')))(() => {
return 'Has "one"'
}),
when({ one: anyOf(1, 2, 3) })(() => {
return 'Has "one" of 1, 2, or 3'
}),
when({ two: includedIn(1, gt(3)) })(() => {
return 'Has "two" with a value of 1 or >3'
}),
when({ three: lastOf(isString) })(() => {
return 'Has "three" with a string value in the last position'
})
)
match([1, 'a', 3, 4, 5, 6])(
when(lastOf(isNumber, isString), () => {
return 'last two items are a number and a string'
}),
when(firstOf(isNumber, isString), () => {
return 'first two items are a number and a string'
})
)
match-iz
🔥 | on npm | docs home | top of page