ts-pattern
Advanced tools
Comparing version 2.1.0 to 2.1.1-next.0
@@ -1,2 +0,2 @@ | ||
import type { IsAny, Cast, Values, Flatten, IsUnion, Slice, Drop, Iterator, Next } from './helpers'; | ||
import type { IsAny, Cast, Values, Flatten, IsUnion, Slice, Drop, Iterator, Next, IsPlainObject, Length } from './helpers'; | ||
/** | ||
@@ -39,3 +39,3 @@ * DistributeUnions takes a data structure of type `a` | ||
*/ | ||
export declare type FindUnions<a, path extends PropertyKey[] = []> = IsUnion<a> extends true ? [ | ||
export declare type FindUnions<a, path extends PropertyKey[] = []> = Length<path> extends 3 ? [] : IsUnion<a> extends true ? [ | ||
{ | ||
@@ -63,4 +63,7 @@ cases: a extends any ? { | ||
...FindUnions<a3, [...path, 2]> | ||
] : a extends [infer a1, infer a2] ? [...FindUnions<a1, [...path, 0]>, ...FindUnions<a2, [...path, 1]>] : [] : a extends Set<any> ? [] : a extends Map<any, any> ? [] : a extends object ? Flatten<Values<{ | ||
[k in keyof Required<a>]: FindUnions<NonNullable<a[k]>, [...path, k]>; | ||
] : a extends [infer a1, infer a2] ? [...FindUnions<a1, [...path, 0]>, ...FindUnions<a2, [...path, 1]>] : [] : a extends Set<any> ? [] : a extends Map<any, any> ? [] : IsPlainObject<a> extends true ? Flatten<Values<{ | ||
[k in keyof Required<a>]: FindUnions<NonNullable<a[k]>, [ | ||
...path, | ||
k | ||
]>; | ||
}>> : []; | ||
@@ -67,0 +70,0 @@ export declare type Distribute<unions extends any[]> = unions extends [ |
import type { PatternType, __ } from '../PatternType'; | ||
import type { Primitives } from './Pattern'; | ||
import type { ExcludeIfContainsNever, LeastUpperBound } from './helpers'; | ||
import type { ExcludeIfContainsNever, IsPlainObject, LeastUpperBound } from './helpers'; | ||
export declare type ExtractPreciseValue<a, b> = ExcludeIfContainsNever<b extends [] ? [] : b extends typeof __ ? a : b extends { | ||
@@ -22,4 +22,4 @@ valueKind: PatternType.Not; | ||
ExtractPreciseValue<a3, b3> | ||
] : LeastUpperBound<a, b> : b extends [infer b1, infer b2] ? a extends [infer a1, infer a2] ? [ExtractPreciseValue<a1, b1>, ExtractPreciseValue<a2, b2>] : LeastUpperBound<a, b> : ExtractPreciseValue<a1, b1>[] : LeastUpperBound<a, b> : b extends Map<infer bk, infer bv> ? a extends Map<infer ak, infer av> ? Map<ExtractPreciseValue<ak, bk>, ExtractPreciseValue<av, bv>> : LeastUpperBound<a, b> : b extends Set<infer bv> ? a extends Set<infer av> ? Set<ExtractPreciseValue<av, bv>> : LeastUpperBound<a, b> : b extends object ? a extends any[] | Set<any> | Map<any, any> | Primitives ? LeastUpperBound<a, b> : b extends a ? b : a extends b ? a : { | ||
] : LeastUpperBound<a, b> : b extends [infer b1, infer b2] ? a extends [infer a1, infer a2] ? [ExtractPreciseValue<a1, b1>, ExtractPreciseValue<a2, b2>] : LeastUpperBound<a, b> : ExtractPreciseValue<a1, b1>[] : LeastUpperBound<a, b> : b extends Map<infer bk, infer bv> ? a extends Map<infer ak, infer av> ? Map<ExtractPreciseValue<ak, bk>, ExtractPreciseValue<av, bv>> : LeastUpperBound<a, b> : b extends Set<infer bv> ? a extends Set<infer av> ? Set<ExtractPreciseValue<av, bv>> : LeastUpperBound<a, b> : IsPlainObject<b> extends true ? a extends any[] | Set<any> | Map<any, any> | Primitives ? LeastUpperBound<a, b> : b extends a ? b : a extends b ? a : { | ||
[k in keyof Required<a>]: k extends keyof b ? ExtractPreciseValue<a[k], b[k]> : a[k]; | ||
} : LeastUpperBound<a, b>>; |
@@ -16,3 +16,3 @@ export declare type ValueOf<a> = a extends any[] ? a[number] : a[keyof a]; | ||
**/ | ||
export declare type ExcludeIfContainsNever<a> = a extends Map<any, any> | Set<any> ? a : a extends any[] ? ExcludeNeverArray<a> : a extends object ? ExcludeNeverObject<a> : a; | ||
export declare type ExcludeIfContainsNever<a> = a extends Map<any, any> | Set<any> ? a : a extends any[] ? ExcludeNeverArray<a> : IsPlainObject<a> extends true ? ExcludeNeverObject<Cast<a, object>> : a; | ||
declare type ExcludeNeverArray<a extends any[]> = (a[0] extends never ? false : true) | (a[1] extends never ? false : true) | (a[2] extends never ? false : true) | (a[3] extends never ? false : true) | (a[4] extends never ? false : true) extends true ? a : never; | ||
@@ -28,3 +28,3 @@ declare type ExcludeNeverObject<a extends object> = { | ||
export declare type IsUnion<a> = [a] extends [UnionToIntersection<a>] ? false : true; | ||
export declare type ContainsUnion<a> = IsUnion<a> extends true ? true : a extends object ? false extends ValueOf<{ | ||
export declare type ContainsUnion<a> = IsUnion<a> extends true ? true : IsPlainObject<a> extends true ? false extends ValueOf<{ | ||
[k in keyof a]: ContainsUnion<a[k]>; | ||
@@ -36,3 +36,3 @@ }> ? false : true : false; | ||
declare type RemoveNeverKeys<o> = Omit<o, NeverKeys<o>>; | ||
export declare type ExcludeUnion<a> = IsUnion<a> extends true ? never : a extends object ? RemoveNeverKeys<{ | ||
export declare type ExcludeUnion<a> = IsUnion<a> extends true ? never : IsPlainObject<a> extends true ? RemoveNeverKeys<{ | ||
[k in keyof a]: ExcludeUnion<a[k]>; | ||
@@ -52,2 +52,6 @@ }> : a; | ||
export declare type Drop<xs extends any[], n extends any[]> = Length<n> extends 0 ? xs : xs extends [any, ...(infer tail)] ? Drop<tail, Prev<n>> : []; | ||
declare type BuiltInObjects = Function | Error | Date | RegExp | Generator | { | ||
readonly [Symbol.toStringTag]: string; | ||
}; | ||
export declare type IsPlainObject<o> = o extends object ? o extends BuiltInObjects ? false : true : false; | ||
export {}; |
import type { PatternType, __ } from '../PatternType'; | ||
import { IsPlainObject } from './helpers'; | ||
import type { SelectPattern, GuardPattern, NotPattern, Primitives } from './Pattern'; | ||
@@ -22,4 +23,4 @@ /** | ||
InvertPattern<pe> | ||
] : p extends [infer pb, infer pc, infer pd] ? [InvertPattern<pb>, InvertPattern<pc>, InvertPattern<pd>] : p extends [infer pb, infer pc] ? [InvertPattern<pb>, InvertPattern<pc>] : InvertPattern<pp>[] : p extends Map<infer pk, infer pv> ? Map<pk, InvertPattern<pv>> : p extends Set<infer pv> ? Set<InvertPattern<pv>> : p extends object ? { | ||
] : p extends [infer pb, infer pc, infer pd] ? [InvertPattern<pb>, InvertPattern<pc>, InvertPattern<pd>] : p extends [infer pb, infer pc] ? [InvertPattern<pb>, InvertPattern<pc>] : InvertPattern<pp>[] : p extends Map<infer pk, infer pv> ? Map<pk, InvertPattern<pv>> : p extends Set<infer pv> ? Set<InvertPattern<pv>> : IsPlainObject<p> extends true ? { | ||
[k in keyof p]: InvertPattern<p[k]>; | ||
} : p; |
import type { __, PatternType } from '../PatternType'; | ||
import { IsPlainObject } from './helpers'; | ||
export declare type Primitives = number | boolean | string | undefined | null | symbol | bigint; | ||
@@ -26,3 +27,3 @@ /** | ||
*/ | ||
export declare type Pattern<a> = SelectPattern<string> | GuardPattern<a> | NotPattern<a | any> | WildCardPattern<a> | (a extends Primitives ? a : a extends (infer b)[] ? a extends [infer b, infer c, infer d, infer e, infer f] ? [Pattern<b>, Pattern<c>, Pattern<d>, Pattern<e>, Pattern<f>] : a extends [infer b, infer c, infer d, infer e] ? [Pattern<b>, Pattern<c>, Pattern<d>, Pattern<e>] : a extends [infer b, infer c, infer d] ? [Pattern<b>, Pattern<c>, Pattern<d>] : a extends [infer b, infer c] ? [Pattern<b>, Pattern<c>] : [] | [Pattern<b>] | [Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>] : a extends Map<infer k, infer v> ? Map<k, Pattern<v>> : a extends Set<infer v> ? Set<Pattern<v>> : a extends object ? { | ||
export declare type Pattern<a> = SelectPattern<string> | GuardPattern<a> | NotPattern<a | any> | WildCardPattern<a> | (a extends Primitives ? a : a extends (infer b)[] ? a extends [infer b, infer c, infer d, infer e, infer f] ? [Pattern<b>, Pattern<c>, Pattern<d>, Pattern<e>, Pattern<f>] : a extends [infer b, infer c, infer d, infer e] ? [Pattern<b>, Pattern<c>, Pattern<d>, Pattern<e>] : a extends [infer b, infer c, infer d] ? [Pattern<b>, Pattern<c>, Pattern<d>] : a extends [infer b, infer c] ? [Pattern<b>, Pattern<c>] : [] | [Pattern<b>] | [Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>] | [Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>, Pattern<b>] : a extends Map<infer k, infer v> ? Map<k, Pattern<v>> : a extends Set<infer v> ? Set<Pattern<v>> : IsPlainObject<a> extends true ? { | ||
[k in keyof a]?: Pattern<a[k]>; | ||
@@ -56,5 +57,5 @@ } : a); | ||
ExhaustivePattern<b> | ||
] : a extends Map<infer k, infer v> ? Map<k, ExhaustivePattern<v>> : a extends Set<infer v> ? Set<ExhaustivePattern<v>> : a extends object ? { | ||
] : a extends Map<infer k, infer v> ? Map<k, ExhaustivePattern<v>> : a extends Set<infer v> ? Set<ExhaustivePattern<v>> : IsPlainObject<a> extends true ? { | ||
[k in keyof a]?: ExhaustivePattern<a[k]>; | ||
} : a); | ||
export {}; |
{ | ||
"name": "ts-pattern", | ||
"version": "2.1.0", | ||
"version": "2.1.1-next.0", | ||
"description": "Typescript pattern matching library", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -65,2 +65,4 @@ <h1 align="center">ts-pattern</h1> | ||
⚠️ `ts-pattern@2` requires TypeScript >= v4. If you are using TypeScript v3, please install `ts-pattern@1.1.0`. | ||
# Documentation | ||
@@ -67,0 +69,0 @@ |
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
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
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
56464
679
866
1