match (chain variant)
When match is called with 0 or 1 argument it returns a chainable instance for defining patterns to match on.
The main two methods are .with to add a branch to the matching, and .exec to run
the match operation (which can be called multiple times, if desired).
import match from 'pattahn';const r1 = match().with('foo', 'is foo').with('bar', 'is bar').exec('foo');// The value can alternatively be provided to match() as a single argument,// if preferred for style.const r2 = match('foo').with('foo', 'is foo').with('bar', 'is bar').exec();expect(r1).toBe('is foo');expect(r2).toBe('is foo');
The first argument to .with is a condition, or a value supported by
intoCondition.
The second argument is either a literal value, or a function that takes the output of the condition and returns the value. If the resulting value will be a function, then you need a function that returns a function.
Other methods
The .any takes the second argument to .with and matches on any input (i.e. the
default case for a match). The call .any(result) is identical to
.with(Test(() => true), result).
Both .any and .with return the matcher object to allow chaining.
The .clone method takes no arguments and returns a shallow clone of the matcher
(where .clone().with(...) won't add a condition to the original).