@augment-vir/common
Version:
A collection of augments, helpers types, functions, and classes for any JavaScript environment.
254 lines (253 loc) • 4.48 kB
TypeScript
type TsRecursionArray = [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63,
64,
65,
66,
67,
68,
69,
70,
71,
72,
73,
74,
75,
76,
77,
78,
79,
80,
81,
82,
83,
84,
85,
86,
87,
88,
89,
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105,
106,
107,
108,
109,
110,
111,
112,
113,
114,
115,
116,
117,
118,
119,
120,
121,
122,
123,
124,
125,
126,
127,
128,
129,
130,
131,
132,
133,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150
];
/**
* This is used as the baseline type for TypeScript recursion tracking indexes. Use this to manually
* abort a type's recursion to prevent it from going too deep and throwing an error in TypeScript's
* language server.
*
* @category Type
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {
* type TsRecursionTracker,
* type TsRecursionStart,
* type TsRecurse,
* type TsTooMuchRecursion,
* } from '@augment-vir/common';
*
* export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
* Depth extends TsTooMuchRecursion
* ? 'Error: recursive object depth is too deep.'
* : SomeType<TsRecurse<Depth>>;
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export type TsRecursionTracker = keyof TsRecursionArray;
/**
* Through experimentation on Typescript version 5.4.5, this is the maximum recursion depth we can
* go to before TypeScript will block recursive types. Use this as the limit to type recursion.
*
* @category Type
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {
* type TsRecursionTracker,
* type TsRecursionStart,
* type TsRecurse,
* type TsTooMuchRecursion,
* } from '@augment-vir/common';
*
* export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
* Depth extends TsTooMuchRecursion
* ? 'Error: recursive object depth is too deep.'
* : SomeType<TsRecurse<Depth>>;
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export type TsTooMuchRecursion = 91;
/**
* This is the default starting recursion depth needed to get the full tested allowed recursion
* depth.
*
* @category Type
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {
* type TsRecursionTracker,
* type TsRecursionStart,
* type TsRecurse,
* type TsTooMuchRecursion,
* } from '@augment-vir/common';
*
* export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
* Depth extends TsTooMuchRecursion
* ? 'Error: recursive object depth is too deep.'
* : SomeType<TsRecurse<Depth>>;
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export type TsRecursionStart = 0;
/**
* Increments a TypeScript recursion depth tracker.
*
* @category Type
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {
* type TsRecursionTracker,
* type TsRecursionStart,
* type TsRecurse,
* type TsTooMuchRecursion,
* } from '@augment-vir/common';
*
* export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
* Depth extends TsTooMuchRecursion
* ? 'Error: recursive object depth is too deep.'
* : SomeType<TsRecurse<Depth>>;
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export type TsRecurse<CurrentRecursion extends TsRecursionTracker> = TsRecursionArray[CurrentRecursion] extends TsRecursionTracker ? TsRecursionArray[CurrentRecursion] : TsTooMuchRecursion;
export {};