typescript-tuple
Advanced tools
Comparing version 4.0.0 to 5.0.0-rc.0
@@ -1,18 +0,5 @@ | ||
export declare type IsFinite<Tuple extends any[], Finite, Infinite> = { | ||
empty: Finite; | ||
nonEmpty: ((..._: Tuple) => any) extends ((_: infer First, ..._1: infer Rest) => any) ? IsFinite<Rest, Finite, Infinite> : never; | ||
infinite: Infinite; | ||
}[Tuple extends [] ? 'empty' : Tuple extends (infer Element)[] ? Element[] extends Tuple ? 'infinite' : 'nonEmpty' : never]; | ||
export declare type _SplitInfiniteTuple<Tuple extends any[], Holder extends any[] = []> = { | ||
matched: [Holder, Tuple]; | ||
unmatched: ((..._: Tuple) => any) extends ((_: infer First, ..._1: infer Rest) => any) ? _SplitInfiniteTuple<Rest, Prepend<Holder, First>> : never; | ||
finite: [Tuple, []]; | ||
}[Tuple extends (infer Element)[] ? Element[] extends Tuple ? 'matched' : 'unmatched' : never]; | ||
export declare type IsFinite<Tuple extends any[], Finite, Infinite> = Tuple extends [] ? Finite : Tuple extends Array<infer Element> ? Element[] extends Tuple ? Infinite : Tuple extends [any, ...infer Rest] ? IsFinite<Rest, Finite, Infinite> : never : never; | ||
export declare type _SplitInfiniteTuple<Tuple extends any[], Holder extends any[] = []> = Tuple extends Array<infer Element> ? Element[] extends Tuple ? [Tuple, Holder] : Tuple extends [infer First, ...infer Rest] ? _SplitInfiniteTuple<Rest, Prepend<Holder, First>> : never : never; | ||
export declare type First<Tuple extends any[], Default = never> = Tuple extends [any, ...any[]] ? Tuple[0] : Default; | ||
export declare type Last<Tuple extends any[], Default = never> = { | ||
empty: Default; | ||
single: Tuple extends [infer SoleElement] ? SoleElement : never; | ||
multi: ((..._: Tuple) => any) extends ((_: any, ..._1: infer Next) => any) ? Last<Next> : Default; | ||
infinite: Tuple extends (infer Element)[] ? Element : never; | ||
}[Tuple extends [] ? 'empty' : Tuple extends [any] ? 'single' : Tuple extends (infer Element)[] ? Element[] extends Tuple ? 'infinite' : 'multi' : never]; | ||
export declare type Last<Tuple extends any[], Default = never> = Tuple extends [] ? Default : Tuple extends [infer SoleElement] ? SoleElement : Tuple extends Array<infer Element> ? Element[] extends Tuple ? Element : Tuple extends [any, ...infer Next] ? Last<Next> : Default : never; | ||
export declare type Tail<Tuple extends any[]> = ((...args: Tuple) => any) extends ((_: any, ..._1: infer Rest) => any) ? Rest : never; | ||
@@ -22,3 +9,3 @@ export declare type Prepend<Tuple extends any[], Addend> = [Addend, ...Tuple]; | ||
empty: Prefix; | ||
nonEmpty: ((..._: Tuple) => any) extends ((_: infer First, ..._1: infer Next) => any) ? Reverse<Next, Prepend<Prefix, First>> : never; | ||
nonEmpty: Tuple extends [infer First, ...infer Next] ? Reverse<Next, Prepend<Prefix, First>> : never; | ||
infinite: { | ||
@@ -30,7 +17,3 @@ ERROR: 'Cannot reverse an infinite tuple'; | ||
export declare type Concat<Left extends any[], Right extends any[]> = [...Left, ...Right]; | ||
export declare type Repeat<Type, Count extends number, Holder extends any[] = []> = Count extends never ? never : number extends Count ? Type[] : { | ||
fit: Holder; | ||
unfit: Repeat<Type, Count, Prepend<Holder, Type>>; | ||
union: Count extends Holder['length'] | infer Rest ? Rest extends number ? Repeat<Type, Holder['length']> | Repeat<Type, Rest> : never : never; | ||
}[Holder['length'] extends Count ? Count extends Holder['length'] ? 'fit' : 'union' : 'unfit']; | ||
export declare type Repeat<Type, Count extends number, Holder extends any[] = []> = Count extends never ? never : number extends Count ? Type[] : Holder['length'] extends Count ? Count extends Holder['length'] ? Holder : Count extends Holder['length'] | infer Rest ? Rest extends number ? Repeat<Type, Holder['length']> | Repeat<Type, Rest> : never : never : Repeat<Type, Count, Prepend<Holder, Type>>; | ||
export declare type ConcatMultiple<TupleSet extends any[][]> = { | ||
@@ -44,22 +27,10 @@ empty: []; | ||
}[TupleSet extends [] ? 'empty' : IsFinite<TupleSet, 'nonEmpty', 'infinite'>]; | ||
export declare type Drop<Tuple extends any[], Quantity extends number, Count extends any[] = []> = { | ||
matched: Tuple; | ||
unmatched: ((...args: Tuple) => any) extends ((_: any, ..._1: infer Rest) => any) ? Drop<Rest, Quantity, Prepend<Count, Count['length']>> : never; | ||
}[Tuple extends [] ? 'matched' : Quantity extends Count['length'] ? 'matched' : 'unmatched']; | ||
export declare type SliceStartQuantity<Tuple extends any[], Start extends number, Quantity extends number, Holder extends any[] = [], Count extends any[] = []> = { | ||
before: SliceStartQuantity<Tail<Tuple>, Start, Quantity, Holder, Prepend<Count, Count['length']>>; | ||
start: ((...args: Tuple) => any) extends ((_: infer First, ..._1: infer Rest) => any) ? SliceStartQuantity<Rest, Start, Quantity, Prepend<Holder, First>, Count> : never; | ||
end: Reverse<Holder>; | ||
}[Tuple extends [] ? 'end' : Quantity extends Holder['length'] ? 'end' : Start extends Count['length'] ? 'start' : 'before']; | ||
export declare type Drop<Tuple extends any[], Quantity extends number, Count extends any[] = []> = Tuple extends [] ? Tuple : Quantity extends Count['length'] ? Tuple : ((...args: Tuple) => any) extends ((_: any, ..._1: infer Rest) => any) ? Drop<Rest, Quantity, Prepend<Count, Count['length']>> : never; | ||
export declare type SliceStartQuantity<Tuple extends any[], Start extends number, Quantity extends number, Holder extends any[] = [], Count extends any[] = []> = Tuple extends [] ? Reverse<Holder> : Quantity extends Holder['length'] ? Reverse<Holder> : Start extends Count['length'] ? Tuple extends [infer First, ...infer Rest] ? SliceStartQuantity<Rest, Start, Quantity, Prepend<Holder, First>, Count> : never : SliceStartQuantity<Tail<Tuple>, Start, Quantity, Holder, Prepend<Count, Count['length']>>; | ||
export declare type FillTuple<Tuple extends any[], Replacement, Holder extends any[] = []> = { | ||
empty: Holder; | ||
nonEmpty: ((...a: Tuple) => any) extends ((a: infer First, ...b: infer Rest) => any) ? FillTuple<Rest, Replacement, Prepend<Holder, Replacement>> : never; | ||
nonEmpty: Tuple extends [any, ...infer Rest] ? FillTuple<Rest, Replacement, Prepend<Holder, Replacement>> : never; | ||
infinite: Replacement[]; | ||
}[Tuple extends [] ? 'empty' : IsFinite<Tuple, 'nonEmpty', 'infinite'>]; | ||
export declare type CompareLength<Left extends any[], Right extends any[]> = { | ||
fitBoth: 'equal'; | ||
fitLeft: 'shorterLeft'; | ||
fitRight: 'shorterRight'; | ||
unfit: ((..._: Left) => any) extends ((_: any, ..._1: infer LeftRest) => any) ? ((..._: Right) => any) extends ((_: any, ..._1: infer RightRest) => any) ? CompareLength<LeftRest, RightRest> : never : never; | ||
}[Left['length'] extends Right['length'] ? 'fitBoth' : Left extends [] ? 'fitLeft' : Right extends [] ? 'fitRight' : 'unfit']; | ||
export declare type CompareLength<Left extends any[], Right extends any[]> = Left['length'] extends Right['length'] ? 'equal' : Left extends [] ? 'shorterLeft' : Right extends [] ? 'shorterRight' : CompareLength<Tail<Left>, Tail<Right>>; | ||
export declare type SortTwoTuple<Left extends any[], Right extends any[], WhenEqual = [Left, Right]> = { | ||
@@ -70,6 +41,3 @@ equal: WhenEqual; | ||
}[CompareLength<Left, Right>]; | ||
export declare type ShortestTuple<TupleSet extends any[][], Shortest = any[]> = { | ||
empty: Shortest; | ||
nonEmpty: ((..._: TupleSet) => any) extends ((_: infer Head, ..._1: infer Tail) => any) ? Tail extends any[] ? Shortest extends any[] ? Head extends any[] ? Tail extends Head[] ? SortTwoTuple<Shortest, Head>[0] : ShortestTuple<Tail, SortTwoTuple<Shortest, Head>[0]> : never : never : never : never; | ||
}[TupleSet extends [] ? 'empty' : 'nonEmpty']; | ||
export declare type ShortestTuple<TupleSet extends any[][], Shortest extends any[] = any[]> = TupleSet extends [] ? Shortest : ((..._: TupleSet) => any) extends ((_: infer Head, ..._1: infer Tail) => any) ? Tail extends any[] ? Head extends any[] ? Tail extends Head[] ? SortTwoTuple<Shortest, Head>[0] : ShortestTuple<Tail, SortTwoTuple<Shortest, Head>[0]> : never : never : never; | ||
export declare type LongestTuple<TupleSet extends any[][], Longest = []> = { | ||
@@ -76,0 +44,0 @@ empty: Longest; |
{ | ||
"name": "typescript-tuple", | ||
"version": "4.0.0", | ||
"version": "5.0.0-rc.0", | ||
"description": "Generics to work with tuples in TypeScript", | ||
@@ -35,6 +35,6 @@ "main": "index.js", | ||
"devDependencies": { | ||
"typescript": "~4.0.2", | ||
"typescript": "~4.1.2", | ||
"tslint": "^6.1.3", | ||
"tslint-config-standard": "^9.0.0", | ||
"static-type-assert": "^4.0.0", | ||
"static-type-assert": "^4.0.1", | ||
"toolcheck": "^0.1.4", | ||
@@ -41,0 +41,0 @@ "clean-typescript-build": "^0.1.5" |
@@ -7,3 +7,3 @@ # TypeScript Tuple | ||
* TypeScript ≥ 4.0.0 | ||
* TypeScript ≥ 4.1.0 | ||
@@ -10,0 +10,0 @@ ## Usage |
Sorry, the diff of this file is not supported yet
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
42440
173
1