hkt-toolbelt
Advanced tools
Comparing version 0.8.1 to 0.9.0
@@ -5,5 +5,8 @@ import $, { Cast, Kind } from "."; | ||
} | ||
declare abstract class RecursiveKind extends Kind { | ||
abstract f: (x: Cast<this[Kind._], RecursiveKind>) => unknown; | ||
} | ||
export declare abstract class ApplySelf extends Kind { | ||
abstract f: (x: Cast<this[Kind._], Kind>) => $<typeof x, Cast<typeof x, Kind.InputOf<typeof x>>>; | ||
abstract f: (x: Cast<this[Kind._], RecursiveKind>) => $<typeof x, Cast<typeof x, Kind.InputOf<typeof x>>>; | ||
} | ||
export * as Combinator from "./combinator"; |
@@ -6,13 +6,13 @@ import { Kind } from "."; | ||
} | ||
export declare type _$subtype<Super, X> = X extends Super ? true : false; | ||
export declare type _$extends<Super, X> = (X extends unknown ? X : never) extends Super ? true : false; | ||
export declare abstract class Extends<Super> extends Kind { | ||
abstract f: (x: this[Kind._]) => _$subtype<Super, typeof x>; | ||
abstract f: (x: this[Kind._]) => _$extends<Super, typeof x>; | ||
} | ||
/** | ||
* @alias Extends | ||
* @alias `Extends<T>` | ||
* @deprecated | ||
*/ | ||
export declare abstract class SubtypeOf<Super> extends Kind { | ||
abstract f: (x: this[Kind._]) => _$subtype<Super, typeof x>; | ||
abstract f: (x: this[Kind._]) => _$extends<Super, typeof x>; | ||
} | ||
export * as Conditional from "./conditional"; |
@@ -15,6 +15,3 @@ import $, { Boolean, Cast, Kind } from "."; | ||
} | ||
export declare type _$filter<F extends Kind, X extends unknown[]> = X extends [ | ||
infer Head, | ||
...infer Tail | ||
] ? $<F, Cast<Head, Kind.InputOf<F>>> extends true ? [Head, ..._$filter<F, Tail>] : _$filter<F, Tail> : []; | ||
export declare type _$filter<F extends Kind, X extends unknown[], O extends unknown[] = []> = X extends [infer Head, ...infer Tail] ? $<F, Cast<Head, Kind.InputOf<F>>> extends true ? _$filter<F, Tail, [...O, Head]> : _$filter<F, Tail, O> : O; | ||
export declare abstract class Filter<F extends Kind<(x: never) => boolean>> extends Kind { | ||
@@ -46,22 +43,19 @@ abstract f: (x: Cast<this[Kind._], Kind.InputOf<F>[]>) => _$filter<F, typeof x>; | ||
} | ||
export declare type _$pair<T extends unknown[]> = T extends [ | ||
infer X1, | ||
infer X2, | ||
...infer Rest | ||
] ? [[X1, X2], ..._$pair<[X2, ...Rest]>] : number extends T["length"] ? [T[number], T[number]][] : []; | ||
export declare type _$pair<T extends unknown[], O extends unknown[][] = []> = T extends [infer X1, infer X2, ...infer Rest] ? _$pair<[X2, ...Rest], [...O, [X1, X2]]> : number extends T["length"] ? [T[number], T[number]][] : O; | ||
export declare abstract class Pair extends Kind { | ||
abstract f: (x: Cast<this[Kind._], unknown[]>) => _$pair<typeof x>; | ||
} | ||
export declare type _$every<F extends Kind<(x: never) => boolean>, T extends unknown[]> = T extends [infer Head, ...infer Rest] ? Boolean._$and<$<F, Cast<Head, Kind.InputOf<F>>>, _$every<F, Rest>> : true; | ||
export declare type _$every<F extends Kind<(x: never) => boolean>, T extends unknown[], O extends boolean = true> = T extends [infer Head, ...infer Rest] ? _$every<F, Rest, Boolean._$and<O, $<F, Cast<Head, Kind.InputOf<F>>>>> : O; | ||
export declare abstract class Every<F extends Kind<(x: never) => boolean>> extends Kind { | ||
abstract f: (x: Cast<this[Kind._], Kind.InputOf<F>[]>) => _$every<F, typeof x>; | ||
} | ||
export declare type _$some<F extends Kind<(x: never) => boolean>, T extends unknown[]> = T extends [infer Head, ...infer Rest] ? Boolean._$or<$<F, Cast<Head, Kind.InputOf<F>>>, _$some<F, Rest>> : false; | ||
export declare type _$some<F extends Kind<(x: never) => boolean>, T extends unknown[], O extends boolean = false> = T extends [infer Head, ...infer Rest] ? _$some<F, Rest, Boolean._$or<O, $<F, Cast<Head, Kind.InputOf<F>>>>> : O; | ||
export declare abstract class Some<F extends Kind<(x: never) => boolean>> extends Kind { | ||
abstract f: (x: Cast<this[Kind._], Kind.InputOf<F>[]>) => _$some<F, typeof x>; | ||
} | ||
export declare type _$reverse<T extends unknown[]> = T extends [ | ||
infer Head, | ||
...infer Tail | ||
] ? [..._$reverse<Tail>, Head] : T extends [...infer Init, infer Last] ? [Last, ..._$reverse<Init>] : T; | ||
declare type _$reverse2<T extends unknown[], O extends unknown[] = []> = T extends [ | ||
...infer Init, | ||
infer Last | ||
] ? Init extends [] ? [...O, Last] : _$reverse2<Init, [...O, Last]> : T extends [infer Head, ...unknown[]] ? Head : [...O, ...T]; | ||
export declare type _$reverse<T extends unknown[], O extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? _$reverse<Tail, [Head, ...O]> : T extends [] ? O : [..._$reverse2<T>, ...O]; | ||
export declare abstract class Reverse extends Kind { | ||
@@ -68,0 +62,0 @@ abstract f: (x: Cast<this[Kind._], unknown[]>) => _$reverse<typeof x>; |
{ | ||
"name": "hkt-toolbelt", | ||
"version": "0.8.1", | ||
"version": "0.9.0", | ||
"description": "Functional and composable type utilities", | ||
@@ -5,0 +5,0 @@ "types": "./dist/index.d.ts", |
@@ -1,5 +0,8 @@ | ||
<h1 align="center"> | ||
[HK-Types Toolbelt] | ||
</h1> | ||
<a href="https://github.com/poteat/hkt-toolbelt#readme"> | ||
<img src=https://raw.githubusercontent.com/poteat/hkt-toolbelt/main/docs/logo.jpeg> | ||
</a> | ||
<br> | ||
<br> | ||
<p align="center"> | ||
@@ -23,4 +26,6 @@ <img src=https://img.shields.io/npm/v/hkt-toolbelt?color=green> | ||
This library is a companion to [ts-toolbelt](https://www.npmjs.com/package/ts-toolbelt) that provides higher-kinded-type versions of its functionality. This allows for more complex types to be constructed. | ||
This library provides type-level utilities across many domains that may be mapped and combined in a functional way, using higher-kinded types. | ||
Write robust, type-safe software with the benefit of composable and compile-time efficient types. | ||
We aim to support hundreds of kind categories, including **List**, **Boolean**, **String**, **Function**, and more. We also provide a set of combinators for composing types. | ||
@@ -30,3 +35,3 @@ | ||
<a href="https://github.com/poteat/hkt-toolbelt#readme.md"> | ||
(Full API Docs) | ||
[Full API Docs] | ||
</a> | ||
@@ -33,0 +38,0 @@ </h1> |
@@ -27,7 +27,7 @@ import { Cast, Conditional, Kind, List } from "."; | ||
} | ||
export declare type _$join<T extends string[], D extends string = ""> = List._$isVariadic<T> extends true ? string : T extends [infer Head, ...infer Tail] ? Tail extends [] ? Head : `${Cast<Head, string>}${D}${_$join<Cast<Tail, string[]>, D>}` : string[] extends T ? string : ""; | ||
export declare type _$join<T extends string[], D extends string = "", O extends string = ""> = List._$isVariadic<T> extends true ? string : T extends [infer Head, ...infer Tail] ? Tail extends [] ? `${O}${D}${Cast<Head, string>}` : _$join<Cast<Tail, string[]>, D, `${O}${O extends "" ? "" : D}${Cast<Head, string>}`> : string[] extends T ? `${O}${string}` : O; | ||
export declare abstract class Join<D extends string = ""> extends Kind { | ||
abstract f: (x: Cast<this[Kind._], string[]>) => _$join<typeof x, D>; | ||
} | ||
export declare type _$split<S extends string, Delimiter extends string = ""> = _$isTemplate<Delimiter> extends true ? string[] : string extends Delimiter ? string[] : S extends `${infer Head}${Delimiter}${infer Tail}` ? [Head, ..._$split<Tail, Delimiter>] : S extends Delimiter ? [] : [S]; | ||
export declare type _$split<S extends string, Delimiter extends string = "", O extends unknown[] = []> = _$isTemplate<Delimiter> extends true ? string[] : string extends Delimiter ? string[] : S extends `${infer Head}${Delimiter}${infer Tail}` ? _$split<Tail, Delimiter, [...O, Head]> : S extends Delimiter ? O : [...O, S]; | ||
export declare abstract class Split<Delimiter extends string = ""> extends Kind { | ||
@@ -48,3 +48,3 @@ abstract f: (x: Cast<this[Kind._], string>) => _$split<typeof x, Delimiter>; | ||
} | ||
declare type _$init2<S extends string> = S extends `${infer Head}${infer Tail}` ? Tail extends "" ? "" : `${Head}${_$init2<Tail>}` : ""; | ||
declare type _$init2<S extends string, O extends string = ""> = S extends `${infer Head}${infer Tail}` ? Tail extends "" ? O : _$init2<Tail, `${O}${Head}`> : O; | ||
export declare type _$init<S extends string> = string extends S ? string : _$init2<S>; | ||
@@ -51,0 +51,0 @@ export declare abstract class Init extends Kind { |
17582
56
263