ts-pattern
Advanced tools
Comparing version 0.0.1 to 0.0.2
@@ -36,2 +36,3 @@ /** | ||
declare type LeastUpperBound<a, b> = [a, b] extends [[infer aa, infer ab, infer ac, infer ad, infer ae], [infer ba, infer bb, infer bc, infer bd, infer be]] ? [LeastUpperBound<aa, ba>, LeastUpperBound<ab, bb>, LeastUpperBound<ac, bc>, LeastUpperBound<ad, bd>, LeastUpperBound<ae, be>] : [a, b] extends [[infer aa, infer ab, infer ac, infer ad], [infer ba, infer bb, infer bc, infer bd]] ? [LeastUpperBound<aa, ba>, LeastUpperBound<ab, bb>, LeastUpperBound<ac, bc>, LeastUpperBound<ad, bd>] : [a, b] extends [[infer aa, infer ab, infer ac], [infer ba, infer bb, infer bc]] ? [LeastUpperBound<aa, ba>, LeastUpperBound<ab, bb>, LeastUpperBound<ac, bc>] : [a, b] extends [[infer aa, infer ab], [infer ba, infer bb]] ? [LeastUpperBound<aa, ba>, LeastUpperBound<ab, bb>] : [a, b] extends [(infer aa)[], (infer ba)[]] ? LeastUpperBound<aa, ba>[] : [a, b] extends [Map<infer ak, infer av>, Map<infer bk, infer bv>] ? Map<LeastUpperBound<ak, bk>, LeastUpperBound<av, bv>> : [a, b] extends [Set<infer av>, Set<infer bv>] ? Set<LeastUpperBound<av, bv>> : b extends __ ? a : a extends __ ? b : b extends a ? b : a extends b ? a : never; | ||
declare type MatchedValue<a, p extends Pattern<a>> = LeastUpperBound<a, InvertPattern<p>>; | ||
/** | ||
@@ -43,8 +44,22 @@ * ## match | ||
export declare const match: <a, b>(value: a) => { | ||
with: <p extends Pattern<a>>(pattern: p, f: Fun<LeastUpperBound<a, InvertPattern<p>>, b>) => any; | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>) => any; | ||
withWhen: <p_1 extends Pattern<a>>(pattern: p_1, predicate: Fun<LeastUpperBound<a, InvertPattern<p_1>>, unknown>, f: Fun<LeastUpperBound<a, InvertPattern<p_1>>, b>) => any; | ||
otherwise: (f: () => b) => any; | ||
with: <p extends Pattern<a>>(pattern: p, f: Fun<LeastUpperBound<a, InvertPattern<p>>, b>) => Match<a, b>; | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>) => Match<a, b>; | ||
withWhen: <p_1 extends Pattern<a>>(pattern: p_1, predicate: Fun<LeastUpperBound<a, InvertPattern<p_1>>, unknown>, f: Fun<LeastUpperBound<a, InvertPattern<p_1>>, b>) => Match<a, b>; | ||
otherwise: (f: () => b) => Match<a, b>; | ||
run: () => b; | ||
}; | ||
/** | ||
* ## builder | ||
* This is the implementation of our pattern matching, using the | ||
* builder pattern. | ||
* This builder pattern is neat because we can have complexe type checking | ||
* for each of the methods adding new behavior to our pattern matching. | ||
*/ | ||
declare type Match<a, b> = { | ||
with: <p extends Pattern<a>>(pattern: p, f: Fun<MatchedValue<a, p>, b>) => Match<a, b>; | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>) => Match<a, b>; | ||
withWhen: <p extends Pattern<a>>(pattern: p, predicate: Fun<MatchedValue<a, p>, unknown>, f: Fun<MatchedValue<a, p>, b>) => Match<a, b>; | ||
otherwise: (f: () => b) => Match<a, b>; | ||
run: () => b; | ||
}; | ||
export {}; |
@@ -34,9 +34,2 @@ "use strict"; | ||
exports.match = function (value) { return builder(value, []); }; | ||
/** | ||
* ## builder | ||
* This is the implementation of our pattern matching, using the | ||
* builder pattern. | ||
* This builder pattern is neat because we can have complexe type checking | ||
* for each of the methods adding new behavior to our pattern matching. | ||
*/ | ||
var builder = function (value, patterns) { return ({ | ||
@@ -43,0 +36,0 @@ "with": function (pattern, f) { |
{ | ||
"name": "ts-pattern", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "Typescript pattern matching library", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -148,2 +148,17 @@ /** | ||
*/ | ||
type Match<a, b> = { | ||
with: <p extends Pattern<a>>( | ||
pattern: p, | ||
f: Fun<MatchedValue<a, p>, b> | ||
) => Match<a, b>; | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>) => Match<a, b>; | ||
withWhen: <p extends Pattern<a>>( | ||
pattern: p, | ||
predicate: Fun<MatchedValue<a, p>, unknown>, | ||
f: Fun<MatchedValue<a, p>, b> | ||
) => Match<a, b>; | ||
otherwise: (f: () => b) => Match<a, b>; | ||
run: () => b; | ||
}; | ||
const builder = <a, b>( | ||
@@ -153,6 +168,9 @@ value: a, | ||
) => ({ | ||
with: <p extends Pattern<a>>(pattern: p, f: Fun<MatchedValue<a, p>, b>) => | ||
with: <p extends Pattern<a>>( | ||
pattern: p, | ||
f: Fun<MatchedValue<a, p>, b> | ||
): Match<a, b> => | ||
builder<a, b>(value, [...patterns, [matchPattern<a, p>(pattern), f]]), | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>) => | ||
when: (predicate: Fun<a, unknown>, f: Fun<a, b>): Match<a, b> => | ||
builder<a, b>(value, [...patterns, [predicate, f]]), | ||
@@ -164,3 +182,3 @@ | ||
f: Fun<MatchedValue<a, p>, b> | ||
) => { | ||
): Match<a, b> => { | ||
const doesMatch = (value: a) => | ||
@@ -171,3 +189,3 @@ Boolean(matchPattern<a, p>(pattern)(value) && predicate(value as any)); | ||
otherwise: (f: () => b) => | ||
otherwise: (f: () => b): Match<a, b> => | ||
builder<a, b>(value, [ | ||
@@ -174,0 +192,0 @@ ...patterns, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
29735
810