|
15 | 15 | */ |
16 | 16 |
|
17 | 17 | /** |
18 | | - * @template {string} [TypeName=''] Default is `''` |
19 | | - * @template [Context=unknown] Default is `unknown` |
20 | | - * @template {{ [K: string]: any }} [Extensions={}] Default is `{}` |
| 18 | + * @template {{ |
| 19 | + * context?: any; |
| 20 | + * extensions?: { [K: string]: any }; |
| 21 | + * typeName?: string; |
| 22 | + * }} [A={}] |
| 23 | + * Default is `{}` |
| 24 | + * @template [_Context=A['context'] extends undefined ? unknown: A['context']] |
| 25 | + * Default is `A['context'] extends undefined ? unknown: A['context']` |
| 26 | + * @template [_Extensions=A['extensions'] extends undefined ? {} : A['extensions']] |
| 27 | + * Default is `A['extensions'] extends undefined ? {} : A['extensions']` |
| 28 | + * @template [TypeName=A['typeName'] extends undefined ? never : A['typeName']] |
| 29 | + * Default is `A['typeName'] extends undefined ? never : A['typeName']` |
21 | 30 | * @typedef {{ |
22 | | - * [K in TypeName]: Type< |
23 | | - * Schema<TypeName, Context, Extensions>, |
24 | | - * any, |
25 | | - * any, |
26 | | - * any, |
27 | | - * any |
28 | | - * >; |
| 31 | + * [K in TypeName extends string ? TypeName : never]: Type<Schema<A>, any>; |
29 | 32 | * }} Schema |
30 | 33 | */ |
31 | 34 |
|
32 | 35 | /** |
33 | | - * @template {Schema<any, any, any>} S |
34 | | - * @typedef {S extends Schema<infer TypeName, infer _, infer __> ? TypeName : never} SchemaTypeName |
| 36 | + * @template {Schema<any>} S |
| 37 | + * @typedef {S extends Schema<infer _, infer Context> ? Context : never} SchemaContext |
35 | 38 | */ |
36 | 39 |
|
37 | 40 | /** |
38 | | - * @template {Schema<any, any, any>} S |
39 | | - * @typedef {S extends Schema<infer _, infer Context, infer __> ? Context : never} SchemaContext |
| 41 | + * @template {Schema<any>} S |
| 42 | + * @typedef {S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never} SchemaExtensions |
40 | 43 | */ |
41 | 44 |
|
42 | 45 | /** |
43 | | - * @template {Schema<any, any, any>} S |
44 | | - * @typedef {S extends Schema<infer _, infer __, infer Extensions> ? Extensions : never} SchemaExtensions |
| 46 | + * @template {Schema<any>} S |
| 47 | + * @typedef {S extends Schema<infer _, infer __, infer ___, infer TypeName> |
| 48 | + * ? TypeName |
| 49 | + * : never} SchemaTypeName |
| 50 | + */ |
| 51 | + |
| 52 | +/** |
| 53 | + * @typedef {{ |
| 54 | + * input: unknown; |
| 55 | + * object: unknown; |
| 56 | + * resolvedValue: {}; |
| 57 | + * value: unknown; |
| 58 | + * }} DefaultTypeArg |
45 | 59 | */ |
46 | 60 |
|
47 | 61 | /** |
48 | | - * @template {Schema<any, any, any>} [S=Schema] Default is `Schema` |
49 | | - * @template [Input=unknown] Default is `unknown` |
50 | | - * @template [Object=unknown] Default is `unknown` |
51 | | - * @template [Value=unknown] Default is. Default is `unknown` |
52 | | - * @template [ResolvedValue={}] Default is `{}` |
| 62 | + * @template {Schema<any>} [S=Schema] Default is `Schema` |
| 63 | + * @template {{ input?: any; object?: any; resolvedValue?: {}; value?: any }} [A={}] |
| 64 | + * Default is `{}` |
| 65 | + * @template [Input=A['input'] extends undefined ? unknown : A['input']] |
| 66 | + * Default is `A['input'] extends undefined ? unknown : A['input']` |
| 67 | + * @template [Object=A['object'] extends undefined ? unknown : A['object']] |
| 68 | + * Default is `A['object'] extends undefined ? unknown : A['object']` |
| 69 | + * @template [ResolvedValue=A['resolvedValue'] extends undefined ? {} : A['resolvedValue']] |
| 70 | + * Default is `A['resolvedValue'] extends undefined ? {} : A['resolvedValue']` |
| 71 | + * @template [Value=A['value'] extends undefined ? undefined : A['value']] |
| 72 | + * Default is `A['value'] extends undefined ? undefined : A['value']` |
53 | 73 | * @typedef {Recursive< |
54 | 74 | * | SchemaTypeName<S> |
55 | 75 | * | (( |
56 | | - * | { optional: Type<S, any, any, any, any> } |
57 | | - * | { nullable: Type<S, any, any, any, any> } |
58 | | - * | { |
59 | | - * arrayOf: Type<S, any, any, any, any>; |
60 | | - * minLength?: number; |
61 | | - * maxLength?: number; |
62 | | - * } |
| 76 | + * | { optional: Type<S, any> } |
| 77 | + * | { nullable: Type<S, any> } |
| 78 | + * | { arrayOf: Type<S, any>; minLength?: number; maxLength?: number } |
63 | 79 | * | { |
64 | | - * oneOf: { [K: string]: Type<S, any, any, any, any> }; |
| 80 | + * oneOf: { [K: string]: Type<S, any> }; |
65 | 81 | * resolveType: (value: {}) => string; |
66 | 82 | * } |
| 83 | + * | { object: { [K: string]: Type<S, any> }; defaultType?: Type<S, any> } |
67 | 84 | * | { |
68 | | - * object: { [K: string]: Type<S, any, any, any, any> }; |
69 | | - * defaultType?: Type<S, any, any, any, any>; |
70 | | - * } |
71 | | - * | { |
72 | | - * input?: Type<S, any, any, any, any>; |
73 | | - * type?: Type<S, any, any, any, any>; |
| 85 | + * input?: Type<S, any>; |
| 86 | + * type?: Type<S, any>; |
74 | 87 | * typeInput?: any; |
75 | 88 | * resolve?: |
76 | 89 | * | ((options: { |
|
80 | 93 | * path: string[]; |
81 | 94 | * query: Query; |
82 | 95 | * schema: S; |
83 | | - * type: Type<S, any, any, any, any>; |
| 96 | + * type: Type<S, any>; |
84 | 97 | * value: Value; |
85 | 98 | * }) => any) |
86 | 99 | * | {} |
|
97 | 110 | * path: string[]; |
98 | 111 | * query: Query; |
99 | 112 | * schema: S; |
100 | | - * type: Type<S, any, any, any, any>; |
| 113 | + * type: Type<S, any>; |
101 | 114 | * value: Value; |
102 | 115 | * }) => number); |
103 | 116 | * defaultValue?: any; |
|
108 | 121 | * path: string[]; |
109 | 122 | * query: Query; |
110 | 123 | * schema: S; |
111 | | - * type: Type<S, any, any, any, any>; |
| 124 | + * type: Type<S, any>; |
112 | 125 | * value: ResolvedValue; |
113 | 126 | * }) => any; |
114 | 127 | * } & SchemaExtensions<S>) |
|
0 commit comments