@depup/type-fest 5.5.0-depup.0 → 5.9.0-depup.0
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.
- package/README.md +2 -2
- package/changes.json +1 -1
- package/index.d.ts +16 -8
- package/package.json +8 -6
- package/readme.md +85 -61
- package/source/absolute.d.ts +52 -0
- package/source/all-extend.d.ts +6 -4
- package/source/all-union-fields.d.ts +18 -18
- package/source/and.d.ts +1 -1
- package/source/array-reverse.d.ts +4 -3
- package/source/array-splice.d.ts +24 -24
- package/source/array-tail.d.ts +4 -4
- package/source/camel-case.d.ts +38 -5
- package/source/camel-cased-properties-deep.d.ts +11 -4
- package/source/camel-cased-properties.d.ts +5 -1
- package/source/conditional-keys.d.ts +1 -1
- package/source/delimiter-case.d.ts +11 -9
- package/source/delimiter-cased-properties-deep.d.ts +8 -1
- package/source/delimiter-cased-properties.d.ts +5 -1
- package/source/empty-object.d.ts +1 -1
- package/source/entries.d.ts +1 -1
- package/source/entry.d.ts +1 -1
- package/source/exclude-exactly.d.ts +11 -11
- package/source/exclude-rest-element.d.ts +4 -4
- package/source/exclusify-union.d.ts +4 -4
- package/source/extends-strict.d.ts +129 -22
- package/source/extract-exactly.d.ts +56 -0
- package/source/get.d.ts +1 -1
- package/source/greater-than.d.ts +3 -2
- package/source/has-optional-keys.d.ts +1 -1
- package/source/has-readonly-keys.d.ts +1 -1
- package/source/has-required-keys.d.ts +1 -1
- package/source/has-writable-keys.d.ts +1 -1
- package/source/int-closed-range.d.ts +1 -3
- package/source/int-range.d.ts +3 -5
- package/source/internal/array.d.ts +8 -8
- package/source/internal/keys.d.ts +9 -9
- package/source/internal/numeric.d.ts +19 -27
- package/source/internal/object.d.ts +44 -6
- package/source/internal/string.d.ts +1 -76
- package/source/internal/tuple.d.ts +2 -2
- package/source/internal/type.d.ts +16 -10
- package/source/is-boolean-literal.d.ts +39 -0
- package/source/is-integer.d.ts +8 -8
- package/source/is-literal.d.ts +43 -267
- package/source/is-numeric-literal.d.ts +50 -0
- package/source/is-string-literal.d.ts +72 -0
- package/source/is-symbol-literal.d.ts +39 -0
- package/source/is-union.d.ts +12 -12
- package/source/iterable-element.d.ts +5 -5
- package/source/jsonify.d.ts +5 -9
- package/source/kebab-case.d.ts +1 -0
- package/source/kebab-cased-properties-deep.d.ts +7 -0
- package/source/kebab-cased-properties.d.ts +5 -1
- package/source/keys-of-union.d.ts +2 -2
- package/source/last-array-element.d.ts +66 -13
- package/source/less-than-or-equal.d.ts +1 -1
- package/source/literal-to-primitive.d.ts +1 -1
- package/source/literal-union.d.ts +1 -1
- package/source/merge-exclusive.d.ts +3 -3
- package/source/multidimensional-array.d.ts +1 -1
- package/source/multidimensional-readonly-array.d.ts +1 -1
- package/source/non-nullable-deep.d.ts +102 -0
- package/source/numeric.d.ts +3 -3
- package/source/object-merge.d.ts +21 -16
- package/source/omit-deep.d.ts +22 -22
- package/source/or.d.ts +1 -1
- package/source/package-json.d.ts +7 -7
- package/source/partial-deep.d.ts +3 -1
- package/source/pascal-case.d.ts +1 -0
- package/source/pascal-cased-properties-deep.d.ts +7 -0
- package/source/pascal-cased-properties.d.ts +5 -1
- package/source/pick-deep.d.ts +2 -0
- package/source/readonly-deep.d.ts +5 -3
- package/source/remove-prefix.d.ts +16 -34
- package/source/remove-suffix.d.ts +114 -0
- package/source/rename-keys.d.ts +163 -0
- package/source/replace.d.ts +2 -2
- package/source/require-all-or-none.d.ts +5 -5
- package/source/require-at-least-one.d.ts +9 -11
- package/source/require-exactly-one.d.ts +7 -7
- package/source/require-one-or-none.d.ts +5 -5
- package/source/required-deep.d.ts +3 -1
- package/source/schema.d.ts +16 -8
- package/source/screaming-snake-case.d.ts +1 -0
- package/source/set-non-nullable-deep.d.ts +8 -4
- package/source/set-non-nullable.d.ts +1 -1
- package/source/set-optional.d.ts +5 -5
- package/source/set-readonly.d.ts +3 -3
- package/source/set-required-deep.d.ts +3 -2
- package/source/set-required.d.ts +3 -3
- package/source/shared-union-fields-deep.d.ts +4 -3
- package/source/shared-union-fields.d.ts +9 -9
- package/source/snake-case.d.ts +1 -0
- package/source/snake-cased-properties-deep.d.ts +7 -0
- package/source/snake-cased-properties.d.ts +5 -1
- package/source/some-extend.d.ts +6 -4
- package/source/split-on-rest-element.d.ts +6 -4
- package/source/split.d.ts +1 -1
- package/source/string-length.d.ts +38 -0
- package/source/string-repeat.d.ts +48 -21
- package/source/string-slice.d.ts +1 -1
- package/source/string-to-array.d.ts +97 -0
- package/source/string-to-number.d.ts +67 -0
- package/source/subtract.d.ts +4 -3
- package/source/sum.d.ts +5 -4
- package/source/tagged.d.ts +3 -5
- package/source/tsconfig-json.d.ts +40 -8
- package/source/tuple-of.d.ts +42 -8
- package/source/typed-array.d.ts +1 -0
- package/source/union-length.d.ts +27 -0
- package/source/union-to-intersection.d.ts +1 -1
- package/source/union-to-tuple.d.ts +8 -4
- package/source/unwrap-required.d.ts +37 -0
- package/source/words.d.ts +30 -4
- package/source/writable.d.ts +14 -14
- package/source/xor.d.ts +1 -1
package/source/tuple-of.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {If} from './if.d.ts';
|
|
2
2
|
import type {IfNotAnyOrNever} from './internal/type.d.ts';
|
|
3
3
|
import type {IsNegative} from './numeric.d.ts';
|
|
4
|
+
import type {DigitCharacter} from './characters.d.ts';
|
|
4
5
|
import type {UnknownArray} from './unknown-array.d.ts';
|
|
5
6
|
|
|
6
7
|
/**
|
|
@@ -30,7 +31,7 @@ type ZeroToFour = Range<0, 5>;
|
|
|
30
31
|
//=> '0' | '1' | '2' | '3' | '4'
|
|
31
32
|
|
|
32
33
|
type ThreeToEight = Range<3, 9>;
|
|
33
|
-
//=> '
|
|
34
|
+
//=> '3' | '4' | '5' | '6' | '7' | '8'
|
|
34
35
|
```
|
|
35
36
|
|
|
36
37
|
Note: If the specified length is the non-literal `number` type, the result will not be a tuple but a regular array.
|
|
@@ -63,18 +64,51 @@ type EmptyTuple = TupleOf<-3, string>;
|
|
|
63
64
|
//=> []
|
|
64
65
|
```
|
|
65
66
|
|
|
67
|
+
Note: If the specified length has a decimal part, the decimal part will be ignored.
|
|
68
|
+
|
|
69
|
+
@example
|
|
70
|
+
```
|
|
71
|
+
import type {TupleOf} from 'type-fest';
|
|
72
|
+
|
|
73
|
+
type DecimalLength = TupleOf<3.5, string>;
|
|
74
|
+
//=> [string, string, string]
|
|
75
|
+
```
|
|
76
|
+
|
|
66
77
|
Note: If you need a readonly tuple, simply wrap this type with `Readonly`, for example, to create `readonly [number, number, number]` use `Readonly<TupleOf<3, number>>`.
|
|
67
78
|
|
|
68
79
|
@category Array
|
|
69
80
|
*/
|
|
70
|
-
export type TupleOf<Length extends number, Fill = unknown> = IfNotAnyOrNever<Length,
|
|
71
|
-
_TupleOf<If<IsNegative<Length>, 0, Length>, Fill
|
|
72
|
-
Fill[]
|
|
81
|
+
export type TupleOf<Length extends number, Fill = unknown> = IfNotAnyOrNever<Length, {
|
|
82
|
+
ifNot: _TupleOf<If<IsNegative<Length>, 0, Length>, Fill>;
|
|
83
|
+
ifAny: Fill[];
|
|
84
|
+
ifNever: [];
|
|
85
|
+
}>;
|
|
73
86
|
|
|
74
|
-
type _TupleOf<
|
|
87
|
+
type _TupleOf<Length extends number, Fill> = number extends Length
|
|
75
88
|
? Fill[]
|
|
76
|
-
:
|
|
77
|
-
|
|
78
|
-
|
|
89
|
+
: BuildTupleDigitByDigit<`${Length}`, Fill>;
|
|
90
|
+
|
|
91
|
+
type BuildTupleDigitByDigit<Length extends string, Fill, Accumulator extends UnknownArray = []> =
|
|
92
|
+
Length extends `${infer First extends DigitCharacter}${infer Rest}`
|
|
93
|
+
? BuildTupleDigitByDigit<Rest, Fill, [...RepeatTupleTenTimes<Accumulator>, ...DigitTupleOf<First, Fill>]>
|
|
94
|
+
: Accumulator;
|
|
95
|
+
|
|
96
|
+
type RepeatTupleTenTimes<Tuple extends UnknownArray> = [
|
|
97
|
+
...Tuple, ...Tuple, ...Tuple, ...Tuple, ...Tuple,
|
|
98
|
+
...Tuple, ...Tuple, ...Tuple, ...Tuple, ...Tuple,
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
type DigitTupleOf<Digit extends DigitCharacter, Fill> = [
|
|
102
|
+
[],
|
|
103
|
+
[Fill],
|
|
104
|
+
[Fill, Fill],
|
|
105
|
+
[Fill, Fill, Fill],
|
|
106
|
+
[Fill, Fill, Fill, Fill],
|
|
107
|
+
[Fill, Fill, Fill, Fill, Fill],
|
|
108
|
+
[Fill, Fill, Fill, Fill, Fill, Fill],
|
|
109
|
+
[Fill, Fill, Fill, Fill, Fill, Fill, Fill],
|
|
110
|
+
[Fill, Fill, Fill, Fill, Fill, Fill, Fill, Fill],
|
|
111
|
+
[Fill, Fill, Fill, Fill, Fill, Fill, Fill, Fill, Fill],
|
|
112
|
+
][Digit];
|
|
79
113
|
|
|
80
114
|
export {};
|
package/source/typed-array.d.ts
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type {UnionToTuple} from './union-to-tuple.d.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
Returns the length of a union type.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```
|
|
8
|
+
import type {UnionLength} from 'type-fest';
|
|
9
|
+
|
|
10
|
+
type T1 = UnionLength<'foo' | 'bar' | 'baz'>;
|
|
11
|
+
//=> 3
|
|
12
|
+
|
|
13
|
+
type T2 = UnionLength<[string, string, string] | {x: string; y: string; z: string}>;
|
|
14
|
+
//=> 2
|
|
15
|
+
|
|
16
|
+
type T3 = UnionLength<any>;
|
|
17
|
+
//=> 1
|
|
18
|
+
|
|
19
|
+
type T4 = UnionLength<never>;
|
|
20
|
+
//=> 0
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
@category Type
|
|
24
|
+
*/
|
|
25
|
+
export type UnionLength<Union> = UnionToTuple<Union>['length'];
|
|
26
|
+
|
|
27
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
Convert a union type to an intersection type
|
|
2
|
+
Convert a union type to an intersection type.
|
|
3
3
|
|
|
4
4
|
Inspired by [this Stack Overflow answer](https://stackoverflow.com/a/50375286/2172153).
|
|
5
5
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {ExcludeExactly} from './exclude-exactly.d.ts';
|
|
2
2
|
import type {IsNever} from './is-never.d.ts';
|
|
3
3
|
import type {UnionMember} from './union-member.d.ts';
|
|
4
|
+
import type {UnknownArray} from './unknown-array.d.ts';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
Convert a union type into an unordered tuple type of its elements.
|
|
@@ -37,9 +38,12 @@ const petList = Object.keys(pets) as UnionToTuple<Pet>;
|
|
|
37
38
|
|
|
38
39
|
@category Array
|
|
39
40
|
*/
|
|
40
|
-
export type UnionToTuple<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
export type UnionToTuple<Union> =
|
|
42
|
+
_UnionToTuple<Union> extends infer Result extends UnknownArray ? Result : never; // Nudges the compiler that `UnionToTuple` always yields an array.
|
|
43
|
+
|
|
44
|
+
type _UnionToTuple<Union, Accumulator extends UnknownArray = [], Member = UnionMember<Union>> =
|
|
45
|
+
IsNever<Union> extends true
|
|
46
|
+
? Accumulator
|
|
47
|
+
: _UnionToTuple<ExcludeExactly<Union, Member>, [Member, ...Accumulator]>;
|
|
44
48
|
|
|
45
49
|
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type {MapsSetsOrArrays, NonRecursiveType} from './internal/type.d.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
Revert the `Required` modifier on an object type.
|
|
5
|
+
|
|
6
|
+
Use-case: Infer the underlying type `T` when only `Required<T>` is available or the original type may not be directly accessible.
|
|
7
|
+
|
|
8
|
+
@example
|
|
9
|
+
```
|
|
10
|
+
import type {UnwrapRequired} from 'type-fest';
|
|
11
|
+
|
|
12
|
+
type ContactFormData = Required<{
|
|
13
|
+
email: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
}>;
|
|
16
|
+
|
|
17
|
+
type DraftContactFormData = UnwrapRequired<ContactFormData>;
|
|
18
|
+
//=> {email: string; message?: string}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Note:
|
|
22
|
+
- If the provided type isn’t of the form `Required<T>`, `UnwrapRequired` simply returns the input type.
|
|
23
|
+
- `UnwrapRequired` doesn't work with arrays, if instantiated with arrays, it simply returns the input type.
|
|
24
|
+
|
|
25
|
+
@category Object
|
|
26
|
+
*/
|
|
27
|
+
export type UnwrapRequired<RequiredObjectType> =
|
|
28
|
+
RequiredObjectType extends NonRecursiveType | MapsSetsOrArrays
|
|
29
|
+
? RequiredObjectType
|
|
30
|
+
: _UnwrapRequired<RequiredObjectType>;
|
|
31
|
+
|
|
32
|
+
type _UnwrapRequired<RequiredObjectType> =
|
|
33
|
+
RequiredObjectType extends Required<infer ObjectType>
|
|
34
|
+
? ObjectType
|
|
35
|
+
: RequiredObjectType;
|
|
36
|
+
|
|
37
|
+
export {};
|
package/source/words.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
ApplyDefaultOptions,
|
|
3
|
+
AsciiPunctuation,
|
|
3
4
|
IsNumeric,
|
|
4
5
|
WordSeparators,
|
|
5
6
|
} from './internal/index.d.ts';
|
|
@@ -38,17 +39,34 @@ export type WordsOptions = {
|
|
|
38
39
|
```
|
|
39
40
|
*/
|
|
40
41
|
splitOnNumbers?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
Split on {@link AsciiPunctuation | punctuation characters} (e.g., `#`, `&`, `*`, `:`, `?`, `@`, `~`).
|
|
44
|
+
|
|
45
|
+
@example
|
|
46
|
+
```
|
|
47
|
+
import type {Words} from 'type-fest';
|
|
48
|
+
|
|
49
|
+
type Example1 = Words<'hello:world', {splitOnPunctuation: true}>;
|
|
50
|
+
//=> ['hello', 'world']
|
|
51
|
+
|
|
52
|
+
type Example2 = Words<'hello:world', {splitOnPunctuation: false}>;
|
|
53
|
+
//=> ['hello', ':world']
|
|
54
|
+
```
|
|
55
|
+
*/
|
|
56
|
+
splitOnPunctuation?: boolean;
|
|
41
57
|
};
|
|
42
58
|
|
|
43
59
|
export type _DefaultWordsOptions = {
|
|
44
60
|
splitOnNumbers: true;
|
|
61
|
+
splitOnPunctuation: false;
|
|
45
62
|
};
|
|
46
63
|
|
|
47
64
|
/**
|
|
48
|
-
Split a string
|
|
65
|
+
Split a string similar to Lodash's `_.words()` function.
|
|
49
66
|
|
|
50
67
|
- Split on each word that begins with a capital letter.
|
|
51
68
|
- Split on each {@link WordSeparators}.
|
|
69
|
+
- Split on each {@link AsciiPunctuation} (if {@link WordsOptions.splitOnPunctuation} is enabled).
|
|
52
70
|
- Split on numeric sequence.
|
|
53
71
|
|
|
54
72
|
@example
|
|
@@ -72,13 +90,21 @@ type Words4 = Words<'lifeIs42'>;
|
|
|
72
90
|
|
|
73
91
|
type Words5 = Words<'p2pNetwork', {splitOnNumbers: false}>;
|
|
74
92
|
//=> ['p2p', 'Network']
|
|
93
|
+
|
|
94
|
+
type Words6 = Words<'hello:world', {splitOnPunctuation: true}>;
|
|
95
|
+
//=> ['hello', 'world']
|
|
96
|
+
|
|
97
|
+
type Words7 = Words<'hello:world', {splitOnPunctuation: false}>;
|
|
98
|
+
//=> ['hello', ':world']
|
|
99
|
+
|
|
100
|
+
type Words8 = Words<'hello::world', {splitOnPunctuation: true}>;
|
|
101
|
+
//=> ['hello', 'world']
|
|
75
102
|
```
|
|
76
103
|
|
|
77
104
|
@category Change case
|
|
78
105
|
@category Template literal
|
|
79
106
|
*/
|
|
80
|
-
export type Words<Sentence extends string, Options extends WordsOptions = {}> =
|
|
81
|
-
WordsImplementation<Sentence, ApplyDefaultOptions<WordsOptions, _DefaultWordsOptions, Options>>;
|
|
107
|
+
export type Words<Sentence extends string, Options extends WordsOptions = {}> = WordsImplementation<Sentence, ApplyDefaultOptions<WordsOptions, _DefaultWordsOptions, Options>>;
|
|
82
108
|
|
|
83
109
|
type WordsImplementation<
|
|
84
110
|
Sentence extends string,
|
|
@@ -86,7 +112,7 @@ type WordsImplementation<
|
|
|
86
112
|
LastCharacter extends string = '',
|
|
87
113
|
CurrentWord extends string = '',
|
|
88
114
|
> = Sentence extends `${infer FirstCharacter}${infer RemainingCharacters}`
|
|
89
|
-
? FirstCharacter extends WordSeparators
|
|
115
|
+
? FirstCharacter extends WordSeparators | (Options['splitOnPunctuation'] extends true ? AsciiPunctuation : never)
|
|
90
116
|
// Skip word separator
|
|
91
117
|
? [...SkipEmptyWord<CurrentWord>, ...WordsImplementation<RemainingCharacters, Options>]
|
|
92
118
|
: LastCharacter extends ''
|
package/source/writable.d.ts
CHANGED
|
@@ -50,19 +50,19 @@ writableArray.push(4); // Will work as the array itself is now writable.
|
|
|
50
50
|
@category Object
|
|
51
51
|
*/
|
|
52
52
|
export type Writable<BaseType, Keys extends keyof BaseType = keyof BaseType> =
|
|
53
|
-
BaseType extends ReadonlyMap<infer KeyType, infer ValueType>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
BaseType extends ReadonlyMap<infer KeyType, infer ValueType>
|
|
54
|
+
? Map<KeyType, ValueType>
|
|
55
|
+
: BaseType extends ReadonlySet<infer ItemType>
|
|
56
|
+
? Set<ItemType>
|
|
57
|
+
: BaseType extends readonly unknown[]
|
|
58
|
+
// Handle array
|
|
59
|
+
? WritableArray<BaseType>
|
|
60
|
+
// Handle object
|
|
61
|
+
: Simplify<
|
|
62
|
+
// Pick just the keys that are not writable from the base type.
|
|
63
|
+
Except<BaseType, Keys>
|
|
64
|
+
// Make the specified keys writable.
|
|
65
|
+
& {-readonly [KeyType in keyof BaseType as KeyType extends Keys ? KeyType : never]: BaseType[KeyType]}
|
|
66
|
+
>;
|
|
67
67
|
|
|
68
68
|
export {};
|
package/source/xor.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type {And} from './and.d.ts';
|
|
|
3
3
|
import type {Or} from './or.d.ts';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
Returns a boolean for whether only one of two given types is true
|
|
6
|
+
Returns a boolean for whether only one of two given types is `true`.
|
|
7
7
|
|
|
8
8
|
Use-case: Constructing complex conditional types where one single condition must be satisfied.
|
|
9
9
|
|