hotypes 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +1 -0
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +1 -0
  4. package/lib/index.js.map +1 -1
  5. package/lib/prop-by-path.d.ts +1 -0
  6. package/lib/prop-by-path.js +3 -0
  7. package/lib/prop-by-path.js.map +1 -0
  8. package/package.json +3 -2
  9. package/src/equals.ts +5 -0
  10. package/src/flatten-deep.ts +11 -0
  11. package/src/flatten.ts +13 -0
  12. package/src/function-keys.ts +4 -0
  13. package/src/head.ts +4 -0
  14. package/src/index.ts +42 -0
  15. package/src/keys-by-exact-type.ts +8 -0
  16. package/src/keys-by-type.ts +8 -0
  17. package/src/keys-exclude-by-exact-type.ts +4 -0
  18. package/src/keys-exclude-by-type.ts +4 -0
  19. package/src/last.ts +4 -0
  20. package/src/map-all-props.ts +3 -0
  21. package/src/map-nullable-props-to-optional-nullable.ts +6 -0
  22. package/src/map-nullable-props-to-optional.ts +13 -0
  23. package/src/map-props-by-exact-type.ts +8 -0
  24. package/src/map-props-by-key.ts +6 -0
  25. package/src/map-props-by-type.ts +8 -0
  26. package/src/map-props-to-non-nullable.ts +6 -0
  27. package/src/map-props-to-optional-by-key.ts +5 -0
  28. package/src/map-props-to-required-by-key.ts +6 -0
  29. package/src/mixin-all.ts +6 -0
  30. package/src/mixin.ts +6 -0
  31. package/src/non-callable.ts +3 -0
  32. package/src/non-nullable-keys.ts +4 -0
  33. package/src/nullable-keys.ts +3 -0
  34. package/src/omit-props-by-exact-type.ts +4 -0
  35. package/src/omit-props-by-type.ts +4 -0
  36. package/src/optional-keys.ts +7 -0
  37. package/src/pick-non-never.ts +3 -0
  38. package/src/pop.ts +4 -0
  39. package/src/prop-by-path.ts +16 -0
  40. package/src/replace-props-by-key.ts +8 -0
  41. package/src/replace-props-by-type.ts +9 -0
  42. package/src/replace.ts +3 -0
  43. package/src/return-type-of-constructor.ts +4 -0
  44. package/src/tail.ts +4 -0
  45. package/src/unpacked-array-like.ts +4 -0
  46. package/src/unpacked-array.ts +4 -0
  47. package/src/unpacked-async-iterable.ts +4 -0
  48. package/src/unpacked-iterable.ts +1 -0
  49. package/src/unpacked-promise-like.ts +1 -0
  50. package/src/unpacked-promise.ts +1 -0
  51. package/src/with-default.ts +4 -0
package/README.md CHANGED
@@ -41,6 +41,7 @@ yarn add hotypes
41
41
  - MixinAll
42
42
  - PickNonNever
43
43
  - Pop
44
+ - PropByPath
44
45
  - OmitPropsByType
45
46
  - OmitPropsByExactType
46
47
  - Replace
package/lib/index.d.ts CHANGED
@@ -26,6 +26,7 @@ export * from './omit-props-by-exact-type';
26
26
  export * from './optional-keys';
27
27
  export * from './pick-non-never';
28
28
  export * from './pop';
29
+ export * from './prop-by-path';
29
30
  export * from './replace';
30
31
  export * from './replace-props-by-key';
31
32
  export * from './replace-props-by-type';
package/lib/index.js CHANGED
@@ -42,6 +42,7 @@ __exportStar(require("./omit-props-by-exact-type"), exports);
42
42
  __exportStar(require("./optional-keys"), exports);
43
43
  __exportStar(require("./pick-non-never"), exports);
44
44
  __exportStar(require("./pop"), exports);
45
+ __exportStar(require("./prop-by-path"), exports);
45
46
  __exportStar(require("./replace"), exports);
46
47
  __exportStar(require("./replace-props-by-key"), exports);
47
48
  __exportStar(require("./replace-props-by-type"), exports);
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,iDAA8B;AAC9B,4CAAyB;AACzB,kDAA+B;AAC/B,yCAAsB;AACtB,iDAA8B;AAC9B,uDAAoC;AACpC,yDAAsC;AACtC,+DAA4C;AAC5C,yCAAsB;AACtB,kDAA+B;AAC/B,qDAAkC;AAClC,sDAAmC;AACnC,4DAAyC;AACzC,4EAAyD;AACzD,mEAAgD;AAChD,iEAA8C;AAC9C,iEAA8C;AAC9C,8DAA2C;AAC3C,0CAAuB;AACvB,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,uDAAoC;AACpC,6DAA0C;AAC1C,kDAA+B;AAC/B,mDAAgC;AAChC,wCAAqB;AACrB,4CAAyB;AACzB,yDAAsC;AACtC,0DAAuC;AACvC,yCAAsB;AACtB,iDAA8B;AAC9B,iDAA8B;AAC9B,+DAA4C;AAC5C,mDAAgC;AAChC,wDAAqC;AACrC,sDAAmC;AACnC,4DAAyC;AACzC,0DAAuC;AACvC,qDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,iDAA8B;AAC9B,4CAAyB;AACzB,kDAA+B;AAC/B,yCAAsB;AACtB,iDAA8B;AAC9B,uDAAoC;AACpC,yDAAsC;AACtC,+DAA4C;AAC5C,yCAAsB;AACtB,kDAA+B;AAC/B,qDAAkC;AAClC,sDAAmC;AACnC,4DAAyC;AACzC,4EAAyD;AACzD,mEAAgD;AAChD,iEAA8C;AAC9C,iEAA8C;AAC9C,8DAA2C;AAC3C,0CAAuB;AACvB,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,uDAAoC;AACpC,6DAA0C;AAC1C,kDAA+B;AAC/B,mDAAgC;AAChC,wCAAqB;AACrB,iDAA8B;AAC9B,4CAAyB;AACzB,yDAAsC;AACtC,0DAAuC;AACvC,yCAAsB;AACtB,iDAA8B;AAC9B,iDAA8B;AAC9B,+DAA4C;AAC5C,mDAAgC;AAChC,wDAAqC;AACrC,sDAAmC;AACnC,4DAAyC;AACzC,0DAAuC;AACvC,qDAAkC"}
@@ -0,0 +1 @@
1
+ export declare type PropByPath<T extends object, Path extends PropertyKey[]> = Path extends [infer First, ...infer Rest] ? (First extends keyof T ? (T[First] extends object ? (Rest extends PropertyKey[] ? PropByPath<T[First], Rest> : never) : T[First]) : undefined) : T;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=prop-by-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-by-path.js","sourceRoot":"","sources":["../src/prop-by-path.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hotypes",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Higher order types for TypeScript",
5
5
  "keywords": [
6
6
  "higher-order",
@@ -9,7 +9,8 @@
9
9
  "hot"
10
10
  ],
11
11
  "files": [
12
- "lib"
12
+ "lib",
13
+ "src"
13
14
  ],
14
15
  "main": "lib/index.js",
15
16
  "types": "lib/index.d.ts",
package/src/equals.ts ADDED
@@ -0,0 +1,5 @@
1
+ // very magic, read https://github.com/microsoft/TypeScript/issues/27024
2
+ export type Equals<X, Y> =
3
+ (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2)
4
+ ? true
5
+ : false
@@ -0,0 +1,11 @@
1
+ export type FlattenDeep<T extends unknown[]> =
2
+ T extends [infer First, ...infer Rest]
3
+ ? [
4
+ ...(
5
+ First extends unknown[]
6
+ ? FlattenDeep<First>
7
+ : [First]
8
+ )
9
+ , ...FlattenDeep<Rest>
10
+ ]
11
+ : T
package/src/flatten.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { UnpackedArray } from './unpacked-array'
2
+
3
+ export type Flatten<T extends unknown[]> =
4
+ T extends [infer First, ...infer Rest]
5
+ ? [
6
+ ...(
7
+ First extends unknown[]
8
+ ? [UnpackedArray<First>]
9
+ : [First]
10
+ )
11
+ , ...Flatten<Rest>
12
+ ]
13
+ : T
@@ -0,0 +1,4 @@
1
+ import { KeysByType } from './keys-by-type'
2
+
3
+ export type FunctionKeys<T> =
4
+ KeysByType<T, (...args: any) => any>
package/src/head.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type Head<T extends unknown[]> =
2
+ T extends [infer U, ...unknown[]]
3
+ ? U
4
+ : never
package/src/index.ts ADDED
@@ -0,0 +1,42 @@
1
+ export * from './equals'
2
+ export * from './flatten-deep'
3
+ export * from './flatten'
4
+ export * from './function-keys'
5
+ export * from './head'
6
+ export * from './keys-by-type'
7
+ export * from './keys-by-exact-type'
8
+ export * from './keys-exclude-by-type'
9
+ export * from './keys-exclude-by-exact-type'
10
+ export * from './last'
11
+ export * from './map-all-props'
12
+ export * from './map-props-by-key'
13
+ export * from './map-props-by-type'
14
+ export * from './map-props-by-exact-type'
15
+ export * from './map-nullable-props-to-optional-nullable'
16
+ export * from './map-nullable-props-to-optional'
17
+ export * from './map-props-to-optional-by-key'
18
+ export * from './map-props-to-required-by-key'
19
+ export * from './map-props-to-non-nullable'
20
+ export * from './mixin'
21
+ export * from './mixin-all'
22
+ export * from './non-nullable-keys'
23
+ export * from './nullable-keys'
24
+ export * from './omit-props-by-type'
25
+ export * from './omit-props-by-exact-type'
26
+ export * from './optional-keys'
27
+ export * from './pick-non-never'
28
+ export * from './pop'
29
+ export * from './prop-by-path'
30
+ export * from './replace'
31
+ export * from './replace-props-by-key'
32
+ export * from './replace-props-by-type'
33
+ export * from './tail'
34
+ export * from './with-default'
35
+ export * from './non-callable'
36
+ export * from './return-type-of-constructor'
37
+ export * from './unpacked-array'
38
+ export * from './unpacked-array-like'
39
+ export * from './unpacked-iterable'
40
+ export * from './unpacked-async-iterable'
41
+ export * from './unpacked-promise-like'
42
+ export * from './unpacked-promise'
@@ -0,0 +1,8 @@
1
+ import { Equals } from './equals'
2
+
3
+ export type KeysByExactType<T, Type> = {
4
+ [Key in keyof T]:
5
+ Equals<T[Key], Type> extends true
6
+ ? Key
7
+ : never
8
+ }[keyof T]
@@ -0,0 +1,8 @@
1
+ export type KeysByType<T, Type> = {
2
+ [Key in keyof T]:
3
+ T[Key] extends Type
4
+ ? Key
5
+ : Type extends T[Key]
6
+ ? Key
7
+ : never
8
+ }[keyof T]
@@ -0,0 +1,4 @@
1
+ import { KeysByExactType } from './keys-by-exact-type'
2
+
3
+ export type KeysExcludeByExactType<T, Type> =
4
+ Exclude<keyof T, KeysByExactType<T, Type>>
@@ -0,0 +1,4 @@
1
+ import { KeysByType } from './keys-by-type'
2
+
3
+ export type KeysExcludeByType<T, Type> =
4
+ Exclude<keyof T, KeysByType<T, Type>>
package/src/last.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type Last<T extends unknown[]> =
2
+ T extends [...unknown[], infer U]
3
+ ? U
4
+ : never
@@ -0,0 +1,3 @@
1
+ export type MapAllProps<T, NewType> = {
2
+ [Key in keyof T]: NewType
3
+ }
@@ -0,0 +1,6 @@
1
+ import { NonNullableKeys } from './non-nullable-keys'
2
+ import { NullableKeys } from './nullable-keys'
3
+
4
+ export type MapNullablePropsToOptionalNullable<T> =
5
+ Pick<T, NonNullableKeys<T>>
6
+ & Partial<Pick<T, NullableKeys<T>>>
@@ -0,0 +1,13 @@
1
+ import { MapPropsByType } from './map-props-by-type'
2
+ import { NonNullableKeys } from './non-nullable-keys'
3
+ import { NullableKeys } from './nullable-keys'
4
+
5
+ export type MapNullablePropsToOptional<T> =
6
+ Pick<T, NonNullableKeys<T>>
7
+ & Partial<
8
+ MapPropsByType<
9
+ Pick<T, NullableKeys<T>>
10
+ , null
11
+ , undefined
12
+ >
13
+ >
@@ -0,0 +1,8 @@
1
+ import { Equals } from './equals'
2
+
3
+ export type MapPropsByExactType<T, OldType, NewType> = {
4
+ [Key in keyof T]:
5
+ Equals<T[Key], OldType> extends true
6
+ ? NewType
7
+ : T[Key]
8
+ }
@@ -0,0 +1,6 @@
1
+ export type MapPropsByKey<T, Keys, NewType> = {
2
+ [Key in keyof T]:
3
+ Key extends Keys
4
+ ? NewType
5
+ : T[Key]
6
+ }
@@ -0,0 +1,8 @@
1
+ export type MapPropsByType<T, OldType, NewType> = {
2
+ [Key in keyof T]:
3
+ T[Key] extends OldType
4
+ ? Exclude<T[Key], OldType> | NewType
5
+ : OldType extends T[Key]
6
+ ? Exclude<T[Key], OldType> | NewType
7
+ : T[Key]
8
+ }
@@ -0,0 +1,6 @@
1
+ import { PickNonNever } from './pick-non-never'
2
+
3
+ export type MapPropsToNonNullable<T> =
4
+ PickNonNever<{
5
+ [Key in keyof T]: NonNullable<T[Key]>
6
+ }>
@@ -0,0 +1,5 @@
1
+ import { OptionalKeys } from './optional-keys'
2
+
3
+ export type MapPropsToOptionalByKey<T, Keys extends keyof T> =
4
+ Pick<T, Exclude<keyof T, Keys | OptionalKeys<T>>>
5
+ & Partial<Pick<T, Keys | OptionalKeys<T>>>
@@ -0,0 +1,6 @@
1
+ import { OptionalKeys } from './optional-keys'
2
+
3
+ export type MapPropsToRequiredByKey<T, Keys extends keyof T> =
4
+ Pick<T, Exclude<keyof T, OptionalKeys<T> | Keys>>
5
+ & Partial<Pick<T, OptionalKeys<T>>>
6
+ & Required<Pick<T, Keys>>
@@ -0,0 +1,6 @@
1
+ import { Mixin } from './mixin'
2
+
3
+ export type MixinAll<Tuple extends any[], Result = {}> =
4
+ Tuple extends [infer First, ...infer Rest]
5
+ ? MixinAll<Rest, Mixin<Result, First>>
6
+ : Result
package/src/mixin.ts ADDED
@@ -0,0 +1,6 @@
1
+ export type Mixin<Base, Other> = {
2
+ [Key in keyof (Base & Other)]:
3
+ Key extends keyof Other ? Other[Key]
4
+ : Key extends keyof Base ? Base[Key]
5
+ : never
6
+ }
@@ -0,0 +1,3 @@
1
+ export type NonCallable<T> = {
2
+ [Key in keyof T]: T[Key]
3
+ }
@@ -0,0 +1,4 @@
1
+ import { KeysExcludeByType } from './keys-exclude-by-type'
2
+
3
+ export type NonNullableKeys<T> =
4
+ KeysExcludeByType<T, null | undefined>
@@ -0,0 +1,3 @@
1
+ import { KeysByType } from './keys-by-type'
2
+
3
+ export type NullableKeys<T> = KeysByType<T, undefined | null>
@@ -0,0 +1,4 @@
1
+ import { KeysByExactType } from './keys-by-exact-type'
2
+
3
+ export type OmitPropsByExactType<T, Type> =
4
+ Pick<T, Exclude<keyof T, KeysByExactType<T, Type>>>
@@ -0,0 +1,4 @@
1
+ import { KeysByType } from './keys-by-type'
2
+
3
+ export type OmitPropsByType<T, Type> =
4
+ Pick<T, Exclude<keyof T, KeysByType<T, Type>>>
@@ -0,0 +1,7 @@
1
+ import { KeysByType } from './keys-by-type'
2
+
3
+ export type OptionalKeys<T> =
4
+ Exclude<
5
+ KeysByType<T, undefined>
6
+ , undefined
7
+ >
@@ -0,0 +1,3 @@
1
+ import { KeysExcludeByExactType } from './keys-exclude-by-exact-type'
2
+
3
+ export type PickNonNever<T> = Pick<T, KeysExcludeByExactType<T, never>>
package/src/pop.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type Pop<T extends unknown[]> =
2
+ T extends [...infer U, unknown]
3
+ ? U
4
+ : never
@@ -0,0 +1,16 @@
1
+ export type PropByPath<T extends object, Path extends PropertyKey[]> =
2
+ Path extends [infer First, ...infer Rest]
3
+ ? (
4
+ First extends keyof T
5
+ ? (
6
+ T[First] extends object
7
+ ? (
8
+ Rest extends PropertyKey[]
9
+ ? PropByPath<T[First], Rest>
10
+ : never
11
+ )
12
+ : T[First]
13
+ )
14
+ : undefined
15
+ )
16
+ : T
@@ -0,0 +1,8 @@
1
+ import { Replace } from './replace'
2
+
3
+ export type ReplacePropsByKey<T, Keys, OldType, NewType> = {
4
+ [Key in keyof T]:
5
+ Key extends Keys
6
+ ? Replace<T[Key], OldType, NewType>
7
+ : T[Key]
8
+ }
@@ -0,0 +1,9 @@
1
+ import { Replace } from './replace'
2
+ import { KeysByType } from './keys-by-type'
3
+
4
+ export type ReplacePropsByType<T, OldType, NewType> = {
5
+ [Key in keyof T]:
6
+ Key extends KeysByType<T, OldType>
7
+ ? Replace<T[Key], OldType, NewType>
8
+ : T[Key]
9
+ }
package/src/replace.ts ADDED
@@ -0,0 +1,3 @@
1
+ export type Replace<T, OldType, NewType> =
2
+ | Exclude<T, OldType>
3
+ | NewType
@@ -0,0 +1,4 @@
1
+ export type ReturnTypeOfConstructor<T extends new (...args: any) => any> =
2
+ T extends new (...args: any) => infer R
3
+ ? R
4
+ : never
package/src/tail.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type Tail<T extends unknown[]> =
2
+ T extends [unknown, ...infer U]
3
+ ? U
4
+ : never
@@ -0,0 +1,4 @@
1
+ export type UnpackedArrayLike<T> =
2
+ T extends ArrayLike<infer U>
3
+ ? U
4
+ : never
@@ -0,0 +1,4 @@
1
+ export type UnpackedArray<T> =
2
+ T extends Array<infer U>
3
+ ? U
4
+ : never
@@ -0,0 +1,4 @@
1
+ export type UnpackedAsyncIterable<T> =
2
+ T extends AsyncIterable<infer U>
3
+ ? U
4
+ : never
@@ -0,0 +1 @@
1
+ export type UnpackedIterable<T> = T extends Iterable<infer U> ? U : never
@@ -0,0 +1 @@
1
+ export type UnpackedPromiseLike<T> = T extends PromiseLike<infer U> ? U : never
@@ -0,0 +1 @@
1
+ export type UnpackedPromise<T> = T extends Promise<infer U> ? U : never
@@ -0,0 +1,4 @@
1
+ export type WithDefault<T, Default> =
2
+ T extends undefined | null
3
+ ? NonNullable<T> | Default
4
+ : T