ts-pattern
Advanced tools
Comparing version 2.1.3 to 2.1.4
@@ -18,5 +18,6 @@ "use strict"; | ||
}; | ||
var __spread = (this && this.__spread) || function () { | ||
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); | ||
return ar; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
}; | ||
@@ -70,3 +71,3 @@ exports.__esModule = true; | ||
}; | ||
return builder(value, __spread(patterns, [ | ||
return builder(value, __spreadArray(__spreadArray([], __read(patterns)), [ | ||
{ | ||
@@ -80,3 +81,3 @@ test: doesMatch, | ||
when: function (predicate, handler) { | ||
return builder(value, __spread(patterns, [ | ||
return builder(value, __spreadArray(__spreadArray([], __read(patterns)), [ | ||
{ | ||
@@ -90,3 +91,3 @@ test: predicate, | ||
otherwise: function (handler) { | ||
return builder(value, __spread(patterns, [ | ||
return builder(value, __spreadArray(__spreadArray([], __read(patterns)), [ | ||
{ | ||
@@ -170,3 +171,3 @@ test: matchPattern(PatternType_1.__), | ||
if (value instanceof Map && pattern instanceof Map) { | ||
return __spread(pattern.keys()).every(function (key) { | ||
return __spreadArray([], __read(pattern.keys())).every(function (key) { | ||
return matchPattern(pattern.get(key))(value.get(key)); | ||
@@ -176,4 +177,4 @@ }); | ||
if (value instanceof Set && pattern instanceof Set) { | ||
var patternValues = __spread(pattern.values()); | ||
var allValues_1 = __spread(value.values()); | ||
var patternValues = __spreadArray([], __read(pattern.values())); | ||
var allValues_1 = __spreadArray([], __read(value.values())); | ||
return patternValues.length === 0 | ||
@@ -180,0 +181,0 @@ ? allValues_1.length === 0 |
import type { NotPattern, Primitives } from './Pattern'; | ||
import type { ExcludeIfContainsNever, IsPlainObject, LeastUpperBound } from './helpers'; | ||
import type { ExcludeIfContainsNever, IsAny, IsPlainObject, LeastUpperBound } from './helpers'; | ||
export declare type ExtractPreciseValue<a, b> = | ||
@@ -12,3 +12,3 @@ /** | ||
*/ | ||
unknown extends b ? a : ExcludeIfContainsNever<b extends [] ? [] : b extends NotPattern<infer b1> ? Exclude<a, b1> : b extends (infer bItem)[] ? a extends (infer aItem)[] ? b extends [infer b1, infer b2, infer b3, infer b4, infer b5] ? a extends [infer a1, infer a2, infer a3, infer a4, infer a5] ? [ | ||
unknown extends b ? a : IsAny<a> extends true ? b : ExcludeIfContainsNever<b extends [] ? [] : b extends NotPattern<infer b1> ? Exclude<a, b1> : b extends (infer bItem)[] ? a extends (infer aItem)[] ? b extends [infer b1, infer b2, infer b3, infer b4, infer b5] ? a extends [infer a1, infer a2, infer a3, infer a4, infer a5] ? [ | ||
ExtractPreciseValue<a1, b1>, | ||
@@ -15,0 +15,0 @@ ExtractPreciseValue<a2, b2>, |
@@ -0,9 +1,50 @@ | ||
import type { Compute, IsPlainObject, UnionToIntersection, ValueOf } from './helpers'; | ||
import type { SelectPattern } from './Pattern'; | ||
import type { ValueOf } from './helpers'; | ||
export declare type FindSelected<i, p> = p extends SelectPattern<infer Key> ? { | ||
declare type FindSelectionUnion<i, p> = p extends SelectPattern<infer Key> ? { | ||
[k in Key]: i; | ||
} : [i, p] extends [(infer i2)[], [infer p2]] ? FindSelected<i2, p2> extends infer selected ? { | ||
} : [i, p] extends [(infer ii)[], (infer pp)[]] ? [i, p] extends [ | ||
[ | ||
infer i1, | ||
infer i2, | ||
infer i3, | ||
infer i4, | ||
infer i5 | ||
], | ||
[ | ||
infer p1, | ||
infer p2, | ||
infer p3, | ||
infer p4, | ||
infer p5 | ||
] | ||
] ? FindSelectionUnion<i1, p1> | FindSelectionUnion<i2, p2> | FindSelectionUnion<i3, p3> | FindSelectionUnion<i4, p4> | FindSelectionUnion<i5, p5> : [i, p] extends [ | ||
[ | ||
infer i1, | ||
infer i2, | ||
infer i3, | ||
infer i4 | ||
], | ||
[ | ||
infer p1, | ||
infer p2, | ||
infer p3, | ||
infer p4 | ||
] | ||
] ? FindSelectionUnion<i1, p1> | FindSelectionUnion<i2, p2> | FindSelectionUnion<i3, p3> | FindSelectionUnion<i4, p4> : [i, p] extends [ | ||
[ | ||
infer i1, | ||
infer i2, | ||
infer i3 | ||
], | ||
[ | ||
infer p1, | ||
infer p2, | ||
infer p3 | ||
] | ||
] ? FindSelectionUnion<i1, p1> | FindSelectionUnion<i2, p2> | FindSelectionUnion<i3, p3> : [i, p] extends [[infer i1, infer i2], [infer p1, infer p2]] ? FindSelectionUnion<i1, p1> | FindSelectionUnion<i2, p2> : FindSelectionUnion<ii, pp> extends infer selected ? { | ||
[k in keyof selected]: selected[k][]; | ||
} : never : [i, p] extends [object, object] ? ValueOf<{ | ||
[k in keyof i & keyof p]: FindSelected<i[k], p[k]>; | ||
} : never : [IsPlainObject<i>, IsPlainObject<p>] extends [true, true] ? ValueOf<{ | ||
[k in keyof i & keyof p]: FindSelectionUnion<i[k], p[k]>; | ||
}> : never; | ||
export declare type FindSelected<i, p> = Compute<UnionToIntersection<FindSelectionUnion<i, p>>>; | ||
export {}; |
@@ -5,6 +5,5 @@ import type { Pattern, GuardValue, ExhaustivePattern } from './Pattern'; | ||
import type { DeepExclude } from './DeepExclude'; | ||
import type { UnionToIntersection, WithDefault } from './helpers'; | ||
import type { WithDefault } from './helpers'; | ||
import type { FindSelected } from './FindSelected'; | ||
export declare type MatchedValue<a, invpattern> = WithDefault<ExtractPreciseValue<a, invpattern>, a>; | ||
export declare type ExtractSelections<a, p> = UnionToIntersection<FindSelected<a, p>>; | ||
export declare type Unset = '@ts-pattern/unset'; | ||
@@ -22,6 +21,6 @@ export declare type PickReturnValue<a, b> = a extends Unset ? b : a; | ||
**/ | ||
with<p extends Pattern<i>, c, invpattern = InvertPattern<p>, value = MatchedValue<i, invpattern>>(pattern: p, handler: (value: value, selections: ExtractSelections<value, p>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, c>(pattern: pat, predicate: pred, handler: (value: GuardValue<pred>, selections: ExtractSelections<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, pred2 extends (value: GuardValue<pred>) => unknown, c>(pattern: pat, predicate: pred, predicate2: pred2, handler: (value: GuardValue<pred2>, selections: ExtractSelections<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, pred2 extends (value: GuardValue<pred>) => unknown, pred3 extends (value: GuardValue<pred2>) => unknown, c>(pattern: pat, predicate: pred, predicate2: pred2, predicate3: pred3, handler: (value: GuardValue<pred3>, selections: ExtractSelections<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<p extends Pattern<i>, c, invpattern = InvertPattern<p>, value = MatchedValue<i, invpattern>>(pattern: p, handler: (value: value, selections: FindSelected<value, p>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, c>(pattern: pat, predicate: pred, handler: (value: GuardValue<pred>, selections: FindSelected<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, pred2 extends (value: GuardValue<pred>) => unknown, c>(pattern: pat, predicate: pred, predicate2: pred2, handler: (value: GuardValue<pred2>, selections: FindSelected<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
with<pat extends Pattern<i>, pred extends (value: MatchedValue<i, InvertPattern<pat>>) => unknown, pred2 extends (value: GuardValue<pred>) => unknown, pred3 extends (value: GuardValue<pred2>) => unknown, c>(pattern: pat, predicate: pred, predicate2: pred2, predicate3: pred3, handler: (value: GuardValue<pred3>, selections: FindSelected<i, pat>) => PickReturnValue<o, c>): Match<i, PickReturnValue<o, c>>; | ||
/** | ||
@@ -69,3 +68,3 @@ * ### Match.when | ||
**/ | ||
with<p extends ExhaustivePattern<i>, c, invpattern = InvertPattern<p>, value = MatchedValue<i, invpattern>>(pattern: p, handler: (value: value, selections: ExtractSelections<value, p>) => PickReturnValue<o, c>): ExhaustiveMatch<DeepExclude<distributedInput, InvertNotPattern<invpattern, value>>, i, PickReturnValue<o, c>>; | ||
with<p extends ExhaustivePattern<i>, c, invpattern = InvertPattern<p>, value = MatchedValue<i, invpattern>>(pattern: p, handler: (value: value, selections: FindSelected<value, p>) => PickReturnValue<o, c>): ExhaustiveMatch<DeepExclude<distributedInput, InvertNotPattern<invpattern, value>>, i, PickReturnValue<o, c>>; | ||
/** | ||
@@ -72,0 +71,0 @@ * ### Match.otherwise |
{ | ||
"name": "ts-pattern", | ||
"version": "2.1.3", | ||
"version": "2.1.4", | ||
"description": "Typescript pattern matching library", | ||
@@ -44,4 +44,4 @@ "main": "lib/index.js", | ||
"ts-jest": "^26.4.4", | ||
"typescript": "^4.1.2" | ||
"typescript": "^4.2.2" | ||
} | ||
} |
@@ -95,8 +95,8 @@ <h1 align="center">ts-pattern</h1> | ||
- [Basic Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/basic.ts) | ||
- [Basic Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/basic.tsx) | ||
- [Reducer Demo (with React)](https://codesandbox.io/s/ts-pattern-reducer-example-c4yuq?file=/src/App.tsx) | ||
- [Untyped Input (API response) Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/api.ts) | ||
- [`when` Guard Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/when.ts) | ||
- [`not` Pattern Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/not.ts) | ||
- [`select` Pattern Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/not.ts) | ||
- [Untyped Input (API response) Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/api.tsx) | ||
- [`when` Guard Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/when.tsx) | ||
- [`not` Pattern Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/not.tsx) | ||
- [`select` Pattern Demo](https://codesandbox.io/s/ts-pattern-examples-0s6d8?file=/src/examples/not.tsx) | ||
@@ -103,0 +103,0 @@ ## Getting Started |
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
63130
863