type-fest 5.5.0 → 5.6.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.
Files changed (82) hide show
  1. package/index.d.ts +3 -0
  2. package/package.json +6 -4
  3. package/readme.md +70 -55
  4. package/source/absolute.d.ts +52 -0
  5. package/source/all-union-fields.d.ts +18 -18
  6. package/source/and.d.ts +1 -1
  7. package/source/array-splice.d.ts +24 -24
  8. package/source/camel-case.d.ts +38 -5
  9. package/source/camel-cased-properties-deep.d.ts +11 -4
  10. package/source/camel-cased-properties.d.ts +5 -1
  11. package/source/delimiter-case.d.ts +1 -0
  12. package/source/delimiter-cased-properties-deep.d.ts +8 -1
  13. package/source/delimiter-cased-properties.d.ts +5 -1
  14. package/source/empty-object.d.ts +1 -1
  15. package/source/entries.d.ts +1 -1
  16. package/source/entry.d.ts +1 -1
  17. package/source/get.d.ts +1 -1
  18. package/source/greater-than.d.ts +3 -2
  19. package/source/has-optional-keys.d.ts +1 -1
  20. package/source/has-readonly-keys.d.ts +1 -1
  21. package/source/has-required-keys.d.ts +1 -1
  22. package/source/has-writable-keys.d.ts +1 -1
  23. package/source/int-closed-range.d.ts +1 -3
  24. package/source/int-range.d.ts +3 -5
  25. package/source/internal/array.d.ts +7 -7
  26. package/source/internal/keys.d.ts +9 -9
  27. package/source/internal/numeric.d.ts +13 -23
  28. package/source/internal/tuple.d.ts +2 -2
  29. package/source/is-integer.d.ts +8 -8
  30. package/source/is-literal.d.ts +5 -5
  31. package/source/is-union.d.ts +12 -12
  32. package/source/iterable-element.d.ts +5 -5
  33. package/source/jsonify.d.ts +4 -4
  34. package/source/kebab-case.d.ts +1 -0
  35. package/source/kebab-cased-properties-deep.d.ts +7 -0
  36. package/source/kebab-cased-properties.d.ts +5 -1
  37. package/source/keys-of-union.d.ts +2 -2
  38. package/source/less-than-or-equal.d.ts +1 -1
  39. package/source/literal-to-primitive.d.ts +1 -1
  40. package/source/literal-union.d.ts +1 -1
  41. package/source/merge-exclusive.d.ts +3 -3
  42. package/source/multidimensional-array.d.ts +1 -1
  43. package/source/multidimensional-readonly-array.d.ts +1 -1
  44. package/source/non-nullable-deep.d.ts +102 -0
  45. package/source/numeric.d.ts +3 -3
  46. package/source/omit-deep.d.ts +22 -22
  47. package/source/or.d.ts +1 -1
  48. package/source/package-json.d.ts +7 -7
  49. package/source/partial-deep.d.ts +3 -1
  50. package/source/pascal-case.d.ts +1 -0
  51. package/source/pascal-cased-properties-deep.d.ts +7 -0
  52. package/source/pascal-cased-properties.d.ts +5 -1
  53. package/source/pick-deep.d.ts +2 -0
  54. package/source/readonly-deep.d.ts +5 -3
  55. package/source/remove-prefix.d.ts +15 -15
  56. package/source/replace.d.ts +2 -2
  57. package/source/require-all-or-none.d.ts +1 -1
  58. package/source/require-at-least-one.d.ts +5 -7
  59. package/source/require-exactly-one.d.ts +3 -3
  60. package/source/require-one-or-none.d.ts +1 -1
  61. package/source/required-deep.d.ts +3 -1
  62. package/source/screaming-snake-case.d.ts +1 -0
  63. package/source/set-non-nullable-deep.d.ts +6 -3
  64. package/source/set-non-nullable.d.ts +1 -1
  65. package/source/set-optional.d.ts +5 -5
  66. package/source/set-readonly.d.ts +3 -3
  67. package/source/set-required-deep.d.ts +1 -1
  68. package/source/set-required.d.ts +3 -3
  69. package/source/shared-union-fields.d.ts +9 -9
  70. package/source/snake-case.d.ts +1 -0
  71. package/source/snake-cased-properties-deep.d.ts +7 -0
  72. package/source/snake-cased-properties.d.ts +5 -1
  73. package/source/subtract.d.ts +4 -3
  74. package/source/sum.d.ts +5 -4
  75. package/source/tagged.d.ts +3 -5
  76. package/source/tsconfig-json.d.ts +39 -7
  77. package/source/union-length.d.ts +27 -0
  78. package/source/union-to-intersection.d.ts +1 -1
  79. package/source/union-to-tuple.d.ts +8 -4
  80. package/source/words.d.ts +30 -4
  81. package/source/writable.d.ts +14 -14
  82. package/source/xor.d.ts +1 -1
@@ -61,6 +61,7 @@ export namespace TsConfigJson {
61
61
  | 'ES2022'
62
62
  | 'ES2023'
63
63
  | 'ES2024'
64
+ | 'ES2025'
64
65
  | 'ESNext'
65
66
  // Lowercase alternatives
66
67
  | 'es3'
@@ -76,6 +77,7 @@ export namespace TsConfigJson {
76
77
  | 'es2022'
77
78
  | 'es2023'
78
79
  | 'es2024'
80
+ | 'es2025'
79
81
  | 'esnext';
80
82
 
81
83
  type Lib =
@@ -148,6 +150,13 @@ export namespace TsConfigJson {
148
150
  | 'ES2024.Regexp'
149
151
  | 'ES2024.SharedMemory'
150
152
  | 'ES2024.String'
153
+ | 'ES2025'
154
+ | 'ES2025.Collection'
155
+ | 'ES2025.Float16'
156
+ | 'ES2025.Intl'
157
+ | 'ES2025.Iterator'
158
+ | 'ES2025.Promise'
159
+ | 'ES2025.RegExp'
151
160
  | 'ESNext'
152
161
  | 'ESNext.Array'
153
162
  | 'ESNext.AsyncIterable'
@@ -156,6 +165,7 @@ export namespace TsConfigJson {
156
165
  | 'ESNext.Decorators'
157
166
  | 'ESNext.Disposable'
158
167
  | 'ESNext.Error'
168
+ | 'ESNext.Float16'
159
169
  | 'ESNext.Intl'
160
170
  | 'ESNext.Iterator'
161
171
  | 'ESNext.Object'
@@ -163,6 +173,7 @@ export namespace TsConfigJson {
163
173
  | 'ESNext.Regexp'
164
174
  | 'ESNext.String'
165
175
  | 'ESNext.Symbol'
176
+ | 'ESNext.Temporal'
166
177
  | 'ESNext.WeakRef'
167
178
  | 'DOM'
168
179
  | 'DOM.AsyncIterable'
@@ -244,6 +255,13 @@ export namespace TsConfigJson {
244
255
  | 'es2024.regexp'
245
256
  | 'es2024.sharedmemory'
246
257
  | 'es2024.string'
258
+ | 'es2025'
259
+ | 'es2025.collection'
260
+ | 'es2025.float16'
261
+ | 'es2025.intl'
262
+ | 'es2025.iterator'
263
+ | 'es2025.promise'
264
+ | 'es2025.regexp'
247
265
  | 'esnext'
248
266
  | 'esnext.array'
249
267
  | 'esnext.asynciterable'
@@ -252,6 +270,7 @@ export namespace TsConfigJson {
252
270
  | 'esnext.decorators'
253
271
  | 'esnext.disposable'
254
272
  | 'esnext.error'
273
+ | 'esnext.float16'
255
274
  | 'esnext.intl'
256
275
  | 'esnext.iterator'
257
276
  | 'esnext.object'
@@ -259,6 +278,7 @@ export namespace TsConfigJson {
259
278
  | 'esnext.regexp'
260
279
  | 'esnext.string'
261
280
  | 'esnext.symbol'
281
+ | 'esnext.temporal'
262
282
  | 'esnext.weakref'
263
283
  | 'dom'
264
284
  | 'dom.asynciterable'
@@ -326,7 +346,7 @@ export namespace TsConfigJson {
326
346
  | 'legacy'
327
347
  | 'force';
328
348
 
329
- type IgnoreDeprecations = '5.0';
349
+ type IgnoreDeprecations = '5.0' | '6.0';
330
350
  }
331
351
 
332
352
  type CompilerOptions = {
@@ -479,7 +499,7 @@ export namespace TsConfigJson {
479
499
  /**
480
500
  Specify module code generation: 'None', 'CommonJS', 'AMD', 'System', 'UMD', 'ES6', 'ES2015' or 'ESNext'. Only 'AMD' and 'System' can be used in conjunction with `--outFile`. 'ES6' and 'ES2015' values may be used when targeting 'ES5' or lower.
481
501
 
482
- @default ['ES3', 'ES5'].includes(target) ? 'CommonJS' : 'ES6'
502
+ Default: `'ESNext'` since TypeScript 6.0, `['ES3', 'ES5'].includes(target) ? 'CommonJS' : 'ES6'` before.
483
503
  */
484
504
  module?: CompilerOptions.Module;
485
505
 
@@ -587,8 +607,17 @@ export namespace TsConfigJson {
587
607
  */
588
608
  skipLibCheck?: boolean;
589
609
 
610
+ /**
611
+ Enforce stable type ordering.
612
+
613
+ @default false
614
+ */
615
+ stableTypeOrdering?: boolean;
616
+
590
617
  /**
591
618
  Concatenate and emit output to single file.
619
+
620
+ @deprecated since TypeScript 6.0.
592
621
  */
593
622
  outFile?: string;
594
623
 
@@ -696,7 +725,7 @@ export namespace TsConfigJson {
696
725
  /**
697
726
  Specify ECMAScript target version.
698
727
 
699
- @default 'es3'
728
+ Default: Current-year ES version since TypeScript 6.0, `'es3'` before.
700
729
  */
701
730
  target?: CompilerOptions.Target;
702
731
 
@@ -776,7 +805,7 @@ export namespace TsConfigJson {
776
805
  /**
777
806
  Report error if failed to find a source file for a side effect import.
778
807
 
779
- @default false
808
+ Default: `true` since TypeScript 6.0, `false` before.
780
809
  */
781
810
  noUncheckedSideEffectImports?: boolean;
782
811
 
@@ -822,6 +851,8 @@ export namespace TsConfigJson {
822
851
 
823
852
  /**
824
853
  Base directory to resolve non-relative module names.
854
+
855
+ @deprecated since TypeScript 6.0.
825
856
  */
826
857
  baseUrl?: string;
827
858
 
@@ -944,7 +975,7 @@ export namespace TsConfigJson {
944
975
  /**
945
976
  Enable all strict type checking options.
946
977
 
947
- @default false
978
+ Default: `true` since TypeScript 6.0, `false` before.
948
979
  */
949
980
  strict?: boolean;
950
981
 
@@ -959,6 +990,7 @@ export namespace TsConfigJson {
959
990
  Provide full support for iterables in `for-of`, spread, and destructuring when targeting `ES5` or `ES3`.
960
991
 
961
992
  @default false
993
+ @deprecated since TypeScript 6.0.
962
994
  */
963
995
  downlevelIteration?: boolean;
964
996
 
@@ -1150,7 +1182,7 @@ export namespace TsConfigJson {
1150
1182
  /**
1151
1183
  Enable lib replacement.
1152
1184
 
1153
- @default true
1185
+ Default: `false` since TypeScript 6.0, `true` before.
1154
1186
  */
1155
1187
  libReplacement?: boolean;
1156
1188
  };
@@ -1266,7 +1298,7 @@ export namespace TsConfigJson {
1266
1298
  }
1267
1299
 
1268
1300
  /**
1269
- Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (TypeScript 3.7).
1301
+ Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html).
1270
1302
 
1271
1303
  @category File
1272
1304
  */
@@ -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 using [distributive conditional types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-conditional-types).
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<T, L = UnionMember<T>> =
41
- IsNever<T> extends false
42
- ? [...UnionToTuple<ExcludeExactly<T, L>>, L]
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 {};
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 (almost) like Lodash's `_.words()` function.
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 ''
@@ -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
- ? 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
- // Pick the keys that should be writable from the base type and make them writable by removing the `readonly` modifier from the key.
65
- {-readonly [KeyType in keyof Pick<BaseType, Keys>]: Pick<BaseType, Keys>[KeyType]}
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
+ // Pick the keys that should be writable from the base type and make them writable by removing the `readonly` modifier from the key.
65
+ & {-readonly [KeyType in keyof Pick<BaseType, Keys>]: Pick<BaseType, Keys>[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